2013-04-09 104 views
0

我有一個Maven企業項目(瘦)與 omnifaces 1.4.1 的GlassFish 3.1.2.2 primefaces 3.5 primefaces擴展0.6.3 MyFaces的extcdi 1.0.5Omnifaces EAR部署問題3.1.2.2

當我部署的耳朵時,錯誤是:

remote failure: Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException: javax.servlet.ServletException: com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class org.omnifaces.component.output.cache.CacheInitializerListener. Please see server.log for more details. 

如果我部署omniface jar文件放進GlassFish的lib目錄,應用deployes確定。

如果我進行包括所有ejb's,jar和戰爭在內的戰爭,它也會加載OK。

有沒有人有線索在哪裏開始調試這個問題?

如果需要,我可以提供堆棧跟蹤。

EAR結構:

PROJECT-EAR 
    | 
    -META-INF 
    | 
    -lib 
     | 
     - omnifaces-1.4.1.jar 
     - myfaces-extcdi-bundle-jsf20-1.0.5.jar 
     - primefaces-3.5.jar 
     - PROJECT-lib.jar 
    | 
    - PROJECT-WEB1.war 
    - PROJECT-EJB.jar 
    - PROJECT-WEB2.war 

最好的問候,漢王

編輯: 一些stackinfo:

SEVERE: ContainerBase.addChild: start: 
    org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException: javax.servlet.ServletException: com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class org.omnifaces.component.output.cache.CacheInitializerListener 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:5332) 
at com.sun.enterprise.web.WebModule.start(WebModule.java:498) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:733) 
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2019) 
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1669) 
at com.sun.enterprise.web.WebApplication.start(WebApplication.java:109) 
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:130) 
at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269) 
at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:301) 
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240) 
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:389) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259) 
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:461) 
at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:212) 
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179) 
at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) 
at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354) 
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.http.ProcessorTask.doProcess(ProcessorTask.java:757) 
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 
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:722) 
    Caused by: java.lang.IllegalArgumentException: javax.servlet.ServletException: com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class org.omnifaces.component.output.cache.CacheInitializerListener 
+0

OmniFaces JAR在WAR中,而不在EAR中,對嗎?此外,你對於包括所有WAR在內的WAR究竟意味着什麼?這聽起來不對。 – BalusC 2013-04-09 16:32:05

+0

你能提供服務器日誌中的詳細信息嗎? – 2013-04-09 16:38:48

+0

對不起,我的壞。如果與所有依賴關係(ejb's和jar's)進行戰爭,它就可以正常工作。我想在一個耳朵上捆綁幾場戰爭,但在過去的幾天裏我一直在敲我的頭,以便將耳朵部署在玻璃魚上 – 2013-04-09 16:50:23

回答

4

耳/ lib目錄是不共享的網絡假象的理想場所。這取決於你在戰爭中究竟還有什麼(例如,你的WEB-INF中是否有beans.xml,任何Servlets?你的web.xml文件中有什麼,等等),但是在很多情況下,事情並不會很好地發揮作用這條路。

見例如:

我不得不說,我是不是能夠與兩場戰爭和完全相同的創建耳後重現你的錯誤庫和ear/lib中的相同版本(primefaces和myfaces-extcdi),但是類加載器衝突等事情從不容易重現。

您可能想嘗試將所有網絡構件(OmniFaces,PrimeFaces等)放入兩次戰爭的WEB-INF/lib中。就我個人而言,我認爲這是一個更好的做法,因爲EJB模塊不應該看到Web類型,並且放入ear/lib的東西對EJB模塊中的類可見。

目前我認爲這主要是一個EAR /類加載器問題,而不是專門針對OmniFaces的問題。如果您有一些證據表明OmniFaces確實做了某些事情,那麼在https://github.com/omnifaces/omnifaces/issues上打開問題可能是一個更恰當的地方來進一步討論。

+0

嗨,非常感謝您的推薦。我會看看我今天能否做一些測試。 – 2013-04-10 07:52:44

+0

嗨,我現在正在重新組織我的項目。仍然使用瘦骨w(的戰爭(我會盡量保持omnifaces和其他人在戰後更多的測試)。總之,所有的庫都是編譯範圍的,並提供了ejb。它必須是一個類加載器問題,因爲我總是必須部署或啓用該應用程序兩次以使其運行。我總是返回:「SEVERE:加載應用程序時出現異常 警告:輸入流已經完成或強制關閉而未顯式關閉;流實例化在下面的堆棧跟蹤中報告」但這是另一個問題。再次感謝所有投入。 – 2013-04-10 19:06:40

+0

還有[另一個問題](http://stackoverflow.com/questions/2987266/why-doesnt-jsf-2-0-ri-mojarra-scan-my-class-annotations)處理JAR問題不是由JSF掃描的蜜蜂。一個答案建議兩次添加JAR(在EAR和WAR中)。不知道這是否是一種推薦的方式。 – 2014-02-26 13:16:52