@Eager不可用。无法从CDI bean管理器获取EagerBeansRepository

时间:2015-11-05 16:14:23

标签: jsf glassfish cdi omnifaces

这是我第一次使用omnifaces。 没有它我的应用程序运行良好,但当我尝试它时,我得到以下异常。

java.lang.NullPointerException
    at org.omnifaces.cdi.eager.EagerBeansPhaseListener.afterPhase(EagerBeansPhaseListener.java:50)
    at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107)
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:123)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
    at com.sun.grizzly.arp.DefaultAsyncExecutor.execute(DefaultAsyncExecutor.java:159)
    at com.sun.grizzly.arp.DefaultAsyncExecutor.interrupt(DefaultAsyncExecutor.java:145)
    at com.sun.grizzly.arp.AsyncProcessorTask.doTask(AsyncProcessorTask.java:102)
    at com.sun.grizzly.http.TaskBase.run(TaskBase.java:193)
    at com.sun.grizzly.http.TaskBase.execute(TaskBase.java:175)
    at com.sun.grizzly.arp.DefaultAsyncHandler.handle(DefaultAsyncHandler.java:145)
    at com.sun.grizzly.arp.AsyncProtocolFilter.execute(AsyncProtocolFilter.java:210)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:745)

我在Netbeans中创建了一个新的空Web应用程序,在Glassfish 3.1.2.2下运行它 使用: OmniFaces 2.1版 Mojarra 2.2.12 PrimeFaces 5.3 PrimeFaces扩展3.2。 每次我在玻璃鱼启动期间运行应用程序时都会收到相同的错误:

  

@Eager不可用。无法从CDI bean管理器获取EagerBeansRepository。

请帮忙吗?

当我从glassfish domain1 / lib目录中删除omnifaces-2.1.jar时,一切正常。

1 个答案:

答案 0 :(得分:3)

  

当我从glassfish domain1 / lib目录中删除omnifaces-2.1.jar时,一切正常。

Web库不属于那里。 Web库属于WAR的/WEB-INF/lib。如果错误放在/WEB-INF/lib之外,那么webapp将无法在Web库中找到JSF / CDI带注释的类,并抛出与此相关的异常。

domain1/lib的OmniFaces JAR文件放回/WEB-INF/lib。然后,JSF将能够找到OmniFaces中捆绑的@FacesComponent注释类,CDI将能够找到OmniFaces中捆绑的@XxxScoped类,例如EagerBeansRepository类。

另见OmniFaces homepage的“安装”部分:

  

安装

     

这是在/WEB-INF/lib中删除OmniFaces 2.1 JAR文件的问题。

     

...

     

OmniFaces被设计为WAR库(Web片段库),因此不能放在WAR自己的/WEB-INF/lib之外的webapp运行时类路径的其他位置,例如EAR的/lib甚至服务器或JRE的拥有/lib。当OmniFaces JAR文件以这种方式放错位置时,webapp将无法找到OmniFaces捆绑的JSF / CDI注释类,并在部署或运行​​时期间抛出与此相关的异常。要解决这个问题,请将OmniFaces放回WAR /WEB-INF/lib