簡體   English   中英

Jboss Seam:在WebLogic 10.3.2(11g)上啟用調試頁面

[英]Jboss Seam: Enabling Debug page on WebLogic 10.3.2 (11g)

跳過更新3

我想在Weblogic 10.3.2(11g)上啟用Seam調試頁面。 因此,我做了以下工作:

我的ejb和Web Maven項目(都是我的超級項目的模塊)中都具有jboss-seam和jboss-seam-debug罐子作為依存關系,我將此上下文參數放在了web.xml中:

<context-param>
        <param-name>org.jboss.seam.core.init.debug</param-name>
        <param-value>true</param-value>
</context-param>

現在,當我點擊應用程序的URL時,我得到了帶有此異常的調試頁面(文章結尾處的完整堆棧跟蹤):

由java.lang.IllegalStateException引起,並帶有消息:“沒有相位ID綁定到當前線程(請確保您沒有安裝兩個SeamPhaseListener實例)”

從我閱讀的帖子中看來,這似乎與類路徑中的兩個jar包jboss-seam或jboss-seam-debug有關。 我打開了耳朵文件,但每個文件中只有一個(耳朵里),而戰爭本身在WEB-INF / lib中沒有庫。

我還閱讀了使用components.xml初始化調試頁面的另一種方法。 我還嘗試在WEB-INF中包含以下components.xml,但它也不起作用:

<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
        xmlns:core="http://jboss.com/products/seam/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
        http://jboss.com/products/seam/core
        http://jboss.com/products/seam/core-2.2.xsd
        http://jboss.com/products/seam/components
        http://jboss.com/products/seam/components-2.2.xsd">
        <core:init debug="true"/>
</components>

關於如何正確啟用調試頁面的任何建議?

干杯!

完整的堆棧跟蹤:

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,並且以下jboss jars在其中:

  • jboss-seam-debug-2.2.0.GA.jar
  • jboss-el-1.0_02.CR4.jar
  • jboss-seam-2.2.0.GA.jar

我當前的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org    /2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>PRS 6.0</display-name>

<session-config>
    <session-timeout>30</session-timeout>
</session-config>
<!--
    The default behavior of JSF is to map the incoming request for a JSF
    view identifier (view ID for short) to a JSP file with the file
    extension .jsp. To get JSF to look for a Facelets template instead, we
    must register the .xhtml extension as the default suffix for JSF views
-->
<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.CONFIG_FILES</param-name>
    <param-value>
        /WEB-INF/faces-config/application.xml
    </param-value>
</context-param>

<context-param>
    <param-name>facelets.REFRESH_PERIOD</param-name>
    <param-value>2</param-value>
</context-param>
<context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>facelets.SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>
    <param-name>com.sun.faces.verifyObjects</param-name>
    <param-value>false</param-value>
</context-param>

<context-param>
    <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
    <param-value>com.sun.facelets.FaceletViewHandler</param-value>
</context-param>
<context-param>
    <param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>org.ajax4jsf.COMPRESS_STYLE</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>org.ajax4jsf.xmlparser.ORDER</param-name>
    <param-value>NONE</param-value>
</context-param>
<context-param>
    <param-name>org.richfaces.SKIN</param-name>
    <param-value>blueSky</param-value>
</context-param>
<context-param>
    <param-name>org.richfaces.CONTROL_SKINNING</param-name>
    <param-value>enable</param-value>
</context-param>
<context-param>
    <param-name>org.richfaces.LoadStyleStrategy</param-name>
    <param-value>ALL</param-value>
</context-param>
<context-param>
    <param-name>org.richfaces.LoadScriptStrategy</param-name>
    <param-value>ALL</param-value>
</context-param>


<!-- Seam Filter -->
<!-- (MUST BE FIRST)-->
<filter>
    <filter-name>Seam Filter</filter-name>
    <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Seam Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- RichFaces filter -->
<filter>
    <display-name>RichFaces Filter</display-name>
    <filter-name>richfaces</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class>
    <init-param>
        <description>Set the size limit for uploaded files as attachments in bytes. (max 5MB)</description>
        <param-name>maxRequestSize</param-name>
        <param-value>5242880</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>richfaces</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

<listener>
    <listener-class>
        XX.XXXX.XXX.prs.web.listeners.ResourceInitializationListener</listener-class>
</listener>

<listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

<listener>
    <listener-class>XX.XXXX.XXX.prs.web.listeners.EJBInjectionListener</listener-class>
</listener>
<!-- Seam Listener-->
<listener>
    <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>

<!-- Faces Servlet -->
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

-> Seam資源Servlet </ servlet-name>-> org.jboss.seam.servlet.SeamResourceServlet </ servlet-class>->->-> Seam Resource Servlet </ servlet-name>- > / seam / resource / * </ url-pattern>->->

<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

</web-app>

faces.config

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-facesconfig_1_2.xsd"
version="1.2">

<application>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>en</supported-locale>
    </locale-config>
    <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
    <el-resolver>org.jboss.seam.el.SeamELResolver</el-resolver>
    <resource-bundle>
        <base-name>XX.XXXX.XXX.prs.web.messages.messages</base-name>
        <var>msgs</var>
    </resource-bundle>
    <resource-bundle>
        <base-name>XX.XXXX.XXX.prs.web.messages.validation</base-name>
        <var>val</var>
    </resource-bundle>
</application>

<lifecycle>
    <phase-listener>XX.XXXX.XXX.prs.web.listeners.SetFocusListener</phase-listener>
</lifecycle>
<!--    <lifecycle>-->
<!--
    <phase-listener>XX.XXXX.XXX.prs.web.listeners.DebugPhaseListener</phase-listener>
-->

<converter>
    <converter-for-class>XX.XXXX.XXX.prs.model.Applicant</converter-for-class>
    <converter-class>
        XX.XXXX.XXX.prs.web.common.converters.ApplicantConverter</converter-class>
</converter>

<validator>
    <validator-id>EmailValidator</validator-id>
    <validator-class>XX.XXXX.XXX.prs.web.common.validators.EmailValidator</validator-class>
</validator>


</faces-config>

components.xml

<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
    http://jboss.com/products/seam/core
    http://jboss.com/products/seam/core-2.2.xsd
    http://jboss.com/products/seam/components
    http://jboss.com/products/seam/components-2.2.xsd">

<core:init debug="true" />

<core:manager concurrent-request-timeout="500"
    conversation-timeout="1200000" conversation-id-parameter="cid"
    parent-conversation-id-parameter="pid" />

更新2:

這些家伙在這里有同樣的問題。 他們有一個外部EAR項目,其中包含內部WAR項目。 他們討論這可能與jars如何最終出現在項目中有關。

我使用Maven,並已將其設置為創建“ Skinny Wars”,即從內部WAR項目中排除所有jar依賴項,從而使其尺寸保持較小。 它的所有依賴關系都包含在EAR中,並由所有其他模塊使用。

我更改了Maven-war-plugin的設置,以保留戰爭專用的Web專用jar(鏈接中提到的jar,例如RichFaces,jboss-seam-debug,Facelets等)。

但是,問題已恢復為以前的形式。 現在,我得到了調試頁面,無論我按了什么鏈接,除了最初的異常。

由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進行部署時,該應用程序不會出現,但只有出現以下異常的調試頁面(最后是stacktrace):

請求處理期間的異常:

由java.lang.IllegalStateException引起,並帶有消息:“沒有相位ID綁定到當前線程(請確保您沒有安裝兩個SeamPhaseListener實例)”

當對同一EAR進行“ JBoss大小調整”(刪除JBoss提供的休眠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(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.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)

您得到以下異常

沒有相位ID綁定到當前線程(確保您沒有安裝兩個SeamPhaseListener實例)

但是您說您已經安裝了ejb和Web Maven項目。 部署應用程序時,可能都包括SeamPhaseListener。 也許可以解釋為什么您會收到異常(安裝了兩個SeamPhaseListener實例)。

我的建議是(如果您想避免很多頭痛)

始終使用Seam-gem生成項目

看到這里為什么

一個很好的文章,除了縫在行動的書,關於JSF /煤層,可以發現這里

添加到原始答案

看看Seam in Action書籍談論了什么

在Seam 2.0中,Seam階段偵聽在facesconfig.xml描述符 聲明 ,該描述符包含在核心Seam JAR文件jboss-seam.jar中。 因此, 只要在應用程序中包含此JAR文件,便可以使用階段偵聽

因此,您不必擔心SeamPhaseListener。 縫會。

更新

首先,您有一個耳朵應用程序。 在繼續之前

每個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組件啟用@ In-jection)

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
    <interceptors>
        <interceptor>
            <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
        </interceptor>
    </interceptors>
    <assembly-descriptor>
        <interceptor-binding>
            <ejb-name>*</ejb-name>
            <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
        </interceptor-binding>
    </assembly-descriptor>
</ejb-jar>

2ºjboss -seam.jar 是一個EJB模塊

因此, 它也應該在application.xml文件中聲明 而且,如上所述,由於jboss-seam.jar包含SeamPhaseListener,因此不必定義 SeamPhaseListener。 所以避免看到這個好消息

安裝了兩個SeamPhaseListener實例

所以您的耳朵application.xml應該看起來像這樣

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
    <display-name>pureCharger</display-name>
    <module>
        <ejb>pureCharger-ejb.jar</ejb>
    </module>
    <module>
        <ejb>jboss-seam.jar</ejb>
    </module>
    <module>
        <web>
            <web-uri>pureCharger-war.war</web-uri>
            <context-root>pureCharger</context-root>
        </web>
    </module>
</application>

好。 我們走吧

您要啟用調試頁面

如果將此jar和Facelets一起部署在WEB-INF / lib中,並且設置了init組件的debug屬性,則Seam調試頁面將可用。

所以您的components.xml應該看起來像這樣

<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
    xmlns:core="http://jboss.com/products/seam/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://jboss.com/products/seam/core
    http://jboss.com/products/seam/core-2.2.xsd
    http://jboss.com/products/seam/components
    http://jboss.com/products/seam/components-2.2.xsd">
    <core:init jndi-pattern="pureCharger/#{ejbName}/local" debug="true"/>
    <core:manager concurrent-request-timeout="500" conversation-timeout="120000" conversation-id-parameter="cid" />
</components>

如上所示, 我已經定義了全局JNDI地址我想您正在使用JBoss,並且您的耳朵應用程序稱為pureCharger),以便Seam檢索其EJB組件。

最后,我們的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <context-param>
        <param-name>facelets.DEVELOPMENT</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>
    <!--It must be the first-->
    <filter>
        <filter-name>Seam Filter</filter-name>
        <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Seam Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--It must be the first-->
    <listener>
        <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <!--specified in minutes-->
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
</web-app>

還有我們的faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-facesconfig_1_2.xsd" version="1.2">
<application>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>en</supported-locale>
    </locale-config>
    <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
    <resource-bundle>
        <base-name>XX.XXXX.XXX.prs.web.messages.messages</base-name>
        <var>msgs</var>
    </resource-bundle>
    <resource-bundle>
        <base-name>XX.XXXX.XXX.prs.web.messages.validation</base-name>
        <var>val</var>
    </resource-bundle>
</application>
</faces-config>

幾個注意事項

您不需要在faces-config.xml中聲明org.jboss.seam.el.SeamELResolver,因為它與jboss-seam.jar捆綁在一起

現在,錯過了什么?

我們需要調用調試頁面(不要忘記啟動JBoss並部署您的Ear應用程序)

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

然后再次

如果您真的想避免很多頭痛,請使用seam-gem

更新

您的耳朵項目是否如上所示 ??? 確保您的war lib文件夾不包含任何jboss-seam.jar文件。 你說

我打開了.ear,並且以下jboss jars在其中:

  • 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集成的有用鏈接

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中的設置:

<ejbModule>
    <groupId>org.jboss.seam</groupId>
    <artifactId>jboss-seam</artifactId>
</ejbModule>

對此:

<ejbModule>
    <groupId>org.jboss.seam</groupId>
    <artifactId>jboss-seam</artifactId>
    <bundleFileName>jboss-seam.jar</bundleFileName>
</ejbModule>

現在,我可以同時看到我的應用程序和“調試”頁面。

什么是調試頁面? 您是說默認的Seam調試頁面嗎? 哪個是debug.seam? 通常是http:// localhost:8080 / debug.seam嗎?

放入web.xml是不夠的。 您還需要放入components.xml

<core:init debug="true" jndi-pattern="myApp/#{ejbName}/local"/>

您還需要確保jboss-seam-debug.jar在類路徑中。 Seam的攔截器應自動將其撿起。

如果您使用的是Facelets,則要獲取其調試頁面,需要將其放在web.xml中

<context-param>
  <param-name>facelets.DEVELOPMENT</param-name>
  <param-value>true</param-value>
</context-param>

Arthur提出的有關始終使用seam-gen來生成項目的提示是一個非常好的主意。

我還看到亞瑟(Arthur)說您需要確保jboss-seam-debug.jar在您的戰爭中不應該位於您的lib中。 那不一定是正確的。 我有我的

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM