ПРОПУСТИТЬ ОБНОВЛЕНИЕ 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)
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>
И теперь я вижу как свое приложение, так и страницу отладки.
Что значит отладочная страница? Вы имеете в виду страницу отладки стыка по умолчанию? Что такое 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
Вы получите следующее исключение
Идентификатор фазы не привязан к текущему потоку (убедитесь, что у вас не установлены два экземпляра 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. Шов будет.
ОБНОВЛЕНИЕ
Прежде всего, у вас есть ушная аппликация. Перед тем как продолжить
1º Каждый 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>
2º 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. Пойдем
3º Вы хотите включить страницу отладки
Страница отладки шва будет доступна , если эта банка развернута в 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 и развернуть свое ушное приложение)
И снова
Если вы действительно хотите избежать сильной головной боли, используйте шов.
ОБНОВЛЕНИЕ
Ваш слуховой проект КАК ПОКАЗАНО ВЫШЕ ??? УБЕДИТЕСЬ , что ваша папка 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
С уважением,
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].