Bug in war deployment dependency resolution?
jamesbaxter Sep 9, 2011 6:03 AMHello,
I have a Filter defined in a EJB jar which is referenced in a Wars' web.xml. Both components are deployed within an Ear file. During deployment I get the exception:
09:24:46,328 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC00001: Failed to start service jboss.deployment.subunit."my.ear"."my.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.subunit."my.ear"."my.war".INSTALL: Failed to process phase INSTALL of subdeployment "my.war" of deployment "my.ear" at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121) at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765) at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26] at java.lang.Thread.run(Thread.java:662) [:1.6.0_26] Caused by: java.lang.IllegalArgumentException: name is null at org.jboss.msc.service.ServiceBuilderImpl.doAddDependency(ServiceBuilderImpl.java:203) at org.jboss.msc.service.ServiceBuilderImpl.addDependency(ServiceBuilderImpl.java:197) at org.jboss.msc.service.ServiceBuilderImpl.addDependency(ServiceBuilderImpl.java:191) at org.jboss.as.ejb3.deployment.processors.EjbInjectionSource.getResourceValue(EjbInjectionSource.java:70) at org.jboss.as.ee.component.ModuleJndiBindingProcessor.addJndiBinding(ModuleJndiBindingProcessor.java:189) at org.jboss.as.ee.component.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:157) at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:52) at org.jboss.as.ee.component.ModuleJndiBindingProcessor.processClassConfigurations(ModuleJndiBindingProcessor.java:129) at org.jboss.as.ee.component.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:122) at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115) ... 5 more
I've been struggling to get my head around this, but from looking at DeploymentUnitPhaseService and below, it looks like the Filter is marked for injection using an EjbInjectionSource but the resolve method is not called as it is not directly added as a dependency of the War module.
Sometimes it works as the EjbInjectionSource seems to be stored at the EEApplicationDescription level and can be processed by another deployment unit (dependent on timing).
I'm not sure if this is a bug in the dependency resolution process or if I'm violating a spec? It is quite handy to define a Filter in a common module and reuse it across Wars...
Any advice is appreciated.