jsf 2.2(最终版)不适用于 Jboss 7.1.1

Posted

技术标签:

【中文标题】jsf 2.2(最终版)不适用于 Jboss 7.1.1【英文标题】:jsf 2.2 (final) not works on Jboss 7.1.1 【发布时间】:2013-06-12 20:58:27 【问题描述】:

在我看来,JSF 2.2 在 JBoss 7.1.1 上根本不起作用

使用 jboss 的多 jsf,我只是用各自的 jsf 2.2 jar 替换了 jsf api 和 jsf 实现模块

当我的应用程序启动时,我看到以下错误:

01:46:59,286 INFO  [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-5) Initializing Mojarra 2.2.0 ( 20130502-2118 https://svn.java.net/svn/mojarra~svn/tags/2.2.0@11930) for context '/broker'
01:46:59,922 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-5) Critical error during deployment: : java.lang.NoClassDefFoundError: com/sun/faces/spi/InjectionProvider
    at javax.faces.FactoryFinder$FactoryManager.copyInjectionProviderFromFacesContext(FactoryFinder.java:1051) [jboss-jsf-api_2.2_spec-2.2.0.jar:2.2.0]
    at javax.faces.FactoryFinder$FactoryManager.<init>(FactoryFinder.java:1035) [jboss-jsf-api_2.2_spec-2.2.0.jar:2.2.0]
    at javax.faces.FactoryFinder$FactoryManagerCache.getApplicationFactoryManager(FactoryFinder.java:856) [jboss-jsf-api_2.2_spec-2.2.0.jar:2.2.0]
    at javax.faces.FactoryFinder$FactoryManagerCache.getApplicationFactoryManager(FactoryFinder.java:793) [jboss-jsf-api_2.2_spec-2.2.0.jar:2.2.0]
    at javax.faces.FactoryFinder$FactoryManagerCache.access$100(FactoryFinder.java:768) [jboss-jsf-api_2.2_spec-2.2.0.jar:2.2.0]
    at javax.faces.FactoryFinder.setFactory(FactoryFinder.java:409) [jboss-jsf-api_2.2_spec-2.2.0.jar:2.2.0]
    at com.sun.faces.config.processor.FactoryConfigProcessor.setFactory(FactoryConfigProcessor.java:317) [jsf-impl-2.2.0.jar:2.2.0]
    at com.sun.faces.config.processor.FactoryConfigProcessor.processFactories(FactoryConfigProcessor.java:259) [jsf-impl-2.2.0.jar:2.2.0]
    at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:216) [jsf-impl-2.2.0.jar:2.2.0]
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:435) [jsf-impl-2.2.0.jar:2.2.0]
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:214) [jsf-impl-2.2.0.jar:2.2.0]
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_09]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_09]
    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_09]
Caused by: java.lang.ClassNotFoundException: com.sun.faces.spi.InjectionProvider from [Module "javax.faces.api:main" from local module loader @70dc82be (roots: /Users/ilyadyoshin/develop/jboss-as-7.1.1.Final/modules)]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
    ... 19 more

更多:当我查看 jsf-api.jar 的内容时,我看到了这个类。

【问题讨论】:

【参考方案1】:

可能是我迟到了,但对于遇到同样问题的其他人,我在这里找到了解决方案:https://community.jboss.org/thread/203257?start=0&tstart=0

通过添加以下行,在 JSF API 模块module.xml 中添加对 JSF IMPL 模块的依赖:

<module name="com.sun.jsf-impl"/>

当 AS 上存在多个 JSF 版本时,可能需要进行一些更改。 使用 JBoss 7.1 和 JSF 2.2.0m12 测试

编辑:我没有在您的主题中看到“(最终)”,在最终的 JSF 2.2 版本中,我遇到了 FlowDefinition 的 NoContextActiveException 的另一个问题 :(

【讨论】:

【参考方案2】:

另一个答案 (https://community.jboss.org/thread/203257) 中引用的线程已更新。我已经在我的 AS 7.1.1 上尝试过,它可以工作

【讨论】:

自我的回答以来一直没有更新。我的理解是,你可以让它以某种方式工作,但不能保证所有功能都能正常工作。如果是这种情况,您不应该在生产环境中使用它 - 但也许帖子是错误的。【参考方案3】:

你说得对,JSF 2.2 似乎只支持从 Wildfly / AS 8 开始。我找到了一个带有安装说明的 thread at JBoss community,然后是使用 AS 7.1.1 安装没有意义的信息。

【讨论】:

以上是关于jsf 2.2(最终版)不适用于 Jboss 7.1.1的主要内容,如果未能解决你的问题,请参考以下文章

JSF 2.2 h:inputFile 不适用于漂亮的面孔[重复]

JSF 2.2 - 文件上传不适用于 Ajax。表单的编码类型似乎不正确(仅通过 AJAX)

JSF 2.2 webapp适用于本地计算机,但不适用于服务器

Oracle Java EE 7 JSF 示例不适用于 Tomcat

集群环境中的故障​​转移不适用于 JSF 2、Richfaces 4、Tomcat 7

远程客户端访问部署在 JBOSS AS 中的 EJB 的 JNDI 循环(7.1.1 最终版)