blob: e9422f9dd119d9b66df2a78dc2664995dbe76010 [file] [log] [blame]
<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Accessing EJBs Locally --
OpenEJB embedded in your app, server, IDE, or JUnit</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://wiki.codehaus.org/openejb"><span class="menuTopOff">[ w i k i ]</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://archive.openejb.codehaus.org/user/"><span class="menuTopOff">[ l i s t s ]</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://cvs.openejb.org/"><span class="menuTopOff">[ c v s ]</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://jira.codehaus.org/secure/BrowseProject.jspa?id=10401"><span class="menuTopOff">[ b u g s ]</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img border="0" height="2" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" height="20" width="120">&nbsp;</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">&nbsp;&nbsp;&nbsp;
Welcome!</span></a></td></tr><tr><td align="left" valign="top"><a href="download.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Download</span></a></td></tr><tr><td align="left" valign="top"><a href="lists.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Mailing Lists</span></a></td></tr><tr><td align="left" valign="top"><a href="cvs.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Source Code</span></a></td></tr><tr><td align="left" valign="top"><a href="contributors.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
The Team</span></a></td></tr><tr><td align="left" valign="top"><a href="status.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
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">&nbsp;&nbsp;&nbsp;
Quickstart</span></a></td></tr><tr><td align="left" valign="top"><a href="hello-world.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Hello World!</span></a></td></tr><tr><td align="left" valign="top"><a href="cmp_entity_postgresql.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
CMP Example</span></a></td></tr><tr><td align="left" valign="top"><a href="cmp_guide.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
CMP Guide</span></a></td></tr><tr><td align="left" valign="top"><a href="deploy.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Deploy</span></a></td></tr><tr><td align="left" valign="top"><a href="start-command.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Startup</span></a></td></tr><tr><td align="left" valign="top"><a href="validate.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Validation</span></a></td></tr><tr><td align="left" valign="top"><a href="config_containers.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Configuration</span></a></td></tr><tr><td align="left" valign="top"><a href="properties.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
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">&nbsp;&nbsp;&nbsp;
Local Server</span></a></td></tr><tr><td align="left" valign="top"><a href="remote-server.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Remote Server</span></a></td></tr><tr><td align="left" valign="top"><a href="tomcat.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Tomcat</span></a></td></tr><tr><td align="left" valign="top"><a href="geronimo.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
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">&nbsp;&nbsp;&nbsp;
Why OpenEJB</span></a></td></tr><tr><td align="left" valign="top"><a href="containersystem.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Overview</span></a></td></tr><tr><td align="left" valign="top"><a href="design_openejb.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Design</span></a></td></tr><tr><td align="left" valign="top"><a href="OpenEJB_presentaion.ppt"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
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">&nbsp;</td><td align="left" valign="top" width="40">&nbsp;</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">Accessing EJBs Locally</span><br><span class="pageSubTitle">OpenEJB embedded in your app, server, IDE, or JUnit</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="#local.defined">Say what?! A local server?</a><br></span><span class="toc"><a href="#local.access">Accessing EJBs locally</a><br></span><span class="toc"><a href="#config">Passing initialization parameters</a><br></span><span class="toc"><a href="#openejb.home">Set the openejb.home variable</a><br></span><span class="toc"><a href="#faq">Embedded OpenEJB FAQ</a><br></span><span class="toc"><img border="0" height="1" width="15" src="images/dotTrans.gif"><a href="#embedded">What do you mean embedded?</a><br></span><span class="toc"><img border="0" height="1" width="15" src="images/dotTrans.gif"><a href="#openejb.conf">More info on openejb.conf files</a><br></span><br><a name="local.defined"><h2>Say what?! A local server?</h2></a>
<p><span class="bodyBlack">Yes, you read correctly. OpenEJB can be embedded and treated as your very own personal EJB container.</span></p>
<p><span class="bodyBlack">If they can have Local and Remote EJB's, why not Local and Remote EJB Servers too?</span></p>
<p><span class="bodyBlack">Haven't you ever wanted EJBs without the heavy? I mean you need the "heavy" eventually, but not while you're developing. Well, there's the advantage of an EJB implementation that was designed with a very clean and well defined server-container contract, you can cut the server part out completely!</span></p>
<p><span class="bodyBlack">So, if you wish to access ejbs locally and not in client/server
mode, you can do so by embedding
OpenEJB as a library and accessing ejbs through OpenEJB's
built-in IntraVM (Local) Server. Why would someone want to do this?
<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">Your application is a server or other middleware</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">You want to write an app that can be both stand alone <b>and</b> distributed</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">To test your EJBs with JUnit and don't want to start/stop servers and other nonsense</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">Imagine the power from being able to use your IDE debugger to step from your Client all the way into your EJB and back with no remote debugging voodoo.</span></td></tr>
</span></table>
</span></p>
<p><span class="bodyBlack">In this case, your application, test suite, IDE, or client accesses beans as you
would from any other EJB Server. The EJB Server just happens to be running in
the same virtual machine as your application. This EJB Server is thusly called the
IntraVM Server, and, for all intense purposes, your application an IntraVM Client.
</span></p>
<p><span class="bodyBlack">
There are some interesting differences though. The IntraVM Server isn't a heavyweight server as one normally associates with EJB. It doesn't open connections, launch threads for processing requests, introduce complex classloading heirarchies, or any of those "heavy" kind of things. All it does is dish out proxies to your app that can be used to shoot calls right into the EJB Container. Very light, very fast, very easy for testing, debugging, developing, etc.
</span></p>
<a name="local.access"><h2>Accessing EJBs locally</h2></a>
<p><span class="bodyBlack">
Try something like this for a simple IntraVM (Local) Client:
</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\MyEjbApplication.java</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre>
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import FooHome;
public class MyEjbApplication {
public static void main( String args[]) {
try{
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.openejb.client.LocalInitialContextFactory");
InitialContext ctx = new InitialContext(properties);
Object obj = ctx.lookup("my/bean/Foo");
FooHome ejbHome = (FooHome)
PortableRemoteObject.narrow(obj, FooHome.class);
} catch (Exception e){
e.printStackTRace();
}
}
}
</pre></span></td></tr></table>
</span></p>
<p><span class="bodyBlack">
That would be the simplest spec compliant client you could create.
If you don't care about spec compliance and just want to "cheat", you can do this:
</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\MyEjbApplication.java</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre>
import javax.naming.InitialContext;
import FooHome;
public class MyEjbApplication {
public static void main( String args[]) {
try{
FooHome ejbHome = (FooHome)new InitialContext().lookup(
"java:openejb/ejb/my/bean/Foo");
} catch (Exception e){
e.printStackTRace();
}
}
}
</pre></span></td></tr></table>
</span></p>
<p><span class="bodyBlack">
Now keep in mind, that is not spec compliant. Also keep in mind that we provide it
as a convenience, so if there is something you don't like or think should be changed,
send code.
</span></p>
<a name="config"><h2>Passing initialization parameters</h2></a>
<p><span class="bodyBlack">
When accessing OpenEJB in local (intra-vm) mode, the IntraVM server will instantiate
OpenEJB for you. When it instantiates OpenEJB, it puts default values
for the items in the Properties object OpenEJB needs to actually instantiate.
</span></p>
<p><span class="bodyBlack">
If you want to pass OpenEJB specific parameters, you can do this in two ways:
<ol>
<li>Call init yourself before any JNDI calls are made</li>
<li>Pass the parameters in the InitialContext hashtable</li>
</ol>
</span></p>
<p><span class="bodyBlack">
Refer to the <a href="spec.html#openejb.api">OpenEJB Specification</a> for information
on the init method or the parameters you can pass to OpenEJB.
</span></p>
<p><span class="bodyBlack">
Here is an example of passing the initialization parameters in to OpenEJB
via the first InitialContext creation. I stress, this is only applicable the
very first time and InitialContext is created within your Virtual Machine. After
that, OpenEJB will have been initialized and the parameters will be ignored.</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\MyEjbApplication.java</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre>
import FooHome;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
public class MyEjbApplication {
public static void main( String args[]) {
try{
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.openejb.client.LocalInitialContextFactory");
p.put("openejb.home", "c:\\dir\\openejb");
p.put("openejb.configuration",
"c:\\my\\app\\conf\\openejb.conf");
InitialContext ctx = new InitialContext( p );
Object obj = ctx.lookup("my/bean/Foo");
FooHome ejbHome = (FooHome)
PortableRemoteObject.narrow(obj,FooHome.class);
} catch (Exception e){
e.printStackTRace();
}
}
}
</pre></span></td></tr></table>
</span></p>
<a name="openejb.home"><h2>Set the openejb.home variable</h2></a>
<p><span class="bodyBlack">
If you use OpenEJB Local Server, you are actually using OpenEJB as an embedded library.
This means when your application starts, OpenEJB will be starting too, in your virtual
machine. Odds are you will not want to execute your application in the directory where
OpenEJB was installed, but will want to execute your application where you are developing
it. This is fine, but you will need to tell OpenEJB where it was installed. To do this,
set the "openejb.home" system variable.
</span></p>
<p><span class="bodyBlack">
For example, if OpenEJB was unpacked in the directory in c:\dir\openejb, you can
set the openejb.home variable as a java vm flag as follows.
</span></p>
<p><span class="bodyBlack">
<span class="command">c:\my\app&gt; java -Dopenejb.home=c:\dir\openejb MyEjbApplication</span>
</span></p>
<p><span class="bodyBlack">
You can also set the openejb.home variable by calling System.setProperty(...) in your
application before any calls to the OpenEJB Local Server are made.
</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\MyEjbApplication.java</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre>
...
public static void main(String args[]) {
System.setProperty("openejb.home", "c:\\dir\\openejb");
...
}
...
</pre></span></td></tr></table>
</span></p>
<p><span class="bodyBlack">
As mentioned above, you can pass OpenEJB parameters on your first call to
the Local Server.
</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\MyEjbApplication.java</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre>
...
public static void main( String args[]) {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.openejb.client.LocalInitialContextFactory");
p.put("openejb.home", "c:\\dir\\openejb");
InitialContext ctx = new InitialContext( p );
...
}
...
</pre></span></td></tr></table>
</span></p>
<p><span class="bodyBlack">
When OpenEJB is started, it will look for its configuration files
in the OPENJB_HOME/conf directory. The paths to beans in your openejb.conf
file are also resolved relative to the openejb.home variable.
</span></p>
<a name="faq"><h2>Embedded OpenEJB FAQ</h2></a>
<a name="embedded"><h3>What do you mean embedded?</h3></a>
<p><span class="bodyBlack">
When your clients run OpenEJB in the same VM using the IntraVM Server, you're using
OpenEJB as an embedded EJB Server just like InstantDB and Cloudscape are embedded
databases servers. Just like InstantDB and Cloudscape, OpenEJB needs configuration
files and other files to do it's job.
</span></p>
<p><span class="bodyBlack">
OpenEJB is the only EJB server that I know of that you can run as an embedded
library, so the fact that you can even do it is a real feather in our cap. If
anyone knows of another, please tell me.
</span></p>
<p><span class="bodyBlack">
In fact, anyone already using InstantDB or Cloudscape as embedded database servers in a
product could just as easily use OpenEJB as an embedded EJB Server and add instant EJB
support to the product as well. OpenEJB can easily play with InstantDB or Cloudscape, so
it would be pretty slick. This would be extremely useful for IDEs like Visual Cafe,
JBuilder, Visual Age, etc.
</span></p>
<a name="openejb.conf"><h3>More info on openejb.conf files</h3></a>
<p><span class="bodyBlack">
Here is an example of this. The openejb.home variable, which we will refer to as
OPENEJB_HOME, is set to "c:\dir\openejb". The following relative path in your
openejb.conf file will be resolved assuming OPENEJB_HOME as the base path.
</span></p>
<p><span class="bodyBlack">
<table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">openejb.conf</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre>
&lt;openejb&gt;
...
&lt;Deployments dir="beans\" /&gt;
&lt;/openejb&gt;
</pre></span></td></tr></table>
</span></p>
<p><span class="bodyBlack">
The above deployment path, "beans\", would automatically be expanded to
"c:\dir\openejb\beans".
</span></p>
<p><span class="bodyBlack">
If you want tell OpenEJB to look outside the OPENEJB_HOME, then use an absolute
file path as shown below.
</span></p>
<p><span class="bodyBlack">
<table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">openejb.conf</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre>
&lt;openejb&gt;
...
&lt;Deployments dir="beans\" /&gt;
<b>&lt;Deployments dir="c:\my\app\my\beans\" /&gt;</b>
&lt;/openejb&gt;
</pre></span></td></tr></table>
</span></p>
<p><span class="bodyBlack">
OpenEJB can look in any number of directories for beans, just add those
directories to your openejb.conf file as such.
</span></p>
<p><span class="bodyBlack">
<table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">openejb.conf</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre>
&lt;openejb&gt;
...
&lt;Deployments dir="beans\" /&gt;
&lt;Deployments dir="c:\my\app\my\beans\" /&gt;
<b>&lt;Deployments dir="c:\my\special\beans\" /&gt;</b>
<b>&lt;Deployments dir="c:\foo\ejbs\" /&gt;</b>
<b>&lt;Deployments dir="d:\files\ejbjars\" /&gt;</b>
&lt;/openejb&gt;
</pre></span></td></tr></table>
</span></p>
<p><span class="bodyBlack">
Furthermore, you can add jars individually to OpenEJB's deployment path by
naming the jar directly.
</span></p>
<p><span class="bodyBlack">
<table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">openejb.conf</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre>
&lt;openejb&gt;
...
&lt;Deployments dir="beans\" /&gt;
&lt;Deployments dir="c:\my\app\my\beans\" /&gt;
&lt;Deployments dir="c:\my\special\beans\" /&gt;
&lt;Deployments dir="c:\foo\ejbs\" /&gt;
&lt;Deployments dir="d:\files\ejbjars\" /&gt;
<b>&lt;Deployments jar="c:\the\very\special.jar" /&gt;</b>
&lt;/openejb&gt;
</pre></span></td></tr></table>
</span></p>
</td><td align="left" valign="top" height="5" width="120"><img src="images/diagram-local-server.gif" width="240" height="500" border="0"><br>
&nbsp;
</td></tr><tr height="5"><td align="left" valign="top" bgcolor="#7270c2" height="5" width="20">&nbsp;</td><td valign="top" bgcolor="#7270c2" height="5" width="95">&nbsp;</td><td align="left" valign="top" bgcolor="#a9a5de" height="5" width="7">&nbsp;</td><td align="left" valign="top" height="5" width="40">&nbsp;</td><td align="left" valign="top" height="5" width="120">&nbsp;</td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" height="5" width="20">&nbsp;</td><td align="left" valign="top" bgcolor="#7270c2" width="95">&nbsp;</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">&nbsp;</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">&nbsp;</td><td align="left" valign="top" height="100%" width="40">&nbsp;</td><td align="left" valign="top" height="100%" width="120">&nbsp;</td></tr><tr height="5"><td align="left" valign="top" height="25" width="40">&nbsp;</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>&nbsp;<br></small></span><p></p>
&nbsp;
</td><td align="left" valign="top" height="25" width="120">&nbsp;</td></tr></table></body></html>