Jboss Seam: Включение страницы отладки в WebLogic 10.3.2 (11g) - PullRequest
5 голосов
/ 16 марта 2010

Пропустить до обновления 3

Я хочу включить страницу отладки Seam в Weblogic 10.3.2 (11g). Итак, я сделал следующее:

У меня есть jarss-seam и jboss-seam-debug jar как зависимость как в моих проектах ejb, так и в web-maven (оба являются модулями моего суперпроекта). Я поместил этот параметр контекста в свой 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 с сообщение: «Идентификатор фазы не связан с текущим нить (убедитесь, что у вас нет двух Экземпляры SeamPhaseListener установлен) "

Из сообщений, которые я прочитал, кажется, что это как-то связано с двумя jar-файлами jboss-seam или jboss-seam-debug, находящимися в пути к классам. Я открыл файл с ушами, и только один из них присутствует (в ухе), тогда как у самой войны нет библиотек в WEB-INF / lib.

Я также читал о другом способе инициализации страницы отладки с использованием component.xml. Я также попытался включить следующий файл component.xml в WEB-INF, но он тоже не работал:

<?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-банки находятся в:

  • JBoss шва-отладки 2.2.0.GA.jar
  • JBoss-эль-1.0_02.CR4.jar
  • JBoss шва-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 Resource Servlet </ servlet-name> -> org.jboss.seam.servlet.SeamResourceServlet </ сервлет-класс> -> -> -> Seam Resource Servlet </ servlet-name> -> / Шов / ресурс / * </ URL-шаблон> -> ->

<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. Они обсуждают, что это может быть связано с тем, как банки оказываются в проектах.

Я использую Maven, и я настроил его для создания «Skinny Wars», который исключает все зависимости jar из внутреннего проекта WAR, так что он остается небольшим по размеру. Все его зависимости содержатся в EAR и используются всеми другими модулями.

Я изменил настройки подключаемого модуля maven-war, чтобы оставить внутри войны специфичные для сети банки (упомянутые в ссылке, такие как RichFaces, jboss-seam-debug, Facelets и т. Д.).

Однако проблема вернулась к своей прежней форме. Теперь я получаю страницу отладки, какую бы ссылку я ни нажимал, за первоначальным исключением.

Вызвано java.lang.IllegalStateException с сообщением: «Нет идентификатора фазы, привязанного к текущему потоку (убедитесь, что у вас не установлено два экземпляра 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 в ухе) приложение загружается правильно.

При развертывании WITH jboss-seam-debug.jar в EAR (каталог EAR / lib) приложение не появляется, а ТОЛЬКО на странице отладки со следующим исключением (трассировка стека в конце):

Исключение при обработке запроса:

вызвано java.lang.IllegalStateException с сообщение: «Идентификатор фазы не связан с текущим нить (убедитесь, что у вас нет двух Экземпляры SeamPhaseListener установлен) "

Когда "JBoss-izing" тот же EAR (удалите jibernate jar, которые предоставляются JBoss, и переместите все библиотеки из 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.doFilter (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.Ajax4jsfFilter.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.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)

Ответы [ 3 ]

3 голосов
/ 17 марта 2010

Вы получаете следующее исключение

Нет идентификатора фазы, привязанного к текущему потоку (убедитесь, что у вас не установлено два экземпляра SeamPhaseListener)

Но вы сказали, что у вас естьустановил проект ejb и web maven.Может быть, оба включают SeamPhaseListener при развертывании приложения.Это, возможно, объясняет, почему вы получаете свое исключение (установлены два экземпляра SeamPhaseListener).

Мой совет (и если вы хотите избежать головной боли)

Всегда создавайте свой проект с помощью Seam-gem

См. здесь почему

Хорошая статья, помимо книги Seam in Action, о JSF / Seamможно найти здесь

Добавлен в исходный ответ

Посмотрите, что об этом говорит книга Seam in Action

В Seam 2.0 прослушиватель фазы Seam объявлен в дескрипторе FaceSconfig.xml , который включен в основной файл JAR Seam, jboss-seam.jar.Таким образом, слушатель фазы станет доступен, как только вы включите этот JAR-файл в ваше приложение .

Итак, вам не нужно беспокоиться о SeamPhaseListener.Шов будет.

ОБНОВЛЕНИЕ

Прежде всего, у вас есть ушная аппликация.Прежде чем продолжить

Каждый EJB и военный модуль должны быть объявлены в application.xml (файле, который описывает ваше ухо)

Так что вашприложение ear должно выглядеть следующим образом (назовем ваше приложение ear 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 показано следующим образом (оно позволяет @ In-jection вашими компонентами EJB)

<?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>

jboss-seam.jar - это модуль EJB

Так что его также следует объявить в файле application.xml.И еще, как сказано выше, вам не нужно определять SeamPhaseListener, потому что jboss-seam.jar включает в себя SeamPhaseListener.Так что избегайте видеть это приятное сообщение

Установлены два экземпляра SeamPhaseListener

Так что ваш ear 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>

ok,Поехали

Вы хотите включить страницу отладки

Страница отладки Seam будет доступна , если этот jar развернут в WEB-INF /lib, вместе с Facelets, и если вы установите свойство debug компонента init

, то ваш файл component.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

И, наконец, наш веб.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>

И наши лица-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>

Пара замечаний

Вам не нужно объявлять org.jboss.seam.el.SeamELResolver в face-config.xml, потому что он связан с jboss-seam.jar .

Теперь, что пропущено?

Нам нужно вызвать нашу страницу отладки.(Не забудьте запустить JBoss и развернуть ваше ушное приложение)

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

И снова

Если вы действительно хотите избежать головной боли, используйте seam-gem

UPDATE

Является ли ваш проект на ухо как показано выше ??? УБЕДИТЕСЬ ваша папка war lib НЕ СОДЕРЖИТ любой файл jboss-seam.jar.Вы сказали, что

Я открыл .ear, и в нем находятся следующие файлы jboss:

  • jboss-seam-debug-2.2.0.GA.jar (неправильно).файл внутренней войны WEB-INF / папка lib
  • jboss-el-1.0_02.CR4.jar (неверно) Должен быть помещен в папку lib файла ear
  • 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

С уважением,

2 голосов
/ 26 марта 2010

Причина, по которой Seam страница отладки не появилась, невероятна (для меня).

Я упаковал свое приложение с Apache Maven. Традиционно имена файлов jar, управляемых maven, также содержат номер версии. Баночка для шва: jboss-seam -2.2.0.GA .jar. Поскольку Seam является EJB-модулем в приложении, я объявил его зависимость как таковую. И действительно, EAR содержал его как модуль EJB (расположенный в корне EAR) и также объявил его в файле META-INF / application.xml.

Я не знаю, определяет ли спецификация ограничения именования для модулей EJB в EAR, но часть версии имени файла была тем, что WebLogic не понравилось (если изменить, война отлично работает на JBoss).

Я изменил настройку в плагине maven-ear из этого:

<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>

И теперь я вижу ОБА мое приложение И страницу отладки.

0 голосов
/ 22 марта 2010

Что вы подразумеваете под отладочной страницей? Вы имеете в виду страницу отладки Seam по умолчанию? Что такое debug.seam? Обычно http://localhost:8080/debug.seam?

Недостаточно поместить в web.xml. Вы также должны положить в файле component.xml

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

Вам также необходимо убедиться, что jboss-seam-debug.jar находится в пути к классам. Перехватчик шва должен поднять это автоматически.

Если вы используете Facelets, чтобы получить его страницу отладки, вам нужно поместить это в web.xml

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

Совет от Артура о том, чтобы всегда использовать seam-gen для создания вашего проекта, является очень хорошей идеей.

Я также вижу, что Артур говорит, что вам нужно убедиться, что jboss-seam-debug.jar не должен быть в вашей библиотеке в вашей войне. Это не обязательно правильно. У меня есть мой в

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