ПРОПУСТИТЬ ОБНОВЛЕНИЕ 3

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

У меня есть jboss-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)»

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

Я также читал о другом способе инициализации страницы отладки с помощью components.xml. Я также попытался включить следующие компоненты .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-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>

-> Сервлет ресурсов шва -> org.jboss.seam.servlet.SeamResourceServlet -> -> -> Сервлет ресурсов шва - > / seam / resource / * -> ->

<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-plugin, чтобы оставить внутри войны jar-файлы, специфичные для Интернета (те, которые упомянуты в ссылке, такие как 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 (удалите 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.contexts.getContextCurrentCapage 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 (Se amPhaseListener.java:391) org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase (SeamPhaseListener.java:230) org.jboss.seam.jsf.SeamPhaseListener.afterPhase19. 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 (Stub.Security. servlet.internal.StubSecurityHelper.invokeServlet (StubSecurityHelper.java:125) weblogic.servlet.internal.ServletStubImpl.execute (ServletStubImpl.java:292) weblogic.servlet.internal.TailFilter.doFilter.java. internal.FilterChainImpl.doFilter (FilterChainImpl.java:56) org.ajax4jsf.webapp.BaseFilter.doFilter (BaseFilter.java:53 0) weblogic.servlet.internal.FilterChainImpl.doFilter (FilterChainImpl.java:56) org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter (SeamFilter.java:83) org.jboss.seam.web.Identity IdentityFilter.java:40) org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter (SeamFilter.java:69) org.jboss.seam.web.MultipartFilter.doFilter (MultipartFilter.java:90) org.jboss.jboss. servlet.SeamFilter $ FilterChainImpl.doFilter (SeamFilter.java:69) org.jboss.seam.web.ExceptionFilter.doFilter (ExceptionFilter.java:64) org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter 69) org.jboss.seam.web.RedirectFilter.doFilter (RedirectFilter.java:45) org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter (SeamFilter.java:69) org.ajax4jsf.webapp.Base ( BaseXMLFilter.java:178) org.ajax4jsf.webapp.BaseFilter.handleRequest (BaseFilter.java:290) org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest (BaseFilter.java.aja:388) x4jsf.webapp.BaseFilter.doFilter (BaseFilter.java:515) org.jboss.seam.web.Ajax4jsfFilter.doFilter (Ajax4jsfFilter.java:56) org.jboss.seam.servlet.Seamhain.do. 69) org.jboss.seam.web.LoggingFilter.doFilter (LoggingFilter.java:60) org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter (SeamFilter.java:69) org.jloyss.seam.web.HotD. doFilter (HotDeployFilter.java:53) org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter (SeamFilter.java:69) org.jboss.seam.servlet.SeamFilter.doFilter (SeamFilter.java:158) web. internal.FilterChainImpl.doFilter (FilterChainImpl.java:56) weblogic.servlet.internal.RequestEventsFilter.doFilter (RequestEventsFilter.java:27) weblogic.servlet.internal.FilterChainImpl.doFilter (FilterChainImpl.java:56). 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. : 2108) weblogic.servlet.internal.ServletRequestImpl.run (ServletRequestImpl.java:1432) weblogic.work.ExecuteThread.execute (ExecuteThread.java:201) weblogic.work.ExecuteThread.run (ExecuteThread.java:173)

5
Markos Fragkakis 16 Мар 2010 в 14:00
Fragkakis Ваш StackTrace не имеет ничего общего с вашей страницей отладки . Это происходит из-за того, что он жалуется: нет идентификатора фазы, привязанного к текущему потоку (убедитесь, что у вас не установлено два экземпляра SeamPhaseListener) . Поэтому извлеките все свое ушное приложение с помощью WINRAR и убедитесь, что ваш файл war Папка WEB-INF / lib и папка lib вашего файла jar ejb не содержит jboss-seam.jar Он должен быть помещен в корневую папку вашего ушного файла и объявлен в ухе Файл META-INF / application.xml
 – 
Arthur Ronald
22 Мар 2010 в 22:36
Рональд Ф.Д. Гарсия, проблема может быть связана с Weblogic в конце концов. Спустя столько дней я изменил структуру своего уха. Он содержит все EJB (включая Seam) в своем корне. Мой .war содержит только свои собственные библиотеки (Richfaces, Facelets, Seam UI, Seam Debug). Я попробовал .ear на JBoss 4.2.3.GA (после удаления Hibernate, который содержится в JBoss), и это сработало.
 – 
Markos Fragkakis
23 Мар 2010 в 01:33
Fragkakis Bingo! Проблема в Weblogic. Как уже было сказано: есть некоторые известные проблемы с серверами Weblogic, которые необходимо решить, а также изменения конфигурации, которые необходимы только для Weblogic. внимательно прочтите docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/… См. также на этой странице Специальный jboss-seam.jar для поддержки Weblogic EJB
 – 
Arthur Ronald
23 Мар 2010 в 04:07
Рональд Ф.Д. Гарсия, пожалуйста, проверьте последнее обновление (обновление 3 !!). Я уже использовал специфичный для Weblogic Seam и внес все необходимые изменения, упомянутые в приведенной вами ссылке. Я начинаю подозревать, что есть ошибка с Weblogic и страницей отладки.
 – 
Markos Fragkakis
23 Мар 2010 в 15:04
Fragkakis Дополнительная ссылка: download.oracle.com/docs/ cd / E12840_01 / wls / docs103 / programming /… и download.oracle.com/docs/cd/E12840_01/wls/docs103/webapp/… Кроме того, я думаю, что ни APP-INF, ни APP-INF / classes не являются каталогами, стандартизированными JEE спецификация Так что имейте это в виду
 – 
Arthur Ronald
23 Мар 2010 в 16:12

3 ответа

Лучший ответ

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

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

Я не знаю, определяет ли спецификация ограничения именования для модулей EJB в EAR, но часть имени файла версии была тем, что не нравилось 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>

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

2
Markos Fragkakis 26 Мар 2010 в 20:55
Фрагкакис Поздравляю (+1). Теперь вы понимаете, почему я сказал: если вы хотите избежать сильной головной боли, используйте Seam-gem. Кроме того, связанные с Seam примеры могут дать вам хорошее представление о Seam. Не забудьте отметить свой ответ как принятый через два дня.
 – 
Arthur Ronald
26 Мар 2010 в 21:39

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

Недостаточно вставить web.xml. Вам также необходимо поместить в components.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
0
Shervin Asgari 22 Мар 2010 в 11:39
1
Нет нет. Я сказал, что jboss-seam-debug.jar должен быть помещен в папку с военным файлом WEB-INF lib . Как показал себя
 – 
Arthur Ronald
22 Мар 2010 в 21:55
1
Рональд Ф.Д. Гарсия, ах, ладно. Извини, тогда мне плохо
 – 
Shervin Asgari
23 Мар 2010 в 11:35

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

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

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

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

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

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

Хорошую статью о JSF / Seam, помимо книги «Шов в действии», можно найти здесь

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

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

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

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

ОБНОВЛЕНИЕ

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

Каждый EJB и военный модуль должен быть объявлен в 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 отображается следующим образом (он включает @ 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

Итак, ваше ухо 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. Пойдем

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

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

Итак, ваш 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>

Пара заметок

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

Что же упущено?

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

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

И снова

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

ОБНОВЛЕНИЕ

Ваш слуховой проект КАК ПОКАЗАНО ВЫШЕ ??? УБЕДИТЕСЬ , что ваша папка 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

С уважением,

3
Community 23 Май 2017 в 14:48
Извините, но я не понимаю, как я мог «установить» два SeamPhaseListener. На мой взгляд, SeamPhaseListener устанавливается, когда вы делаете соответствующую запись в файле web.xml, который у меня есть. Где установлен второй экземпляр?
 – 
Markos Fragkakis
17 Мар 2010 в 12:06
Если вы предполагаете, что тот факт, что у меня два проекта, актуален, я открыл последний .ear, и в нем оказался только один jboss-seam-debug.jar. Это в случае, если наличие jboss-seam-debug.jar автоматически регистрирует SeamPhaseListener.
 – 
Markos Fragkakis
17 Мар 2010 в 12:08
Пожалуйста, посмотрите еще раз, обновите текущую конфигурацию и статус.
 – 
Markos Fragkakis
18 Мар 2010 в 13:50
... Извините, это тоже не сработало ... Я все еще получаю то же исключение. Я также пробовал варианты решения, исключая зависимости maven, но не повезло. По какой-то причине SeamPhaseListener все еще "регистрируется" дважды.
 – 
Markos Fragkakis
19 Мар 2010 в 16:47
В любом случае, спасибо, что попал во все эти неприятности. Я все равно не буду отмечать этот ответ как правильный , но буду поддерживать другие комментарии, которые вы оставили в других сообщениях. Ваше здоровье!
 – 
Markos Fragkakis
19 Мар 2010 в 16:47