Title: Details on openejb-jar

<a name="Detailsonopenejb-jar-Whatisanopenejb-jar.xml?"></a>
# What is an openejb-jar.xml?

This is the file created by the Deploy Tool that maps your bean's
deployment descriptor (ejb-jar.xml) to actual containers and resources
declared in your OpenEJB configuration (openejb.conf). In fact, the Deploy
tool really does nothing more than create this file and put it in your jar,
that's it.

<a name="Detailsonopenejb-jar-Whenistheopenejb-jar.xmlused?"></a>
# When is the openejb-jar.xml used?

At startup, any jar containing a openejb-jar.xml is loaded by the container
system. The configuration tools will go looking in all the directories and
jars you have declared in your openejb.conf with the <Deployment> element.
For every jar file it finds, it will look inside for an openejb-jar.xml. If
it finds one, it will attempt to load and deploy it into the container
system.

<a name="Detailsonopenejb-jar-DoIevenneedthedeploytoolthen?"></a>
# Do I even need the deploy tool then?

Nope. Typically you would only use the deploy tool to create your
openejb-jar.xml, then just keep your openejb-jar.xml in your CVS (or other
repository). If you learn how to maintain this openejb-jar.xml file, you'll
never need the deploy tool again! You can do all your builds and deploys
automatically.

<a name="Detailsonopenejb-jar-WheredoIputtheopenejb-jar.xmlinmyjar?"></a>
# Where do I put the openejb-jar.xml in my jar?

The openejb-jar.xml file just goes in the META-INF directory of your jar
next to the ejb-jar.xml file.

<a name="Detailsonopenejb-jar-Isthefileformateasy?"></a>
# Is the file format easy?

If you can understand the ejb-jar.xml, the openejb-jar.xml should be a
breeze.

This is the openejb-jar.xml that is created by the Deploy tool in the Hello
World example. As you can see, the file format is extremely simple.

    <?xml version="1.0"?>
    <openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
        <ejb-deployment  ejb-name="Hello"
             deployment-id="Hello"
             container-id="Default Stateless Container"/>
    </openejb-jar>

    
    
The *ejb-name* attribute is the name you gave the bean in your ejb-jar.xml.
The *deployment-id* is the name you want to use to lookup the bean in your
client's JNDI namespace. The *container-id* is the name of the container in
your openejb.conf file that you would like the bean to run in. There MUST
be one *ejb-deployment* element for each EJB in your jar.
    
# What if my bean uses a JDBC datasource?
    
Then you simply add a <resource-link> element to your <ejb-deployment>
element like this
    
    <?xml version="1.0"?>
    <openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
        
        <ejb-deployment  ejb-name="Hello" 
    		     deployment-id="Hello" 
    		     container-id="Default Stateless Container" >
             
    	<resource-link res-ref-name="jdbc/basic/entityDatabase" 
    		     res-id="Default JDBC Database"/>
        
        </ejb-deployment>
    
    </openejb-jar>



The *res-ref-name* attribute refers to the <res-ref-name> element of the
bean's <resource-ref> declaration in the ejb-jar.xml. The *res-id*
attribute refers to the id of the <Connector> declared in your openejb.conf
that will handle the connections and provide access to the desired
resource.

<a name="Detailsonopenejb-jar-Howmanyresource-linkelementswillIneed?"></a>
# How many resource-link elements will I need?

You will need one <resource-link> element for every <resource-ref> element
in your ejb-jar.xml. So if you had an ejb-jar.xml like the following

    <?xml version="1.0"?>
    <ejb-jar>
      <enterprise-beans>
        <session>
          <ejb-name>MyExampleBean</ejb-name>
          <home>com.widget.ExampleHome</home>
          <remote>com.widget.ExampleObject</remote>
          <ejb-class>com.widget.ExampleBean</ejb-class>
          <session-type>Stateless</session-type>
          <transaction-type>Container</transaction-type>

          <resource-ref>
            <description>
              This is a reference to a JDBC database.
            </description>
            <res-ref-name>jdbc/myFirstDatabase</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
          </resource-ref>

          <resource-ref>
            <description>
              This is another reference to a JDBC database.
            </description>
            <res-ref-name>jdbc/anotherDatabase</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
          </resource-ref>

        </session>
      </enterprise-beans>
    </ejb-jar>

    
Then you would need two <resource-link> elements for that bean in your
openejb-jar.xml file as such.
    
    <?xml version="1.0"?>
    <openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
        
        <ejb-deployment  ejb-name="MyExampleBean" 
    		     deployment-id="MyExampleBean" 
    		     container-id="Default Stateless Container" >
             
    	<resource-link res-ref-name="jdbc/myFirstDatabase" 
    		     res-id="My Oracle JDBC Database"/>
    
    	<resource-link res-ref-name="jdbc/anotherDatabase" 
    		     res-id="My PostgreSQL JDBC Database"/>
        
        </ejb-deployment>
    
    </openejb-jar>



This would require two <Connector> declarations in your openejb.conf, one
with the *id* attribute set to _"My Oracle JDBC Database"_ , and another
with it's *id* attribute set to _"My PostgreSQL JDBC Database"_ 
