Jboss Seam:在WebLogic 10.3.2上启用调试页面(11g)

跳过更新3

我想在Weblogic 10.3.2(11g)上启用Seam调试页面。 所以,我做了以下事情:

我在我的ejb和web maven项目中都有jboss-seam和jboss-seam-debug jar作为依赖项(两者都是我的超级项目的模块)我把这个上下文参数放在我的web.xml中:

 org.jboss.seam.core.init.debug true  

现在,当我点击我的应用程序的URL时,我得到了具有此exception的调试页面(post末尾的完整堆栈跟踪):

由java.lang.IllegalStateException引起的消息:“没有相位id绑定到当前线程(确保没有安装两个SeamPhaseListener实例)”

从我阅读的post看来,这似乎与两个jboss-seam或jboss-seam-debug在类路径中相关。 我打开了我的耳朵文件,只有一个存在(在耳中),而战争本身在WEB-INF / lib中没有库。

我还读到了使用components.xml初始化调试页面的另一种方法。 我还尝试在WEB-INF中包含以下components.xml,但它也不起作用:

     

有关如何正确启用调试页面的任何建议?

干杯!

完整堆栈跟踪:

 org.jboss.seam.contexts.PageContext.getPhaseId(PageContext.java:163) org.jboss.seam.contexts.PageContext.isBeforeInvokeApplicationPhase(PageContext.java:175) org.jboss.seam.contexts.PageContext.getCurrentWritableMap(PageContext.java:91) org.jboss.seam.contexts.PageContext.remove(PageContext.java:105) org.jboss.seam.Component.newInstance(Component.java:2141) org.jboss.seam.Component.getInstance(Component.java:2021) org.jboss.seam.Component.getInstance(Component.java:2000) org.jboss.seam.Component.getInstance(Component.java:1994) org.jboss.seam.Component.getInstance(Component.java:1967) org.jboss.seam.Component.getInstance(Component.java:1962) org.jboss.seam.faces.FacesPage.instance(FacesPage.java:92) org.jboss.seam.core.ConversationPropagation.restorePageContextConversationId(ConversationPropagation.java:84) org.jboss.seam.core.ConversationPropagation.restoreConversationId(ConversationPropagation.java:57) org.jboss.seam.jsf.SeamPhaseListener.afterRestoreView(SeamPhaseListener.java:391) org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:230) org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:196) com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114) com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:104) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292) weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3592) weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2202) weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2108) weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1432) weblogic.work.ExecuteThread.execute(ExecuteThread.java:201) weblogic.work.ExecuteThread.run(ExecuteThread.java:173) 

更新1:

现在调试页面根本没有出现。 当我要求http://localhost/myapp/debug.xhtml时,我得到一个页面:

MYAPP / debug.xhtml

与任何不存在的页面相同。 我打开了.ear,下面的jbossjar子在:

  • JBoss的接缝调试,2.2.0.GA.jar
  • 的jboss-EL-1.0_02.CR4.jar
  • JBoss的接缝-2.2.0.GA.jar

我目前的配置:

   PRS 6.0  30    javax.faces.DEFAULT_SUFFIX .xhtml   javax.faces.STATE_SAVING_METHOD server   javax.faces.CONFIG_FILES  /WEB-INF/faces-config/application.xml    facelets.REFRESH_PERIOD 2   facelets.DEVELOPMENT true   facelets.SKIP_COMMENTS true   com.sun.faces.verifyObjects false   org.ajax4jsf.VIEW_HANDLERS com.sun.facelets.FaceletViewHandler   org.ajax4jsf.COMPRESS_SCRIPT true   org.ajax4jsf.COMPRESS_STYLE true   org.ajax4jsf.xmlparser.ORDER NONE   org.richfaces.SKIN blueSky   org.richfaces.CONTROL_SKINNING enable   org.richfaces.LoadStyleStrategy ALL   org.richfaces.LoadScriptStrategy ALL     Seam Filter org.jboss.seam.servlet.SeamFilter   Seam Filter /*    RichFaces Filter richfaces org.ajax4jsf.Filter  Set the size limit for uploaded files as attachments in bytes. (max 5MB) maxRequestSize 5242880    richfaces Faces Servlet REQUEST FORWARD INCLUDE    XX.XXXX.XXX.prs.web.listeners.ResourceInitializationListener   com.sun.faces.config.ConfigureListener   XX.XXXX.XXX.prs.web.listeners.EJBInjectionListener    org.jboss.seam.servlet.SeamListener    Faces Servlet javax.faces.webapp.FacesServlet 1   Faces Servlet *.xhtml  

– > Seam Resource Servlet – > org.jboss.seam.servlet.SeamResourceServlet – > – > – > Seam Resource Servlet – > / seam / resource / * – > – >

  index.xhtml   

faces.config

     en en  com.sun.facelets.FaceletViewHandler org.jboss.seam.el.SeamELResolver  XX.XXXX.XXX.prs.web.messages.messages msgs   XX.XXXX.XXX.prs.web.messages.validation val    XX.XXXX.XXX.prs.web.listeners.SetFocusListener  <!-- --> <!-- XX.XXXX.XXX.prs.web.listeners.DebugPhaseListener -->  XX.XXXX.XXX.prs.model.Applicant  XX.XXXX.XXX.prs.web.common.converters.ApplicantConverter   EmailValidator XX.XXXX.XXX.prs.web.common.validators.EmailValidator   

components.xml中

     

更新2:

这些人在这里有同样的问题。 它们有一个包含内部WAR项目的外部EAR项目。 他们讨论这可能与jar子在项目中的结果有关。

我使用Maven,并设置它来创建“Skinny Wars”,它排除了内部WAR项目中的所有jar依赖项,因此它的大小仍然很小。 其所有依赖项都包含在EAR中,并由所有其他模块使用。

我更改了maven-war-plugin的设置,以便在战争中留下特定于网络的jar(链接中提到的jar,如RichFaces,jboss-seam-debug,Facelets等)。

但是,问题已恢复到以前的forms。 我现在得到调试页面,无论我按哪个链接,都有初始exception。

由java.lang.IllegalStateException引起的消息:“没有相位id绑定到当前线程(确保没有安装两个SeamPhaseListener实例)”

更新3:应用程序的结构.ear如下:

 application.ear |--> APP-INF | |--> classes |--> lib (all jar dependencies go here, including the WAR dependencies, EJB module dependencies) |-->META_INF | |--> application.xml | |--> data-sources.xml | |--> MANIFEST.MF | |--> weblogic.xml | |--> weblogic-application.xml |--> jboss-seam-2.2.0.GA.jar |--> myEjbModule1.jar |--> myEjbModule2.jar |--> myEjbModule3.jar |--> myEjbModule4.jar |--> myWar.war (NO libraries in WEB-INF/lib, finds everything in EAR/lib) 

在未启用调试的情况下部署.ear应用程序时(不包括耳中的jboss-seam-debug.jar),正确加载应用程序。

在EAR(EAR / lib目录)中部署WITH jboss-seam-debug.jar时,应用程序不会出现,但只有调试页面出现以下exception(最后是stacktrace):

请求处理期间的exception:

由java.lang.IllegalStateException引起的消息:“没有相位id绑定到当前线程(确保没有安装两个SeamPhaseListener实例)”

当“JBoss-izing”相同的EAR(删除由JBoss提供的hibernate jar,并将所有库从EAR / lib移动到EAR根目录)时,应用程序正确加载。 应用程序和调试页面正确显示。

完整堆栈跟踪:

org.jboss.seam.contexts.PageContext.getPhaseId(PageContext.java:163)org.jboss.seam.contexts.PageContext.isBeforeInvokeApplicationPhase(PageContext.java:175)org.jboss.seam.contexts.PageContext.getCurrentWritableMap(PageContext。 java:91)org.jboss.seam.contexts.PageContext.remove(PageContext.java:105)org.jboss.seam.Component.newInstance(Component.java:2141)org.jboss.seam.Component.getInstance(Component。 java:2021)org.jboss.seam.Component.getInstance(Component.java:2000)org.jboss.seam.Component.getInstance(Component.java:1994)org.jboss.seam.Component.getInstance(Component.java: 1967)org.jboss.seam.Component.getInstance(Component.java:1962)org.jboss.seam.faces.FacesPage.instance(FacesPage.java:92)org.jboss.seam.core.ConversationPropagation.restorePageContextConversationId(ConversationPropagation。 java:84)org.jboss.seam.core.ConversationPropagation.restoreConversationId(ConversationPropagation.java:57)org.jboss.seam.jsf.SeamPhaseListener.afterRestoreView(SeamPhaseListener.java:391) org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:230)org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:196)com.sun.faces.lifecycle.Phase.handleAfterPhase(阶段。 java:175)com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:104)com.sun.faces.lifecycle.LifecycleImpl。 execute(LifecycleImpl.java:118)javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)weblogic.servlet.internal.StubSecurityHelper $ ServletServiceAction.run(StubSecurityHelper.java:227)weblogic.servlet.internal.StubSecurityHelper。 invokeServlet(StubSecurityHelper.java:125)weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)weblogic.servlet.internal.FilterChainImpl.doFilter( FilterChainImpl.java:56)org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:530)weblogic.servlet.internal.FilterChainImpl.doFilte r(FilterChainImpl.java:56)org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter(SeamFilter.java:83)org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)org.jboss。 seam.servlet.SeamFilter $ FilterChainImpl.doFilter(SeamFilter.java:69)org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter(SeamFilter。 java:69)org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter(SeamFilter.java:69)org.jboss.seam.web。 RedirectFilter.doFilter(RedirectFilter.java:45)org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter(SeamFilter.java:69)org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)org.ajax4jsf。 webapp.BaseFilter.handleRequest(BaseFilter.java:290)org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)org.jboss.seam。 web.Ajax4js fFilter.doFilter(Ajax4jsfFilter.java:56)org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter(SeamFilter.java:69)org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)org。 jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter(SeamFilter.java:69)org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter( SeamFilter.java:69)org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)weblogic.servlet.internal.RequestEventsFilter.doFilter( RequestEventsFilter.java:27)weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.run(WebAppServletContext.java:3592)weblogic.security.acl.internal.AuthenticatedSubject。 doAs(AuthenticatedSubject.java:321)weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)weblogic.servlet.in ternal.WebAppServletContext.securedExecute(WebAppServletContext.java:2202)weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2108)weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1432)weblogic.work.ExecuteThread。 execute(ExecuteThread.java:201)weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

您会收到以下exception

没有阶段id绑定到当前线程(确保没有安装两个SeamPhaseListener实例)

但是你说你已经安装了一个ejb和web maven项目。 在部署应用程序时,可能两者都包含SeamPhaseListener。 它可能解释了为什么你得到你的exception(安装了两个SeamPhaseListener实例)。

我的建议是(如果你想避免很多头痛)

始终使用Seam-gem生成项目

看到这里的原因

除了Seam in Action书之外,关于JSF / Seam的一篇很好的文章可以在这里找到

添加到原始答案

看看Seam in Action书中谈到了什么

在Seam 2.0中,Seam阶段侦听在facesconfig.xml描述符 声明 ,该描述符包含在核心Seam JAR文件jboss-seam.jar中。 因此, 只要在应用程序中包含此JAR文件,就可以使用阶段侦听

因此,您不必担心SeamPhaseListener。 接缝会。

UPDATE

首先,你有一个耳朵应用程序。 继续之前

每个EJB和war模块都应该在application.xml中声明 (描述你耳朵的文件)

所以你的耳朵应用应该是这样的 (让我们称你的耳朵应用pureCharger)

 pureCharger.ear META-INF application.xml pureCharger-ejb.jar META-INF ejb-jar.xml persistence.xml lib // libraries ONLY USED by your EJB module goes here pureCharger-war.war WEB-INF web.xml components.xml faces-config.xml pages.xml lib // Here is what you want jboss-seam-debug.jar jboss-seam-ui.jar jsf-facelets.jar // other libraries ONLY USED by your war module goes here jboss-seam.jar lib // JBoss Expression Language is used by both EJB and war module jboss-el.jar // libraries SHARED by all of your modules goes here 

ejb-jar.xml如下所示(它使您的EJB组件能够@Incjection)

     org.jboss.seam.ejb.SeamInterceptor     * org.jboss.seam.ejb.SeamInterceptor    

2ºjboss -seam.jar 是一个EJB模块

所以它也应该在application.xml文件中声明 。 而且,如上所述,您不必定义 SeamPhaseListener,因为jboss-seam.jar包含SeamPhaseListener。 所以避免看到这个好消息

安装了两个SeamPhaseListener实例

所以你的ear application.xml看起来应该是这样的

   pureCharger  pureCharger-ejb.jar   jboss-seam.jar    pureCharger-war.war pureCharger    

好。 我们走吧

您想启用调试页面

如果将此jar与Facelets一起部署在WEB-INF / lib中,并且如果设置了init组件的debug属性,那么Seam调试页面将可用

所以你的components.xml应该是这样的

      

如上所示, 我已经定义了全局JNDI地址我假设您使用的是JBoss,而您的耳朵应用程序称为pureCharger),以便Seam检索其EJB组件

最后,我们的web.xml文件

    facelets.DEVELOPMENT true   javax.faces.DEFAULT_SUFFIX .xhtml   javax.faces.STATE_SAVING_METHOD server    Seam Filter org.jboss.seam.servlet.SeamFilter   Seam Filter /*    org.jboss.seam.servlet.SeamListener   Faces Servlet javax.faces.webapp.FacesServlet   Faces Servlet *.xhtml    30   

还有我们的faces-config.xml

     en en  com.sun.facelets.FaceletViewHandler  XX.XXXX.XXX.prs.web.messages.messages msgs   XX.XXXX.XXX.prs.web.messages.validation val    

几个笔记

您不需要在faces-config.xml中声明org.jboss.seam.el.SeamELResolver,因为它与jboss-seam.jar捆绑在一起

现在,错过了什么?

我们需要调用我们的调试页面(不要忘记启动JBoss并部署你的耳朵应用程序)

http://127.0.0.1:8080/pureCharger/debug.xhtml

然后再次

如果你真的想避免很多头痛,可以使用seam-gem

UPDATE

你的耳朵项目如上所示 ??? 请确认您的war lib文件夹不包含任何jboss-seam.jar文件。 你说

我打开了.ear,下面的jbossjar子在:

  • jboss-seam-debug-2.2.0.GA.jar(错误)它必须放在war文件WEB-INF / lib文件夹中
  • jboss-el-1.0_02.CR4.jar(错误)它必须放在ear文件lib文件夹中
  • jboss-seam-2.2.0.GA.jar(右)但它必须在META-INF / application.xml文件中声明

在这里,您可以看到由我提供的关于EJB 2.0和3.0的精彩教程

有关Seam Maven Integration的有用链接

http://www.seamframework.org/Community/MavenWithSeam

http://www.seamframework.org/Documentation/SeamWithMavenOverview

http://www.seamframework.org/Community/SeamInActionChapter2345And6Mavenized

http://www.seamframework.org/Community/MavenSeamArchetype

问候,

Seam调试页面没有出现的原因是令人难以置信的(对我来说)。

我用Apache Maven打包了我的应用程序。 传统上,maven管理的jar文件的文件名也包含版本号。 Seam的jar子是jboss-seam -2.2.0.GA .jar。 因为Seam是应用程序中的EJB模块,所以我声明了它的依赖关系。 实际上,EAR将其作为EJB模块(位于EAR的根目录中)包含在内,并在META-INF / application.xml中声明它。

我不知道规范是否定义了EAR中EJB模块的命名限制,但文件名的版本部分是WebLogic不喜欢的(如果修改,战争在JBoss上工作正常)。

我改变了maven-ear-plugin中的设置:

  org.jboss.seam jboss-seam  

对此:

  org.jboss.seam jboss-seam jboss-seam.jar  

现在我可以看到我的应用程序和调试页面。

你是什​​么意思调试页面? 你的意思是默认的Seam调试页面吗? 哪个是debug.seam? 通常是http:// localhost:8080 / debug.seam ?

放入web.xml是不够的。 您还需要放入components.xml

  

您还需要确保jboss-seam-debug.jar位于类路径中。 Seam的拦截器应该自动选择它。

如果您正在使用Facelets,要获取其调试页面,您需要将其放在web.xml中

  facelets.DEVELOPMENT true  

来自Arthur的关于总是使用seam-gen来生成项目的提示是一个非常好的主意。

我也看到Arthur说你需要确保jboss-seam-debug.jar在你的战争中不应该在你的lib中。 这不一定正确。 我有我的

 myapp.war/WEB-INF/lib/jboss-seam-debug.jar