在jboss 7.1.1和Weld上部署seam 2.3应用程序时出现问题

时间:2013-08-18 18:03:27

标签: jboss7.x jboss-weld seam2

我有一个应用程序,我正在尝试从seam 2.1迁移到2.3,并部署到Jboss 7.1.1。我设法解决了这样做时遇到的许多问题。我在这里要问的问题是关于seam 2.3和Jboss中内置的Weld模块的共存。

使用在Jboss 7.1中隐式依赖的Weld模块部署seam 2.3应用程序是否存在问题?在我的jboss日志中,我看到以下消息“正在启动部署焊接服务”,它告诉我Weld正在被触发。根据Jboss类加载documentation,这是预期的。

我正在调查的原因是虽然我的应用程序似乎正确部署,但当我尝试访问其任何页面时,我收到以下异常:

01:36:51,605 SEVERE [javax.faces.webapp] (http--127.0.0.1-8080-5) org.jboss.weld.context.NonexistentConversationException caught during beforePhase() processing of RESTORE_VIEW 1 : UIComponent-ClientId=, Message=WELD-000321 No conversation found to restore for id 1
01:36:51,606 SEVERE [javax.faces.webapp] (http--127.0.0.1-8080-5) WELD-000321 No conversation found to restore for id 1: org.jboss.weld.context.NonexistentConversationException: WELD-000321 No conversation found to restore for id 1
    at org.jboss.weld.context.AbstractConversationContext.activate(AbstractConversationContext.java:221) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at org.jboss.weld.jsf.WeldPhaseListener.activateConversations(WeldPhaseListener.java:108) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at org.jboss.weld.jsf.WeldPhaseListener.beforePhase(WeldPhaseListener.java:85) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:357) [tomahawk21-1.1.14.jar:1.1.14]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]

这让我想知道,Weld如何使用seam 2.3 DI,以及是否导致异常。

我尝试了很多东西来禁用JBoss模块,但我最接近的就是在我的jboss-deployment-structure.xml中使用它:

   <exclusions>
     <module name="org.jboss.as.weld"/> 
   </exclusions>

在尝试部署我的应用时,这导致了这个堆栈跟踪。

ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/myapp]] (MSC service thread 1-1) Error configuring application listener of class org.jboss.as.weld.webtier.jsp.JspInitializationListener: java.lang.ClassNotFoundException: org.jboss.as.weld.webtier.jsp.JspInitializationListener from [Module "deployment.myapp.ear.myapp-web.war:main" from Service Module Loader]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
        at org.jboss.as.web.deployment.WebInjectionContainer.newInstance(WebInjectionContainer.java:72) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
        at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3342) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.13.Final.jar:]
        at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_17]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_17]
        at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_17]

这表明Jboss的其他部分可能依赖于Weld的操作。 所以我的另一个问题是,在Seam的DI功能上摆脱Weld和继电器的最佳方法是什么?

这似乎是一个合理的问题,我认为找到一个答案很容易,但到目前为止,我找到的所有尝试都失败了。

1 个答案:

答案 0 :(得分:1)

感谢您的帮助:)

事实证明我错误地将一个beans.xml文件添加到我的WEB-INF / beans.xml中,这导致了一个隐含的jboss焊接依赖项被添加。我认为可能导致焊接在部署时被激活的第二个问题是对jboss maven项目原型添加的cdi-api的依赖。我通过部署接缝2.3预订示例并观察焊接没有显示在日志中并比较它与我的项目之间的poms来解决这个问题。

相关问题