[jboss-jira] [JBoss JIRA] (WFLY-12563) org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL flag ignored when WARs are embedded in EAR

Bartosz Ryndak (Jira) issues at jboss.org
Mon Sep 16 08:00:00 EDT 2019


Bartosz Ryndak created WFLY-12563:
-------------------------------------

             Summary: org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL flag ignored when WARs are embedded in EAR
                 Key: WFLY-12563
                 URL: https://issues.jboss.org/browse/WFLY-12563
             Project: WildFly
          Issue Type: Bug
          Components: JSF
    Affects Versions: 18.0.0.Beta1, 17.0.0.Final, 16.0.0.Final, 15.0.0.Final
            Reporter: Bartosz Ryndak
            Assignee: Farah Juma


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:
{code}
final DeploymentUnit tl = deploymentUnit.getParent() == null ? deploymentUnit : deploymentUnit.getParent();
String jsfVersion = JsfVersionMarker.getVersion(tl);
{code}

To:
{code}
String jsfVersion = JsfVersionMarker.getVersion(deploymentUnit);
{code}

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:

{code}
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;
         }
}
{code}

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:

{code}
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
{code}




--
This message was sent by Atlassian Jira
(v7.13.5#713005)


More information about the jboss-jira mailing list