Dependency
Dependencies of an EJB on a service or services, including other EJBs, may be specified through the <depends> tag of the jboss.xml deployment descriptor. The <depends>
tag is analagous to the Depends annotation. The dependencies control the deployment of EJBs such that an EJB will not deploy until all of it's dependencies have successfully
deployed.
jboss-service.xml
Take a look at jboss-service.xml. This service deployment descriptor starts a service based on
DependedOn.java.
jboss.xml
Take a look at jboss.xml. This deployment descriptor indicates that the HasXmlMBeanDependencyBean is dependent on the
jboss.test:service=DependedOn started by jboss-service.xml. The HasXmlMBeanDependencyBean will not deploy until the jboss.test:service=DependedOn
service has successfully started.
Building and Running
To build and run the example, make sure you have ejb3.deployer installed in JBoss 4.0.x and have JBoss running. See the reference manual on how to install EJB 3.0.
The run ant task will deploy just the HasXmlMBeanDependencyBean EJB. You will see deployment dependency log entries in the JBoss console and the following client
exception as the bean has not been deployed due to the unfullfilled dependency.
Unix: $ export JBOSS_HOME=<where your jboss 4.0 distribution is>
Windows: $ set JBOSS_HOME=<where your jboss 4.0 distribution is>
$ ant
$ ant run
run:
[java] Caught unsatisfied dependency exception javax.naming.NameNotFoundException: HasXmlMBeanDependencyBean not bound
13:17:53,921 ERROR [URLDeploymentScanner] Incomplete Deployment listing:
--- MBeans waiting for other MBeans ---
ObjectName: jboss.j2ee:service=EJB3,jar=tutorial.jar,name=HasXmlMBeanDependencyBean
State: NOTYETINSTALLED
I Depend On:
jboss.test:service=DependedOn
--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: jboss.test:service=DependedOn
State: NOTYETINSTALLED
Depends On Me:
jboss.j2ee:service=EJB3,jar=tutorial.jar,name=HasXmlMBeanDependencyBean
Next, deploy the jboss.test:service=DependedOn and run again
$ ant deploy-dependency
deploy-dependency:
[copy] Copying 1 file to C:\eclipse\workspace\jboss-head\build\output\jboss
-5.0.0alpha\server\all\deploy
$ant run
run:
[java] Lookup and bean access succeeded