| <html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Deployment IDs</title><link href="default.css" rel="stylesheet"><link href="/images/favicon.ico" rel="SHORTCUT ICON"></head><body marginwidth="0" marginheight="0" leftmargin="0" bottommargin="0" topmargin="0" vlink="#6763a9" link="#6763a9" bgcolor="#ffffff"><a name="top"></a><table height="400" width="712" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#7270c2" align="left" valign="top" width="20"><img border="0" height="1" width="1" src="images/dotTrans.gif"></td><td bgcolor="#7270c2" align="left" valign="top" width="95"><img border="0" height="1" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" width="7"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td><td align="left" valign="top" width="40"><img border="0" height="6" width="40" src="images/dotTrans.gif"></td><td bgcolor="#5A5CB8" align="left" valign="top" width="430"><img border="0" height="6" width="430" src="images/top_2.gif"></td><td bgcolor="#E24717" align="left" valign="top" width="120"><img src="images/top_3.gif" width="120" height="6" border="0"></td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" width="20"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#7270c2" width="95"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#ffffff" width="7"></td><td align="left" valign="top" width="40"><img border="0" height="1" width="1" src="images/dotTrans.gif"></td><td align="left" valign="middle" width="430"><a href="faq.html"><span class="menuTopOff">[ f a q ]</span></a> <a href="http://wiki.codehaus.org/openejb"><span class="menuTopOff">[ w i k i ]</span></a> <a href="http://archive.openejb.codehaus.org/user/"><span class="menuTopOff">[ l i s t s ]</span></a> <a href="http://cvs.openejb.org/"><span class="menuTopOff">[ c v s ]</span></a> <a href="http://jira.codehaus.org/secure/BrowseProject.jspa?id=10401"><span class="menuTopOff">[ b u g s ]</span></a> <br><img border="0" height="2" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" height="20" width="120"> </td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" width="20"><img border="0" height="3" width="20" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#7270c2" width="95"><img border="0" height="3" width="105" src="images/line_sm.gif"></td><td align="left" valign="top" bgcolor="#a9a5de" width="7"><img border="0" height="3" width="7" src="images/line_sm.gif"></td><td align="left" valign="top" width="40"><img border="0" height="3" width="40" src="images/line_light.gif"></td><td align="left" valign="top" width="430"><img border="0" height="3" width="430" src="images/line_light.gif"></td><td align="left" valign="top" width="120"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td></tr><tr><td align="left" valign="top" bgcolor="#7270c2"><img border="0" height="10" width="20" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#7270c2" width="95"><img border="0" height="2" width="1" src="images/dotTrans.gif"><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Main</span></td></tr><tr><td align="left" valign="top"><a href="index.html"><span class="subMenuOff"> |
| Welcome!</span></a></td></tr><tr><td align="left" valign="top"><a href="download.html"><span class="subMenuOff"> |
| Download</span></a></td></tr><tr><td align="left" valign="top"><a href="lists.html"><span class="subMenuOff"> |
| Mailing Lists</span></a></td></tr><tr><td align="left" valign="top"><a href="cvs.html"><span class="subMenuOff"> |
| Source Code</span></a></td></tr><tr><td align="left" valign="top"><a href="contributors.html"><span class="subMenuOff"> |
| The Team</span></a></td></tr><tr><td align="left" valign="top"><a href="status.html"><span class="subMenuOff"> |
| Status</span></a></td></tr></table><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Users</span></td></tr><tr><td align="left" valign="top"><a href="quickstart.html"><span class="subMenuOff"> |
| Quickstart</span></a></td></tr><tr><td align="left" valign="top"><a href="hello-world.html"><span class="subMenuOff"> |
| Hello World!</span></a></td></tr><tr><td align="left" valign="top"><a href="cmp_entity_postgresql.html"><span class="subMenuOff"> |
| CMP Example</span></a></td></tr><tr><td align="left" valign="top"><a href="cmp_guide.html"><span class="subMenuOff"> |
| CMP Guide</span></a></td></tr><tr><td align="left" valign="top"><a href="deploy.html"><span class="subMenuOff"> |
| Deploy</span></a></td></tr><tr><td align="left" valign="top"><a href="start-command.html"><span class="subMenuOff"> |
| Startup</span></a></td></tr><tr><td align="left" valign="top"><a href="validate.html"><span class="subMenuOff"> |
| Validation</span></a></td></tr><tr><td align="left" valign="top"><a href="config_containers.html"><span class="subMenuOff"> |
| Configuration</span></a></td></tr><tr><td align="left" valign="top"><a href="properties.html"><span class="subMenuOff"> |
| Properties</span></a></td></tr></table><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Servers</span></td></tr><tr><td align="left" valign="top"><a href="embedded.html"><span class="subMenuOff"> |
| Local Server</span></a></td></tr><tr><td align="left" valign="top"><a href="remote-server.html"><span class="subMenuOff"> |
| Remote Server</span></a></td></tr><tr><td align="left" valign="top"><a href="tomcat.html"><span class="subMenuOff"> |
| Tomcat</span></a></td></tr><tr><td align="left" valign="top"><a href="geronimo.html"><span class="subMenuOff"> |
| Geronimo</span></a></td></tr></table><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Integrators</span></td></tr><tr><td align="left" valign="top"><a href="whyopenejb.html"><span class="subMenuOff"> |
| Why OpenEJB</span></a></td></tr><tr><td align="left" valign="top"><a href="containersystem.html"><span class="subMenuOff"> |
| Overview</span></a></td></tr><tr><td align="left" valign="top"><a href="design_openejb.html"><span class="subMenuOff"> |
| Design</span></a></td></tr><tr><td align="left" valign="top"><a href="OpenEJB_presentaion.ppt"><span class="subMenuOff"> |
| Presentation</span></a></td></tr></table><img border="0" height="15" width="1" src="images/dotTrans.gif"><br><img border="0" height="3" width="105" src="images/line_sm.gif"><br><A href="http://codehaus.org"><IMG alt="The Codehaus" border="0" height="17" width="88" src="http://www.openejb.org/codehaus-smaller.png"></A></td><td align="left" valign="top" bgcolor="#a9a5de" width="7"> </td><td align="left" valign="top" width="40"> </td><td valign="top" width="430" rowspan="4"><table width="430" cellspacing="0" cellpadding="0" border="0" rows="2" cols="1"><tr><td align="left" valign="top"><br><img width="200" vspace="0" src="./images/logo_ejb2.gif" hspace="0" height="55" border="0"><br><img src="images/dotTrans.gif" hspace="0" height="7" border="0"><br><span class="pageTitle">Deployment IDs</span><br><img src="images/dotTrans.gif" hspace="0" height="1" border="0"></td></tr></table><p></p><p></p><br><span class="toc"><a href="#definition">What is a Deployment ID?</a><br></span><span class="toc"><a href="#usage">How is it used?</a><br></span><span class="toc"><img border="0" height="1" width="15" src="images/dotTrans.gif"><a href="#usage.containersystem">In the container system</a><br></span><span class="toc"><img border="0" height="1" width="15" src="images/dotTrans.gif"><a href="#usage.local.server">In the Local Server</a><br></span><span class="toc"><img border="0" height="1" width="15" src="images/dotTrans.gif"><a href="#usage.remote.server">In the Remote Server</a><br></span><span class="toc"><img border="0" height="1" width="15" src="images/dotTrans.gif"><a href="#usage.corba.adapter">In the CORBA Adapter</a><br></span><span class="toc"><a href="#duplicates">What happens if there is a duplicate deployment ID?</a><br></span><br><a name="definition"><h2>What is a Deployment ID?</h2></a> |
| <p><span class="bodyBlack"> |
| Every bean deployed in OpenEJB has a unique deployment-id that identifies it |
| within the scope of the entire container system. The server and container system |
| refer beans at run-time using the bean's deployment id. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| This deployment id is much like the <ejb-name> element of the ejb-jar.xml |
| , with one very important difference. The <ejb-name> is only required to be |
| unique within the scope of the ejb-jar.xml in the bean's jar. The deployment id is |
| required to be unique across all beans and jars in OpenEJB. This is a subtle, but |
| important, distinction. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| Remember that the EJB specification was designed so that enterprise beans could be |
| create, packaged, and sold by vendors (EJB Providers). Furthermore, users should be able |
| to buy a packaged set of beans (a jar with an ejb-jar.xml in it) and deploy it into an |
| EJB Container without modification. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| Let's consider this, what happens if two vendors each sell a package (jar) |
| that contains a bean with the <ejb-name> PurchaseOrder? Both are completely different |
| in terms functionality and are different beans in every other respect. The EJB spec says, this |
| is fine, ejb-names only have to unique within the jar and that jar's ejb-jar.xml file. It's |
| redictulous to excpect EJB Providers to call each other up and ask, "Are you already using the |
| name 'PurchaseOrder' in your jar?" Remember that the EJB specification was designed so that enterprise beans could be |
| create, packaged, and sold by vendors (EJB Providers). Furthermore, users should be able |
| to buy a packaged set of beans (a jar with an ejb-jar.xml in it) and deploy it into an |
| EJB Container without modification. This is all fine and dandy, but it still leaves it up |
| to the EJB Container/Server providers to settle the difference. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| OpenEJB solves this with the OpenEJB-specific deployment id. By requiring that |
| each bean deployed into OpenEJB has a unique name, we can guarantee that we are always |
| refering to the right bean at all times. Futhermore, it allows you to deploy |
| different versions of the same package several times in the same container system, each |
| time giving the beans new deployment ids. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| If you're lazy --as any truly great programmer should be-- and don't want to type |
| a deployment id for each bean every time you deploy a jar, you can use the |
| <a href="deploy.html#usage.-D">-D option</a> of the Deploy Tool. This will throw caution |
| to the wind, and automatically assign the bean's ejb-name as the value of the bean's |
| OpenEJB deployment id. This leaves up to you to guarantee that bean's ejb-name will be |
| unique across all beans and jars in the container system. In other words, be very careful |
| with the -D option! |
| </span></p> |
| <a name="usage"><h2>How is it used?</h2></a> |
| |
| <a name="usage.containersystem"><h3>In the container system</h3></a> |
| <p><span class="bodyBlack"> |
| In the container system, the deployment id is used to undex the bean in a system-wide |
| registry. This registry is refered to on every call made in the container system. Being |
| able to safely hash and cache bean information by id is a must. This stresses the importance |
| of unique ids for every bean deployed in OpenEJB. |
| </span></p> |
| |
| |
| <a name="usage.local.server"><h3>In the Local Server</h3></a> |
| <p><span class="bodyBlack"> |
| The <a href="spec.html#intravm.server">Local (IntraVM) Server</a> is an integral part of |
| the container system and the two are, in many ways, inseparable. The Local Server takes |
| care of all bean to bean and client to bean invocations made inside the virtual machine. |
| For this reason, it often refered to as the IntraVM Server. |
| </span></p> |
| <p><span class="bodyBlack"> |
| For bean to bean communications, the Local Server must create a JNDI namespace (JNDI ENC) |
| for each bean as defined by the bean's <env-entry>, <ejb-ref>, and <resource-ref> elements |
| of the bean's ejb-jar.xml file. Every bean litterally gets its very own JNDI namespace. |
| When a bean makes a JNDI call, the Local Server intercepts this call and uses the |
| deployment id of the calling bean to retreive that bean's private JNDI namespace from the |
| container system's index. The Local Server then carries out the lookup on that bean's |
| namespace. |
| </span></p> |
| <p><span class="bodyBlack"> |
| All non-bean clients share one big global namespace. Since non-bean clients are not |
| deployed and do not have a deployment descriptor like an ejb-jar.xml, the Local Server is |
| unable to taylor a namespace for each non-bean client as it can for bean clients. The Local |
| server cannot identify non-bean clients as they have no deployment id. All JNDI calls made |
| by clients that the Local Server cannot identify go to the public, global namespace. The |
| public, global JNDI namespace contains all beans and resources in the container system. |
| name. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| Each bean is added to the public, global namespace using it's deployment id as its JNDI |
| lookup. For example, if a bean had a deployment-id of "/my/bean/foo", a non-bean |
| client could lookup that bean as follows. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">c:\my\app\MyAppClient.java</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| ... |
| Object bean = initialContext.lookup("/my/bean/Foo"); |
| ... |
| </pre></span></td></tr></table> |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| If a bean in the container system made the above JNDI call, the Local Server would see |
| the bean's identity (deployment id) hidden in the Thread, go get the bean's private JNDI |
| namespace and finish the lookup on that. Since all names in bean's JNDI namespace are |
| required start with "java:comp/env", the lookup would fail and the bean would receive a |
| javax.naming.NameNotFoundException. |
| </span></p> |
| <p><span class="bodyBlack"> |
| In short... |
| </span></p> |
| <p><span class="bodyBlack"> |
| For beans: |
| <table cellspacing="2" cellpadding="2" border="0"><tr><td height="5" colspan="2"></td></tr><span class="bodyGrey"> |
| <tr><td width="10" valign="top" align="left"><img src="images/grayDot.gif"></td><td valign="top" align="left"><span class="bodyBlack">Each bean has it's own private, personalized JNDI namespace</span></td></tr> |
| <tr><td width="10" valign="top" align="left"><img src="images/grayDot.gif"></td><td valign="top" align="left"><span class="bodyBlack">The names in it are the same names it uses in its ejb-jar.xml</span></td></tr> |
| <tr><td width="10" valign="top" align="left"><img src="images/grayDot.gif"></td><td valign="top" align="left"><span class="bodyBlack">Beans can only access their private namespace, period</span></td></tr> |
| </span></table> |
| </span></p> |
| <p><span class="bodyBlack"> |
| For non-beans (everyone else): |
| <table cellspacing="2" cellpadding="2" border="0"><tr><td height="5" colspan="2"></td></tr><span class="bodyGrey"> |
| <tr><td width="10" valign="top" align="left"><img src="images/grayDot.gif"></td><td valign="top" align="left"><span class="bodyBlack">Non-bean clients share the public, global JNDI namespace</span></td></tr> |
| <tr><td width="10" valign="top" align="left"><img src="images/grayDot.gif"></td><td valign="top" align="left"><span class="bodyBlack">The names in it are the deployment ids of all the beans</span></td></tr> |
| <tr><td width="10" valign="top" align="left"><img src="images/grayDot.gif"></td><td valign="top" align="left"><span class="bodyBlack">Non-bean clients can only access the one global namespace</span></td></tr> |
| </span></table> |
| </span></p> |
| |
| |
| |
| <a name="usage.remote.server"><h3>In the Remote Server</h3></a> |
| <p><span class="bodyBlack"> |
| The Remote Server has a public, global namespace just as the Local Server does. The |
| difference being that the Remote Server only serves clients outside the container system |
| and outside the virtual machine. So, all clients from the perspective of the Remote Server |
| are non-bean clients. As a result, the Remote Server only has the one public, global |
| JNDI namespace. Just as in the Local Server, the names in this namespacse consist of the |
| deployment ids of the beans in the container system. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| Just as before, clients can lookup beans from the Remote Server using the bean's |
| deployment id. For example, if a bean had a deployment-id of "/my/bean/foo", a |
| client could lookup that bean as follows. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">c:\my\app\MyAppClient.java</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| ... |
| Object bean = initialContext.lookup("/my/bean/Foo"); |
| ... |
| </pre></span></td></tr></table> |
| </span></p> |
| |
| |
| <a name="usage.corba.adapter"><h3>In the CORBA Adapter</h3></a> |
| <p><span class="bodyBlack"> |
| The CORBA Adapter is separate than the Remote Server. It adapts the OpenEJB |
| Container System and the Local Server into <a href="http://openorb.sf.net">OpenORB</a> |
| as an embedded library. It provides users of <a href="http://openorb.sf.net">OpenORB</a> |
| the ability to lookup and execute beans (EJBs) via the RMI-IIOP protocol. All the |
| EJBHome and EJBObject interfaces of beans in OpenEJB are implemented by OpenORB as CORBA |
| stubs and ties. |
| </span></p> |
| <p><span class="bodyBlack"> |
| The beans are exported into OpenORB's naming service by deployment id. So, just as with the |
| Local Server and Remote Server, clients can lookup beans using the bean's deployment id. |
| OpenORB has a JNDI implementation of their naming service, so lookups can be done just as |
| before. |
| </span></p> |
| <p><span class="bodyBlack"> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">c:\my\app\MyAppClient.java</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| ... |
| Object bean = initialContext.lookup("/my/bean/Foo"); |
| ... |
| </pre></span></td></tr></table> |
| </span></p> |
| <p><span class="bodyBlack"> |
| CORBA clients can also access beans in OpenEJB as CORBA objects. These can be |
| looked up from OpenORB's naming service (CosNaming) as follows. |
| </span></p> |
| <p><span class="bodyBlack"> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">c:\my\app\MyCorbaAppClient.java</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| ... |
| String[] args = ... |
| |
| <span class="code-comment">// The ORB and Object</span> |
| org.omg.CORBA.ORB orb = null; |
| org.omg.CORBA.Object bean = null. |
| |
| <span class="code-comment">// The Naming Service and Object Name</span> |
| org.omg.CosNaming.NamingContext context = null; |
| org.omg.CosNaming.NameComponent[] name = null; |
| |
| <span class="code-comment">// Get the ORB</span> |
| orb = org.omg.CORBA.ORB.init( args, null ); |
| |
| <span class="code-comment">// Get the Naming Service </span> |
| org.omg.CORBA.Object ref = null; |
| ref = orb.resolve_initial_references("NameService"); |
| context = org.omg.CosNaming.NamingContextHelper.narrow( ref ); |
| |
| <span class="code-comment">// Get the Name as a component |
| // Note: the string is the bean's deployment id </span> |
| name = new org.omg.CosNaming.NameComponent[ 1 ]; |
| name[0] = new org.omg.CosNaming.NameComponent("/my/bean/foo",""); |
| |
| <span class="code-comment">// Finally, get the bean as a CORBA object |
| // Equvalent to an InitialContext.lookup("/my/bean/foo");</span> |
| bean = context.resolve( name ); |
| ... |
| </pre></span></td></tr></table> |
| </span></p> |
| |
| |
| <a name="duplicates"><h2>What happens if there is a duplicate deployment ID?</h2></a> |
| <p><span class="bodyBlack"> |
| The deployment ID uniquely identifies the bean in the |
| OpenEJB container system. Therefore, no two beans can share the same |
| deployment ID. |
| </span></p> |
| <p><span class="bodyBlack"> |
| If a bean attempts to use a deployment ID that is already in |
| use by another bean, the second bean and all beans in it's jar |
| will not be loaded. In addition, the system will log a warning |
| like the following one asking you to redeploy the jar and choose |
| an different deployment ID for the bean. |
| </span></p> |
| <p><span class="bodyBlack"> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">c:\openejb\openejb.log</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| WARN : Jar C:\openejb\beans\fooEjbs.jar cannot be loaded. The |
| Deployment ID "/my/bean/foo" is already in use. Please redeploy |
| this jar and assign a different deployment ID to the bean with |
| the ejb-name "FooBean". |
| </pre></span></td></tr></table> |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| For example, the acmeEjbs.jar contains a bean with the ejb-name |
| "DaffyDuckBean". The disneyEjbs.jar contains contains a bean with |
| the ejb-name "DonaldDuckBean". |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| We deploy the acmeEjbs.jar and give the "DaffyDuckBean" the |
| deployment ID of "/my/favorite/duck". Sometime afterwards, |
| we deploy the disneyEjbs.jar and assign the "DonaldDuckBean" |
| the deployment ID "/my/favorite/duck", having forgotten that |
| we already gave that unique ID to the "DaffyDuckBean" in the |
| acmeEjbs.jar. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| When the container system is started, the system will begin |
| loading all the beans one jar at a time. It will first load the |
| acmeEjbs.jar and index each bean by deployment ID. But, when the |
| system reaches the disneyEjbs.jar, it will discover that it cannot |
| index the "DonaldDuckBean" using the deployment ID "/my/favorite/duck" |
| because that index is already taken. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| The system cannot load the "DonaldDuckBean" and must also ignore |
| the rest of the beans in the disneyEjbs.jar as they may need the |
| "DonaldDuckBean" bean to function properly. The disneyEjbs.jar |
| is skipped and the following warning is logged. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">c:\openejb\openejb.log</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| WARN : Jar C:\openejb\beans\disneyEjbs.jar cannot be loaded. The |
| Deployment ID "/my/favorite/duck" is already in use. Please redeploy |
| this jar and assign a different deployment ID to the bean with |
| the ejb-name "DonaldDuckBean". |
| </pre></span></td></tr></table> |
| </span></p> |
| </td><td align="left" valign="top" height="5" width="120"> |
| |
| |
| |
| </td></tr><tr height="5"><td align="left" valign="top" bgcolor="#7270c2" height="5" width="20"> </td><td valign="top" bgcolor="#7270c2" height="5" width="95"> </td><td align="left" valign="top" bgcolor="#a9a5de" height="5" width="7"> </td><td align="left" valign="top" height="5" width="40"> </td><td align="left" valign="top" height="5" width="120"> </td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" height="5" width="20"> </td><td align="left" valign="top" bgcolor="#7270c2" width="95"> </td><td align="left" valign="top" bgcolor="#a9a5de" width="7"><img border="0" height="25" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" width="40"><img border="0" height="25" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" width="120"> </td></tr><tr height="5"><td align="left" valign="bottom" bgcolor="#7270c2" height="100%" rowspan="2" width="20"><img border="0" height="125" width="20" src="images/stripes1.gif"></td><td align="left" valign="bottom" bgcolor="#7270c2" height="100%" rowspan="2" width="95"><img border="0" height="125" width="105" src="images/stripe105.gif"></td><td align="left" valign="top" bgcolor="#a9a5de" height="100%" rowspan="2" width="7"> </td><td align="left" valign="top" height="100%" width="40"> </td><td align="left" valign="top" height="100%" width="120"> </td></tr><tr height="5"><td align="left" valign="top" height="25" width="40"> </td><td align="left" valign="bottom" height="25" width="430"><br><br><img height="3" width="430" border="0" src="images/line_light.gif"><br><p></p><span class="bodyGrey"><small><notice> |
| OpenEJB is a trademark of the OpenEJB Group. |
| Java, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered |
| trademarks of Sun Microsystems, Inc. in the United States and in other |
| countries. XML, XML Schema, XSLT and related standards are trademarks or registered |
| trademarks of MIT, INRIA, Keio or others, and a product of the World Wide Web |
| Consortium. All other product names mentioned herein are trademarks of their respective |
| owners. |
| </notice><br> <br></small></span><p></p> |
| |
| </td><td align="left" valign="top" height="25" width="120"> </td></tr></table></body></html> |