2015-11-05 35 views
1

這是我第一次使用omnifaces。 我的應用程序運行良好,但沒有它,但當我嘗試它時,我得到以下異常。@Eager不可用。 EagerBeansRepository無法從CDI bean管理器獲得

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版 鑽嘴魚科2.2.12 PrimeFaces 5.3 PrimeFaces擴展3.2。 ,仍然得到同樣的錯誤我每個玻璃魚在啓動過程中運行以下警告應用時間:

@Eager不可用。 EagerBeansRepository無法從CDI bean管理器獲取。

請幫忙嗎?

當我從glassfish domain1/lib目錄中刪除omnifaces-2.1.jar時,一切正常。

+0

與1.8.3我得到以下異常:墓:異常而加載應用 墓:異常而加載的應用程序:1個例外例外列表: 異常0: 顯示java.lang.NullPointerException \t在org.omnifaces.util.Beans.getReference(Beans.java:78) \t at org.omnifaces.util.Beans.getReference(Beans.java:66).... – Hicham

回答

3

當我從glassfish domain1/lib目錄中刪除omnifaces-2.1.jar時,一切正常。

Web庫不屬於那裏。 Web庫屬於WAR的/WEB-INF/lib。當錯誤放置在/WEB-INF/lib之外時,webapp將無法在Web庫中找到JSF/CDI註釋類並拋出與此相關的異常。

將OmniFaces JAR文件從domain1/lib恢復爲/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,如EAR的/lib甚至服務器或JRE的擁有/lib。當OmniFaces JAR文件被放錯地方的這種方式,那麼Web應用程序將無法找到OmniFaces捆綁JSF/CDI註解的類和部署或運行​​時拋出此相關的例外。爲了解決這個問題,把OmniFaces放回WAR的/WEB-INF/lib

+0

當我將PrimeFaces和OmniFaces都移動到/ WEB-INF /時,我會遇到更多異常。但在/ WEB-INF/my web應用上的domain1/lib和OmniFaces上啓動PrimeFaces,但會收到很多警告,如:WEB9052:無法加載類org.omnifaces.component.script.OnloadScript,reason:java.lang.ClassNotFoundException :org.omnifaces.component.script.OnloadScript。即使我沒有使用任何OmniFaces組件! – Hicham

+0

GlassFish可能仍然很髒。清理工作文件夾和庫。請記住不要以這種方式觸摸服務器的庫。切勿將Web應用程序特定的庫放入服務器本身或甚至JRE中。如果你不確定,垃圾並重新解壓縮GlassFish。總是在'/ WEB-INF/lib'中安裝OmniFaces和PrimeFaces等Web庫。 – BalusC

+0

我將OmniFaces從/ WEB-INF移動到/ WEB-INF/lib,它的工作原理類似於一個魅力。 (即使我仍然在GlassFish域1 lib中獲得PrimeFaces和其他庫)非常感謝BalusC。你永遠支持我們。 – Hicham