【问题标题】:Omnifaces exception on deployment on Tomcat 7在 Tomcat 7 上部署的 Omnifaces 异常
【发布时间】:2015-11-01 04:16:18
【问题描述】:

我正在尝试将 Omnifaces 2.1 添加到 Web 应用程序以使用 FullAjaxExceptionHandler 以及 Omnifaces 2.1 中可能的其他功能。

我已经阅读并关注了 BallusC 的以下帖子,但仍然卡住: How to install and use CDI on Tomcat?

尝试安装 Weld 2.2.9.Final 并按上述方式进行配置。我正在使用以下内容:

JSF 2.2、EL 2.2、Servlet 3、Java 7

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="{name}" version="3.0">

启动时我仍然收到以下异常:

Catalina.log:

INFO: Starting service Catalina
Aug 09, 2015 8:57:18 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.56
Aug 09, 2015 8:57:18 AM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor C:\xampp\tomcat\conf\Catalina\localhost\MITrace.xml
Aug 09, 2015 8:57:24 AM org.richfaces.webapp.ResourceServletContainerInitializer registerServlet
INFO: Auto-registered servlet ResourceServlet with mapping '/org.richfaces.resources/*'
Aug 09, 2015 8:57:24 AM org.omnifaces.ApplicationInitializer logOmniFacesVersion
INFO: Using OmniFaces version 2.1
Aug 09, 2015 8:57:26 AM com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra 2.2.6 ( 20140304-1537 https://svn.java.net/svn/mojarra~svn/tags/2.2.6@12949) for context '/MITrace'
Aug 09, 2015 8:57:27 AM com.sun.faces.spi.InjectionProviderFactory createInstance
INFO: JSF1048: PostConstruct/PreDestroy annotations present.  ManagedBeans methods marked with these annotations will have said annotations processed.
Aug 09, 2015 8:57:27 AM com.sun.faces.config.ConfigureListener contextInitialized
SEVERE: Critical error during deployment: 
java.lang.NoClassDefFoundError: Could not initialize class org.omnifaces.config.BeanManager
    at org.omnifaces.application.OmniApplication.<init>(OmniApplication.java:69)
    at org.omnifaces.application.OmniApplicationFactory.createOmniApplication(OmniApplicationFactory.java:89)
    at org.omnifaces.application.OmniApplicationFactory.getApplication(OmniApplicationFactory.java:54)
    at com.sun.faces.application.InjectionApplicationFactory.getApplication(InjectionApplicationFactory.java:93)
    at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:144)
    at com.sun.faces.lifecycle.ClientWindowFactoryImpl.<init>(ClientWindowFactoryImpl.java:62)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:379)
    at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:721)
    at javax.faces.FactoryFinder.getImplementationInstance(FactoryFinder.java:553)
    at javax.faces.FactoryFinder.access$500(FactoryFinder.java:140)
    at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1120)
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:379)
    at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:328)
    at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:236)
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:435)
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:214)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4992)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:672)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1861)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

本地主机日志:

Aug 09, 2015 10:28:23 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
Aug 09, 2015 10:28:25 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Aug 09, 2015 10:28:27 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.omnifaces.ApplicationListener
java.lang.ExceptionInInitializerError
    at org.omnifaces.ApplicationListener.checkCDIAvailable(ApplicationListener.java:63)
    at org.omnifaces.ApplicationListener.contextInitialized(ApplicationListener.java:55)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4994)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:672)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1861)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: CDI BeanManager instance is not available in JNDI.
    at org.omnifaces.config.BeanManager.<init>(BeanManager.java:99)
    at org.omnifaces.config.BeanManager.<clinit>(BeanManager.java:49)
    ... 15 more
Caused by: java.lang.IllegalStateException: javax.naming.NamingException: Cannot create resource instance
    at org.omnifaces.util.JNDI.lookup(JNDI.java:92)
    at org.omnifaces.config.BeanManager.<init>(BeanManager.java:95)
    ... 16 more
Caused by: javax.naming.NamingException: Cannot create resource instance
    at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:115)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:156)
    at javax.naming.InitialContext.lookup(InitialContext.java:411)
    at org.omnifaces.util.JNDI.lookup(JNDI.java:88)
    ... 17 more

jar 确实存在并已添加到应用程序中。

还有什么可能导致此错误?

【问题讨论】:

  • 该异常的根本原因是什么? (最底部的)你的web.xml&lt;web-app&gt; 根声明到底是什么样的?
  • 您好,感谢您的回复。我已经更新了我的帖子,以包含 catalina 和 localhost 日志文件中最底层的异常。我还按要求添加了 web-app 根声明。
  • 哈,“原因:java.lang.IllegalStateException:CDI BeanManager 实例在 JNDI 中不可用”。尝试将 &lt;resource-env-ref&gt;&lt;resource-env-ref-name&gt;BeanManager&lt;/resource-env-ref-name&gt;&lt;resource-env-ref-type&gt;javax.enterprise.inject.spi.BeanManager&lt;/resource-env-ref-type&gt;&lt;/resource-env-ref&gt; 添加到您的 web.xml 并告诉我(但它应该自动完成,可能取决于 Tomcat 版本)
  • 嗨,我之前尝试添加资源引用,但它仍然抛出错误。我注意到您说如果使用 Weld 2.2.9 则不需要该条目,因此我保留了该条目。我已将其添加到 web.xml 的底部并更新了 localhost.log 并引发了完全异常。
  • 好吧,那么它显然不存在于 JNDI 中。 &lt;resource-env-ref&gt; 只是手动注册它。这只是排除一个和另一个。回到问题上来,你确定/META-INF/context.xml 没问题并且还存在于构建的 WAR 文件中吗?

标签: tomcat7 cdi jsf-2.2 omnifaces weld2


【解决方案1】:

好的,问题现已解决。对于 Apache Tomcat/7.0.56,我可以确认以下内容:

  • /META-INF/context.xml 不是必需的,但仍需要资源条目。为了解决这个问题,我在以下现有位置添加了资源条目:tomcat\conf\Catalina\localhost{resource-file-name}.xml

之后没有出现错误。

  • web.xml中不需要注册相关的监听器
  • web.xml 中不需要相关的&lt;resource-env-ref&gt;
  • /WEB-INF/beans.xml(空)为必填项

上面的大部分内容都在这里:http://balusc.blogspot.com.au/2013/10/how-to-install-cdi-in-tomcat.html

我想对此进行更新,因为有些人可能会发现 tomcat 上的资源加载部分很有帮助。

再次感谢 BallusC。我对类似的帖子投了赞成票,因为与之相关的建议帮助我解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2012-01-04
    相关资源
    最近更新 更多