-
Bug
-
Resolution: Done
-
Critical
-
7.2.3.GA
Due to changes indroduced to fix bug WFLY-10796 it is no longer possible to configure wars embedded in ear to bundle jsf implementation.
Changes made in file JSFDependencyProcessor.java in commit 40f72548985a9f5ca31317b01a4a0ce09ee759aa
From:
final DeploymentUnit tl = deploymentUnit.getParent() == null ? deploymentUnit : deploymentUnit.getParent(); String jsfVersion = JsfVersionMarker.getVersion(tl);
To:
String jsfVersion = JsfVersionMarker.getVersion(deploymentUnit);
modified the way jsf version is aquired. Before the change it was always taken from top level deployment. After it is taken directly from scanned deployment unit without searching in parent. Unfortunately there was no matching change in a way context params from web.xml are processed in JSFVersionProcessor:
final DeploymentUnit topLevelDeployment = deploymentUnit.getParent() == null ? deploymentUnit : deploymentUnit.getParent(); final WarMetaData metaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY); List<ParamValueMetaData> contextParams = new ArrayList<ParamValueMetaData>(); if ((metaData.getWebMetaData() != null) && (metaData.getWebMetaData().getContextParams() != null)) { contextParams.addAll(metaData.getWebMetaData().getContextParams()); } for (final ParamValueMetaData param : contextParams) { if ((param.getParamName().equals(WAR_BUNDLES_JSF_IMPL_PARAM) && (param.getParamValue() != null) && (param.getParamValue().toLowerCase(Locale.ENGLISH).equals("true")))) { JsfVersionMarker.setVersion(topLevelDeployment, JsfVersionMarker.WAR_BUNDLES_JSF_IMPL); break; // WAR_BUNDLES_JSF_IMPL always wins } if (param.getParamName().equals(JSF_CONFIG_NAME_PARAM)) { JsfVersionMarker.setVersion(topLevelDeployment, param.getParamValue()); break; } }
So the information about org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL flag is only set in top level deployment unit.
This causes Mojarra-2.0 to be returned as jsf version during checks in JSFDependencyProcessor for embedded wars and leads to initialization of default mojarra implementation before bundled implementation is processed. As both implementations are loaded class conflicts occur and it is not possible to properly initialize jsf. In case of myfaces this leads to below error:
2019-09-16 10:46:23,405 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 86) MSC000001: Failed to start service jboss.deployment.subunit."xxx.ear"."yyy.war".undertow-deployment: org.jboss.msc.service.StartException in service jboss.deployment.subunit."xxx.ear"."yyy.war".undertow-deployment: java.lang.RuntimeException: java.lang.IllegalStateException: Could not find backup for factory javax.faces.application.ApplicationFactory. at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:81) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) at java.lang.Thread.run(Thread.java:748) at org.jboss.threads.JBossThread.run(JBossThread.java:485) Caused by: java.lang.RuntimeException: java.lang.IllegalStateException: Could not find backup for factory javax.faces.application.ApplicationFactory. at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:252) at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:96) at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:78) ... 8 more Caused by: java.lang.IllegalStateException: Could not find backup for factory javax.faces.application.ApplicationFactory. at javax.faces.FactoryFinderInstance.notNullFactory(FactoryFinderInstance.java:524) at javax.faces.FactoryFinderInstance.getFactory(FactoryFinderInstance.java:207) at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:279) at org.apache.myfaces.context.servlet.FacesContextImplBase.getApplication(FacesContextImplBase.java:159) at org.apache.myfaces.context.servlet.FacesContextImplBase.getELContext(FacesContextImplBase.java:210) at javax.faces.component.UIViewRoot.setLocale(UIViewRoot.java:1602) at org.apache.myfaces.webapp.AbstractFacesInitializer._createFacesContext(AbstractFacesInitializer.java:477) at org.apache.myfaces.webapp.AbstractFacesInitializer.initStartupFacesContext(AbstractFacesInitializer.java:449) at org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:113) at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187) at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:216) at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:185) at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42) at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502) at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:250) ... 10 more
- clones
-
WFLY-12563 org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL flag ignored when WARs are embedded in EAR
- Closed
- is cloned by
-
JBEAP-17681 [GSS](7.2.z) WFLY-12563 - org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL flag ignored when WARs are embedded in EAR
- Closed