2013-04-09 102 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