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