2

我目前正在使用 Primefaces 4.0、Omnifaces 1.6.2、MyFaces 2.1.12 和 Google App Engine 1.8.3。

部署应用程序时出现以下错误:

java.lang.NoClassDefFoundError: javax.naming.InitialContext is a restricted class. Please see the Google  App Engine developer's guide for more details.
    at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
    at org.omnifaces.util.JNDI.lookup(JNDI.java:82)
    at org.omnifaces.config.BeanManager.init(BeanManager.java:68)
    at org.omnifaces.config.BeanManager.getReference(BeanManager.java:107)
    at org.omnifaces.application.OmniApplication.createConverter(OmniApplication.java:86)
    at org.primefaces.config.ConfigContainer.initConfig(ConfigContainer.java:69)
    at org.primefaces.config.ConfigContainer.<init>(ConfigContainer.java:59)

是否可以在启动时禁用 Omnifaces 中的 CDI 功能/JNDI 查找

我在 Omnifaces 1.6.0 中没有这个问题。

提前致谢,

拉斐尔。

4

1 回答 1

1

此问题已在OmniFaces 1.6.3 中修复。解决方案是当 JNDI(和 CDI)在运行时类路径中不可用时快速而静默地失败。

try {
    Class.forName("javax.enterprise.inject.spi.BeanManager"); // Is CDI present?
    Class.forName("javax.naming.InitialContext"); // Is JNDI present? (not on Google App Engine)
}
catch (Throwable ignore) {
    return; // CDI or JNDI not supported on this environment.
}

// ...
于 2013-10-18T16:33:34.043 回答