If a sub deployment uses another sub deployment's module-alias as a dependency, it will deploy successfully, but if hot deployed, it will fail with the error below. Attached reproducer. <?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1"> <ear-subdeployments-isolated>true</ear-subdeployments-isolated> <sub-deployment name="ejb1.jar"> <module-alias name="deployment.ejb1"/> </sub-deployment> <sub-deployment name="ejb2.jar"> <dependencies> <!-- works <module name="deployment.test.ear.ejb1.jar" slot="main"/> --> <!-- fails with WELD-001408: Unsatisfied dependencies for type TestEJB1 with qualifiers @Default on redeploy / hot deploy --> <module name="deployment.ejb1" slot="main"/> </dependencies> </sub-deployment> </jboss-deployment-structure> 10:59:16,284 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.deployment.unit."test.ear".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."test.ear".WeldStartService: Failed to start service at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1936) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_60] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_60] at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_60] Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [TestEJB1] with qualifiers [@Default] at injection point [[field] @Inject private test.TestEJB2.test1] at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:315) at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:284) at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:147) at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:167) at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:386) at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:371) at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:379) at org.jboss.as.weld.WeldStartService.start(WeldStartService.java:65) at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1980) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1913) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] ... 3 more Note if you just undeploy instead of hot deploy this NPE happens, which could be related 10:59:49,103 ERROR [org.jboss.msc.service] (MSC service thread 1-2) MSC000002: Invocation of listener "org.jboss.as.server.moduleservice.ServiceModuleLoader$ModuleSpecLoadListener@4806eb9e" failed: java.lang.NullPointerException at org.jboss.modules.ModuleLoader$FutureModule.access$400(ModuleLoader.java:645) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ModuleLoader.unloadModuleLocal(ModuleLoader.java:435) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.as.server.moduleservice.ServiceModuleLoader.access$200(ServiceModuleLoader.java:58) [jboss-as-server-7.5.7.Final-redhat-3.jar:7.5.7.Final-redhat-3] at org.jboss.as.server.moduleservice.ServiceModuleLoader$ModuleSpecLoadListener.transition(ServiceModuleLoader.java:105) [jboss-as-server-7.5.7.Final-redhat-3.jar:7.5.7.Final-redhat-3] at org.jboss.msc.service.ServiceControllerImpl.invokeListener(ServiceControllerImpl.java:1565) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] at org.jboss.msc.service.ServiceControllerImpl.access$2800(ServiceControllerImpl.java:52) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] at org.jboss.msc.service.ServiceControllerImpl$ListenerTask.run(ServiceControllerImpl.java:2131) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_60] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_60] at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_60]
It seems to me that this is not Weld/CDI issue. In the case when it works the identifier for Module and ModuleDependency is the same but when the alias is used then the ModuleDependency identifier is "deployment.ejb-2:main" which doesn't correspond to "deployment.assembly.ear.ejb-2.jar". David can you please take a look and eventually confirm or refute my understanding?
Tomas Hofman <thofman> updated the status of jira JBEAP-4650 to Coding In Progress
Proposed fix in jboss-modules component: https://github.com/jboss-modules/jboss-modules/pull/91
@david.lloyd could you please verify and merge this PR for jboss-moudles: https://github.com/jboss-modules/jboss-modules/pull/91
David Do we have any update on this bug?
Sent a PR to upstream https://github.com/jboss-modules/jboss-modules/pull/118
Verified with the attached reproducer.
Released with EAP 6.4.14 on March 14 (ZIPs) and March 22 (RPMs).