1

我正在使用 TomEE Plus 1.7.2 服务器并尝试启动一个包含 OmniFaces 的 web 应用程序,但我得到一个 Nullpointer 异常:

警告:无法为请求/index.xhtml 实例化急切请求范围的 bean。可能 CDI 请求范围未激活。如果确实如此,请参阅 org.omnifaces.cdi.Eager 上的 JavaDoc,了解如何解决此问题。

java.lang.NullPointerException at org.omnifaces.cdi.eager.EagerBeansWebListener.requestInitialized(EagerBeansWebListener.java:78)

当我使用 OmniFaces 文档中所示的EagerBeansFilter时,我得到了一些细微的变化:

警告:无法实例化急切的应用程序范围 bean。可能 CDI 应用程序范围未激活。众所周知,在某些基于 Tomcat 和 Jetty 的配置中就是这种情况。

org.omnifaces.cdi.eager.EagerBeansRepository.instantiateApplicationScopedAndRegisterListener 的 java.lang.NullPointerException(EagerBeansRepository.java:69)

这台服务器不能与omnifaces结合吗?

4

1 回答 1

2

TomEE 在 WildFly 之后是 OmniFaces 测试最多的服务器之一,特别是因为它在 Java EE 中几乎所有地方都使用了与 WildFly(Apache 与 Oracle)不同的实现。在OmniFaces 兼容性矩阵中,您可以找到成功运行在OmniFaces 展示中所有页面的 TomEE 版本。

BeanManager当 CDI找不到 OmniFaces时,您的问题中提到的那些异常将被抛出EagerBeansRepository,这是一个@ApplicationScopedbean。这反过来表示 CDI 环境配置错误(例如错误的 beans.xml 或缺少 JNDI/listener 配置)或脏构建(例如重复库)。验证 CDI 配置并执行完全清理/重建应该可以解决问题。

至少,OmniFaces 2.2 或更新版本在技术上与 TomEE 1.x 不兼容,因为 TomEE 1.x 附带 JSF 2.1,而 OmniFaces 2.2 或更新版本由于新<o:viewAction>标签而硬依赖 JSF 2.2。因此,除非您修改 TomEE 以提供 JSF 2.2,否则 OmniFaces 2.2 或更新版本将不会部署并且应该会失败部署,但出现以下异常:

java.lang.NoClassDefFoundError: javax/faces/component/UIViewAction

成功部署在 TomEE 1.7.x 服务器上的最新 OmniFaces 版本是 OmniFaces 2.1。如果您想在现有的 TomEE 上使用 OmniFaces 2.2 或更新版本,那么您需要升级到 TomEE 7.x。

于 2016-04-11T08:45:00.330 回答