2014-03-31 23 views
3

我目前正在遷移一個JSF 1.2應用Wildfly 1/8決賽和我堅持:(JSF 1.2 Wildfly 1/8決賽 - 焊芯,JSF仍然引用JSF 2.2 API

首先,我讀過許多後相關問題(如https://community.jboss.org/message/845006Migrate JSF 1.2 Seam app to WildFly Beta 1),但建議的解決方案(不包括焊接子系統)對我不起作用

我做了什麼:

  • 我跟着多jsf功能教程l here,並將JSF 1.2作爲wildfly模塊(準確地說,3個模塊)安裝。
  • 接下來是我爲我的戰爭添加了對javax.faces.api和com.sun.jsf-impl(主插槽)的排除以及對我的jboss-deployment-structure.xml的1.2插槽的相應依賴項。
  • 由於應用程序使用了我也用耳朵部署的戰斧和戰斧沙盒,因此我也排除了主要插槽,並在這些部署中包含了兩個模塊的1.2插槽。

我的問題:

  • 當我嘗試調用部署(login.xhthml)的初始頁面,我得到以下錯誤,由模塊造成的「org.jboss 1.2
 
ERROR [request] UT005023: Exception handling request to /backoffice/login.faces: java.lang.NoSuchMethodError: javax.faces.context.FacesContext.getAttributes()Ljava/util/Map; 
    [exec]  at org.jboss.weld.jsf.ConversationAwareViewHandler.getActionURL(ConversationAwareViewHandler.java:103) 
    [exec]  at javax.faces.application.ViewHandlerWrapper.getActionURL(ViewHandlerWrapper.java:147) 
    [exec]  at com.sun.facelets.FaceletViewHandler.getActionURL(FaceletViewHandler.java:807) 
    [exec]  at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRenderer.getActionUrl(HtmlRenderer.java:77) 
    [exec]  at org.apache.myfaces.custom.form.HtmlFormRenderer.getActionUrl(HtmlFormRenderer.java:45) 
    [exec]  at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlFormRendererBase.encodeBegin(HtmlFormRendererBase.java:102) 
    [exec]  at org.apache.myfaces.custom.form.HtmlFormRenderer.encodeBegin(HtmlFormRenderer.java:134) 
    [exec]  at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:816) 
    [exec]  at javax.faces.component.UIComponent.encodeAll(UIComponent.java:928) 
    [exec]  at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933) 
    [exec]  at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:594) 
    [exec]  at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110) 
    [exec]  at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) 
    [exec]  at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    [exec]  at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266) 
    [exec]  at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) 
    [exec]  at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130) 
    [exec]  at com.jamonapi.JAMonFilter.doFilter(JAMonFilter.java:57) 
    [exec]  at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56) 
    [exec]  at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) 
    [exec]  at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:190) 
    [exec]  at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56) 
    [exec]  at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) 
    [exec]  at org.apache.myfaces.custom.conversation.ConversationServletFilter.doFilter(ConversationServletFilter.java:78) 
    [exec]  at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56) 
    [exec]  at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) 
    [exec]  at org.apache.myfaces.custom.requestParameterProvider.RequestParameterServletFilter.doFilter(RequestParameterServletFilter.java:66) 
    [exec]  at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56) 
    [exec]  at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) 
    [exec]  at de.voebzvd.indra.backoffice.webapp.AvoidCachingFilter.doFilter(AvoidCachingFilter.java:53) 
    [exec]  at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56) 
    [exec]  at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) 
    [exec]  at org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:188) 
    [exec]  at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56) 
    [exec]  at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) 
    [exec]  at de.voebzvd.logging.BaseFilter.doFilter(BaseFilter.java:44) 
    [exec]  at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56) 
    [exec]  at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) 
    [exec]  at de.voebzvd.logging.NDCFilter.doFilter(NDCFilter.java:50) 
    [exec]  at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56) 
    [exec]  at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) 
    [exec]  at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) 
    [exec]  at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) 
    [exec]  at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) 
    [exec]  at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) 
    [exec]  at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) 
    [exec]  at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113) 
    [exec]  at io.undertow.security.handlers.AuthenticationCallHandler.handleRequest(AuthenticationCallHandler.java:52) 
    [exec]  at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) 
    [exec]  at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) 
    [exec]  at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) 
    [exec]  at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) 
    [exec]  at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) 
    [exec]  at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) 
    [exec]  at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) 
    [exec]  at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) 
    [exec]  at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240) 
    [exec]  at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227) 
    [exec]  at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73) 
    [exec]  at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146) 
    [exec]  at io.undertow.server.Connectors.executeRootHandler(Connectors.java:168) 
    [exec]  at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:687) 
    [exec]  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    [exec]  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    [exec]  at java.lang.Thread.run(Thread.java:744) 

該錯誤是由被包含在罐焊接芯JSF的2.1.2.Fin的ConversationAwareViewHandler引起.as.jsf注入」在狹槽模塊org.jboss.as.jsf-injection中的al.jar,我也使用JSF 1.2模塊進行安裝。該類仍然引用JSF 2.2 API並相應地失敗。

從戰斧和我的戰爭中排除焊接子系統也沒有奏效。我試過這個:

<sub-deployment name="myfaces-tomahawk-core.jar"> 
    <exclude-subsystems> 
    <subsystem name="weld" /> 
    </exclude-subsystems> 
    <exclusions> 
    <module name="javax.faces.api" slot="main" /> 
    <module name="com.sun.jsf-impl" slot="main" /> 
    </exclusions> 
    <dependencies> 
    <module name="com.sun.jsf-impl" slot="1.2" /> 
    <module name="javax.faces.api" slot="1.2" /> 
    <module name="org.apache.commons.beanutils" /> 
    <module name="org.apache.commons.lang" /> 
    <module name="org.apache.commons.logging" /> 
    </dependencies> 
</sub-deployment> 
<sub-deployment name="myfaces-tomahawk-sandbox.jar"> 
    <exclude-subsystems> 
    <subsystem name="weld" /> 
    </exclude-subsystems> 
    <exclusions> 
    <module name="javax.faces.api" slot="main" /> 
    <module name="com.sun.jsf-impl" slot="main" /> 
    </exclusions> 
    <dependencies> 
    <module name="com.sun.jsf-impl" slot="1.2" /> 
    <module name="javax.faces.api" slot="1.2" /> 
    <module name="org.apache.commons.beanutils" /> 
    <module name="org.apache.commons.collections" /> 
    <module name="org.apache.commons.lang" /> 
    <module name="org.apache.commons.logging" /> 
    </dependencies> 
</sub-deployment> 
<sub-deployment name="backoffice.war"> 
    <exclude-subsystems> 
    <subsystem name="weld" /> 
    </exclude-subsystems> 
    <exclusions> 
    <module name="javax.faces.api" slot="main" /> 
    <module name="com.sun.jsf-impl" slot="main" /> 
    </exclusions> 
    <dependencies> 
    <module name="com.sun.jsf-impl" slot="1.2" /> 
    <module name="javax.faces.api" slot="1.2" /> 
    <module name="net.sourceforge.jamonapi" /> 
    <module name="org.apache.commons.beanutils" /> 
    <module name="org.apache.commons.codec" /> 
    <module name="org.apache.commons.lang" /> 
    <module name="org.apache.commons.logging" /> 
    </dependencies> 
</sub-deployment> 

我還能做些什麼嗎?

回答

2

爲了簡短起見,這個問題是由焊接和JSF 1.2的不兼容性引起的,在將來的版本中不會修復(參見here)。

在我看來,有三種方法可以去:

  1. 升級您的應用程序代碼與JSF 2.x的工作
  2. 必要時排除焊接子系統(可能需要重新配置wildfly的default-cdi設置)。
  3. 適當修補類ConversationAwareViewHandler以在舊的JSF API的情況下采取不同的行爲。

對我來說,只有補丁JSF注入模塊的選項,因爲應用程序升級是不可能的,選項2將需要更大的應用程序重組。

+0

非常好陳述。我發現了以下文章(https://access.redhat.com/solutions/1273803),它展示了一種配置焊接以使用JSF 1.2插槽的方法。它在EAP 6.3.0中運行良好。 – marciopd