0

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

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

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

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 进行操作。所以我的另一个问题是,摆脱 Weld 并转而使用 Seam 的 DI 功能的最佳方法是什么?

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

4

1 回答 1

1

感谢你的帮助 :)

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

于 2013-08-24T17:43:42.273 回答