当前位置: 首页 > 知识库问答 >
问题:

JSF如何在Netbeans7.1中升级到Mojarra 2.1.21(只是子jsf-api.jarjsf-impl.jar失败)

徐帅
2023-03-14

我想从Netbeans7.1(Glassish 3.1.1)中的JSF实现Mojarra 2.1.3升级。

您可能会先问我为什么不升级到Netbeans7.3,原因包括它运行Glassfish 3.1.2.2,并且我的Web应用程序中还有其他一些第三方软件尚未与高于3.1.1的Glassfish兼容,除此之外,它只有Mojarra 2.1.6。

我曾经能够通过简单地替换jsf-api.jar和 /glassfish/modules下的jsf-impl.jar来升级Mojarra,但这并不适用于:

https://maven . Java . net/content/repositories/releases/com/sun/faces/JSF-API/2 . 1 . 21/JSF-API-2 . 1 . 21 . jar https://maven . Java . net/content/repositories/releases/com/sun/faces/JSF-impl/2 . 1 . 21/JSF-impl-2 . 1 . 21 . jar

我收到以下错误:

    SEVERE: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.enterprise.glassfish.bootstrap.GlassFishMain.main(GlassFishMain.java:97)
at com.sun.enterprise.glassfish.bootstrap.ASMain.main(ASMain.java:55)
Caused by: com.sun.enterprise.module.ResolveError: Failed to start Bundle Id [301] State [INSTALLED] [org.glassfish.web.weld-integration(Weld integration for glassfish):3.1.1]
at org.jvnet.hk2.osgiadapter.OSGiModuleImpl.start(OSGiModuleImpl.java:177)
at org.jvnet.hk2.osgiadapter.OSGiModuleImpl$2$1$1.loadClass(OSGiModuleImpl.java:344)
at com.sun.hk2.component.LazyInhabitant.loadClass(LazyInhabitant.java:124)
at com.sun.hk2.component.LazyInhabitant.fetch(LazyInhabitant.java:111)
at com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:135)
at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:76)
at org.jvnet.hk2.component.Habitat$5.get(Habitat.java:701)
at java.util.AbstractList$Itr.next(AbstractList.java:345)
at java.util.AbstractCollection.toArray(AbstractCollection.java:124)
at java.util.ArrayList.addAll(ArrayList.java:472)
at com.sun.enterprise.v3.server.SnifferManagerImpl.getSniffers(SnifferManagerImpl.java:92)
at com.sun.enterprise.v3.server.SnifferManagerImpl.getSniffer(SnifferManagerImpl.java:120)
at com.sun.enterprise.v3.server.ApplicationLifecycle.getSniffersFromApp(ApplicationLifecycle.java:2140)
at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:375)
at com.sun.enterprise.v3.server.ApplicationLoaderService.postConstruct(ApplicationLoaderService.java:219)
at com.sun.hk2.component.AbstractCreatorImpl.inject(AbstractCreatorImpl.java:131)
at com.sun.hk2.component.ConstructorCreator.initialize(ConstructorCreator.java:91)
at com.sun.hk2.component.AbstractCreatorImpl.get(AbstractCreatorImpl.java:82)
at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:67)
at com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:139)
at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:76)
at com.sun.enterprise.v3.server.AppServerStartup.run(AppServerStartup.java:253)
at com.sun.enterprise.v3.server.AppServerStartup.doStart(AppServerStartup.java:145)
at com.sun.enterprise.v3.server.AppServerStartup.start(AppServerStartup.java:136)
at com.sun.enterprise.glassfish.bootstrap.GlassFishImpl.start(GlassFishImpl.java:79)
at com.sun.enterprise.glassfish.bootstrap.GlassFishDecorator.start(GlassFishDecorator.java:63)
at com.sun.enterprise.glassfish.bootstrap.osgi.OSGiGlassFishImpl.start(OSGiGlassFishImpl.java:69)
at com.sun.enterprise.glassfish.bootstrap.GlassFishMain$Launcher.launch(GlassFishMain.java:117)
... 6 more
Caused by: org.osgi.framework.BundleException: Unresolved constraint in bundle org.glassfish.web.weld-integration [301]: Unable to resolve 301.0: missing requirement [301.0] package; (&(package=com.sun.faces.spi)(version>=2.1.0)) [caused by: Unable to resolve 213.1: missing requirement [213.1] package; (package=javax.faces) [caused by: Unable to resolve 211.1: missing requirement [211.1] package; (&(package=javax.el)(version>=2.2.1))]]
at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3443)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1727)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:922)
at org.jvnet.hk2.osgiadapter.OSGiModuleImpl.start(OSGiModuleImpl.java:169)

我尝试了特定于web应用的JSF,但也失败了:

glassfish更改默认jsf实现

已添加到网络.xml

<class-loader delegate="false" />
<property name="useBundledJsf" value="true" />

我得到的错误是:

Error occurred during deployment: Exception while loading the app :    
java.lang.IllegalStateException: ContainerBase.addChild: start:  
org.apache.catalina.LifecycleException: java.lang.RuntimeException: 
com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! 
org.glassfish.weld.jsf.WeldFacesConfigProvider cannot be cast to 
com.sun.faces.spi.ConfigurationResourceProvider. Please see server.log for more details.

感谢您的建议。

共有2个答案

松茂实
2023-03-14

好的,我终于有了2个解决方法(仅限)来让Mojarra-2.1.21与Netbeans7.1一起运行。

首先,我认为以下推荐的方法在Netbeans7.1中并不可行,它顽固地拒绝识别服务器安装的javax.faces.jar。

从https://weblogs.java.net/blog/edburns/archive/2011/09/26/try-out-mojarra-220-snapshot?force=714:

下载javax.faces之后。jar,您必须采取一些步骤将其安装在GlassFish 3.1或3.1.1中。

从模块目录中删除jsf-api.jar和jsf-impl.jar。

放置javax.faces。jar在modules目录中。

您必须修改域/域1/配置和库/模板中的default-web.xml文件。在每个目录中,从default.web.xml文件中删除对jsf-api.jar和jsf-impl.jar的任何提及。添加对javax.faces.jar.的引用来代替这两个罐子

无论我用Netbeans7.1做什么(无论是否清除osgi缓存和netbean缓存,或者是否删除然后在Netbeans7.1中重新添加服务器,或者我重新启动glass

如果您尝试将javax.faces.jar(仅限)添加到Web应用程序库中,并glassfish-web.xml使用它来使用特定于Web应用程序的JSF,它将防止Netbeans7.1项目中的导入错误,但它仍然不会运行:

<class-loader delegate="false" />
<property name="useBundledJsf" value="true" />

我得到这个错误:

Error occurred during deployment: Exception while loading the app :   
java.lang.IllegalStateException: ContainerBase.addChild: start:   
org.apache.catalina.LifecycleException: java.lang.RuntimeException:   
com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED!   
org.glassfish.weld.jsf.WeldFacesConfigProvider cannot be cast to 
com.sun.faces.spi.ConfigurationResourceProvider.

原因描述如下:http://java.dzone.com/articles/upgrading-latest-mojarra

问题似乎是类路径上有两个版本的配置资源提供者:一个在Web应用程序级别(您的捆绑的jar文件),另一个在父类加载器级别(由Glass鱼提供)。WeldFacesCon人和提供者在父类加载器上扩展了配置资源提供者,但它最终在Web应用程序类加载器上将其转换为配置资源提供者。…解决方法:将缺失的依赖项添加到您的应用程序如果您不能跨类加载器进行转换,您必须将缺失的部分提供给正确的类加载器。不替换服务器模块中的javax.faces.jar会导致向您的应用程序中添加神奇的WeldFacesConfi提供程序。它包含在glass

您现在有2个解决方法选择:

>

  • 在Web应用程序库中包含weld-integration.jar,并在glassfish-web.xml.中使用Web应用程序JSF设置运行

    肮脏的把戏:在.../glassfish/modules/javax.faces.jar仍然存在的情况下,以及在您的Web应用程序库中,禁用或取消注释Glassfish-web.xml中的位。然后,它将与服务器javax.faces一起运行.jar(并且会看到/modules/weld-integration.jar),Netbeans将看到特定于Web应用程序的导入库。

    这不能令人满意,我认为这个问题没有得到充分回答。

    Q: 如何在NetBeans7.1中运行JSF Mojarra 2.1.21作为Glassfish 3.1.1服务器JSF libs?

    再说一次,我不能升级Netbean Glassish的原因是,我在使用3.1.1以上版本的Glassish的ObjectDB时遇到了多个问题,这就是为什么我如此坚持在Netbeans7.1 Glass的3.1.1上安装JSF Mojarra 2.1.21。

    感谢任何进一步的建议。

  • 糜昌胤
    2023-03-14

    尝试以下步骤

      < li >从这里下载JSF 2 . 1 . 21 jar < li >将其重命名为javax.faces.jar。 < li >备份docroot\glassfish\modules中的javax.faces.jar文件 < li >将旧的javax.faces.jar粘贴并替换为docroot\glassfish\modules中下载的javax . faces . jar < li >删除osgi缓存glassfish3\glassfish\osgi以使更改生效
     类似资料:
    • 如何在JBoss服务器中升级Mojarra并告诉它使用给定的Mojarra 2. x JAR而不是JBoss自己的如启动日志所示? 如果相关的话,我目前正在使用JBoss AS 7.1。

    • 问题内容: 情况:我有一个JavaServer Faces页面和一个会话范围的托管bean,它具有两个属性:一个用于保存可能值的列表,另一个用于保存所选值的列表。在JSF页面上,有一个绑定了这两个属性的组件。 问题:提交表单后,选定的值将转换为字符串(ArrayList类型的属性实际上包含几个字符串!);但是,当我使用转换器时,出现如下错误消息: 验证错误:值无效 问题:如何将属正确绑定到组件?

    • 我正在为我们的应用程序创建升级路径,在此过程中出现了几个问题。我想,我的配置经常在这种情况下使用,所以也许有人以前经历过。 简短的应用程序描述: JSF Web应用程序 ICE作为JSF框架(实际版本1.8.3最新是3.1) 接缝作为EJB/View之间的连接(实际是2.1.1,最新是2.2.2或3) 在JBoss 4.2.2中部署。GA(最新是7.1) 通过Hibernate/Seam Enti

    • 问题内容: 在JSF中减小viewstate隐藏字段大小的最佳方法是什么?我已经注意到,我的视图状态大约为40k,这会下降到客户端,并在每次请求和响应(尤其是到达服务器)时都返回到服务器,这对于用户来说是一个严重的问题。 我的环境JSF 1.2,MyFaces,Tomcat,战斧,RichFaces 问题答案: 您是否尝试过将状态保存设置为服务器?这应该仅将ID发送给客户端,并在服务器上保持完整状

    • 正如标题所述,我们最近从WebLogic 10.3.6升级到了12c。我们的应用程序使用的是JSF1.1,但对于12c,您必须使用1.2或2.0。我遇到的问题是,将应用程序更新到1.2、在WebLogic中部署1.2,然后还要更新WebLogic。xml错误不会消失,前端返回500个错误。 更新应用程序和weblogic。xml:首先删除了jsf api。jar和jsf impl。来自WEB-IN