| <html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Setting up Tomcat with OpenEJB -- |
| Leveraging J2EE JNDI principles</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">Setting up Tomcat with OpenEJB</span><br><span class="pageSubTitle">Leveraging J2EE JNDI principles</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="#abstract">Abstract</a><br></span><span class="toc"><a href="#intro">Before we start</a><br></span><span class="toc"><a href="#ejb-ref">Referencing EJBs in web application</a><br></span><span class="toc"><a href="#install">Installing OpenEJB's EJB factory in Tomcat</a><br></span><span class="toc"><a href="#example">Example application</a><br></span><br><a name="abstract"><h2>Abstract</h2></a> |
| <p><span class="bodyBlack"> |
| Java 2 Enterprise Edition (J2EE) provides several technologies that lets build |
| J2EE-compliant applications that can be run in any J2EE-compliant application server. |
| One of the several technologies is Java Naming and Directory Interface (JNDI). |
| JNDI is a technology that provides a unified access |
| to different naming and directory services. Regardless of the underlaying service, |
| if it supports JNDI a client doesn't have to know what exactly application it's to talk to |
| other than it adheres to JNDI concepts and interfaces. |
| </span></p> |
| <p><span class="bodyBlack"> |
| OpenEJB and Tomcat can complement each other in fullfiling J2EE principles. OpenEJB is |
| an EJB container whereas Tomcat is a servlet container. Although they serve different |
| clients, both products use JNDI extensively. Obviously, either container provides different JNDI "views" |
| of its managed components. The question pertaining to the integration is how to tie |
| the different naming systems so that when a client requests an object from Tomcat naming space, |
| Tomcat will know that it needs to pass the request along to OpenEJB naming space. |
| That's what the object factory is to solve out. |
| </span></p> |
| <p><span class="bodyBlack"> |
| While reading JNDI specification you can come across the interface: |
| <a href="http://java.sun.com/j2se/1.4.1/docs/api/javax/naming/spi/ObjectFactory.html"> |
| javax.naming.spi.ObjectFactory</a>. The javadoc of the interface reads: |
| </span></p> |
| <hr noshadow="" size="1"><span class="bodyGrey"> |
| This interface represents a factory for creating an object. |
| <br> |
| <br> |
| The JNDI framework allows for object implementations to be loaded in dynamically via object factories. |
| For example, when looking up a printer bound in the name space, |
| if the print service binds printer names to References, the printer Reference |
| could be used to create a printer object, so that the caller of lookup can |
| directly operate on the printer object after the lookup. |
| <hr noshadow="" size="1"></span> |
| |
| <p><span class="bodyBlack"> |
| Theorically, it seems to be possible to create a web application that makes use of EJBs, |
| deploy these EJBs in OpenEJB, and the web application in Tomcat, set up an object factory |
| and finally boot it up. The following sections are to outline what exactly the steps are in OpenEJB and Tomcat |
| with description of why they are required at all. |
| </span></p> |
| |
| <a name="intro"><h2>Before we start</h2></a> |
| |
| <p><span class="bodyBlack"> |
| Before we start, ensure that OpenEJB and Tomcat are in appropriate releases. |
| </span></p> |
| <table bgcolor="#7270c2" width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#7270c2"><span class="note-caption"> NOTE</span></td></tr><tr><td bgcolor="#7270c2"><table bgcolor="#7270c2" width="100%" cellspacing="2" cellpadding="7" border="0"><tr><td bgcolor="#FFFFFF"><span class="note"> |
| What follows should be doable on any Tomcat 4.x or 5.x release. The author |
| tested it under Jakarta Tomcat 4.1.18 and 5.0.27 (the most recent public release at |
| that time). |
| </span></td></tr></table></td></tr></table> |
| <br> |
| <table bgcolor="#7270c2" width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#7270c2"><span class="note-caption"> NOTE</span></td></tr><tr><td bgcolor="#7270c2"><table bgcolor="#7270c2" width="100%" cellspacing="2" cellpadding="7" border="0"><tr><td bgcolor="#FFFFFF"><span class="note"> |
| It's assumed that Tomcat and OpenEJB are already installed and running properly |
| as a separate products. |
| </span></td></tr></table></td></tr></table> |
| |
| <a name="ejb-ref"><h2>Referencing EJBs in web application</h2></a> |
| <p><span class="bodyBlack">J2EE 1.3 specification says (page 57):</span></p> |
| <p><span class="bodyBlack"> |
| <hr noshadow="" size="1"><span class="bodyGrey"> |
| The Application Component Provider must declare all the EJB references |
| using the ejb-ref elements of the deployment descriptor. This allows the consumer |
| of the application component's jar file (the Application Assembler or Deployer) to |
| discover all the EJB references used by the application component. |
| <hr noshadow="" size="1"></span> |
| </span></p> |
| <p><span class="bodyBlack"> |
| It means that each time a web application needs to reference a bean, the bean has to be declared in |
| the web application's deployment descriptor ( |
| <i>/WEB-INF/web.xml</i> file). The element which does so |
| is |
| <i>ejb-ref</i>. |
| Although most containers don't enforce that approach, it's always better to describe dependencies in |
| a standard, J2EE-compliant way, in the deployment descriptor of the corresponding components. |
| </span></p> |
| <table bgcolor="#7270c2" width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#7270c2"><span class="note-caption"> NOTE</span></td></tr><tr><td bgcolor="#7270c2"><table bgcolor="#7270c2" width="100%" cellspacing="2" cellpadding="7" border="0"><tr><td bgcolor="#FFFFFF"><span class="note"> |
| Tomcat won't refuse to activate the components even if they reference EJBs with no declaration in |
| the deployment descriptors. |
| </span></td></tr></table></td></tr></table> |
| <p><span class="bodyBlack"> |
| Our example's web application declares the referenced bean in the deployment descriptor |
| ( |
| <i>/WEB-INF/web.xml</i>) as follows: |
| </span></p> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| |
| <ejb-ref> |
| <description> |
| EJB Reference to the bean deployed to OpenEJB |
| </description> |
| <ejb-ref-name>ejb/hello</ejb-ref-name> |
| <ejb-ref-type>Session</ejb-ref-type> |
| <home>org.acme.HelloHome</home> |
| <remote>org.acme.Hello</remote> |
| </ejb-ref></pre></span></td></tr></table> |
| <p><span class="bodyBlack"> |
| Here goes a JSP that uses the ejb-ref-name to get a reference to the declared 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">openejb.jsp</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| |
| <%@ page import="org.acme.HelloObject, |
| org.acme.HelloHome, |
| javax.naming.InitialContext, |
| javax.naming.Context"%> |
| |
| <html> |
| <head> |
| <title>OpenEJB -- EJB for Tomcat</title> |
| </head> |
| |
| <body> |
| <% |
| Context initCtx = new InitialContext(); |
| |
| Object object = initCtx.lookup("java:comp/env/ejb/hello"); |
| HelloHome helloHome = (HelloHome) |
| javax.rmi.PortableRemoteObject.narrow(object, HelloHome.class); |
| HelloObject bean = helloHome.create(); |
| %> |
| <%= bean.sayHello() %> |
| </body> |
| </html></pre></span></td></tr></table> |
| </span></p> |
| <p><span class="bodyBlack"> |
| As it's shown in the sample JSP above, there is no direct reference to the EJB container to be used. |
| The application component provider doesn't have to know what container the EJB is to be deployed to. |
| What it does have to ascertain is that the name the JSP uses is actually an ejb reference. Moreover, the reference |
| should be the one to HelloHome home interface or otherwise the application will fail. |
| </span></p> |
| <a name="install"><h2>Installing OpenEJB's EJB factory in Tomcat</h2></a> |
| <table bgcolor="#7270c2" width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#7270c2"><span class="note-caption"> NOTE</span></td></tr><tr><td bgcolor="#7270c2"><table bgcolor="#7270c2" width="100%" cellspacing="2" cellpadding="7" border="0"><tr><td bgcolor="#FFFFFF"><span class="note"> |
| <b>CATALINA_HOME</b> environment variable points to the directory where Jakarta Tomcat 4.x has |
| been installed. |
| </span></td></tr></table></td></tr></table> |
| <p><span class="bodyBlack">The J2EE 1.3 specification says (page 56):</span></p> |
| <p><span class="bodyBlack"> |
| <hr noshadow="" size="1"><span class="bodyGrey"> |
| The Deployer binds the EJB references to the enterprise bean's homes |
| in the target operational environment. |
| <hr noshadow="" size="1"></span> |
| </span></p> |
| <p><span class="bodyBlack"> |
| It means that after an Application Component Provider (in the document, it's you) has created a web application |
| and specified an EJB reference in the deployment descriptor, a deployer (you, too) has to bind the reference |
| in Tomcat. The task boils down to put appropriate entry in Tomcat's configuration file. |
| </span></p> |
| <p><span class="bodyBlack"> |
| Tomcat's default configuration file is |
| <i>server.xml</i> in |
| <i>$CATALINA_HOME/conf</i> directory. According to server.xml's documentation it's possible to |
| create an appropriate definition of a factory and let the factory to handle requests for the objects it |
| is registered to handle. That's what OpenEJB's EJB factory does. It intercepts messages for EJBs, passes it along |
| to OpenEJB and returns requested bean. |
| </span></p> |
| <p><span class="bodyBlack"> |
| Tomcat registers resource factories in |
| <i>GlobalNamingResources</i> or |
| <i>Context</i> |
| elements which demarcate the name space of different web applications. |
| </span></p> |
| <p><span class="bodyBlack"> |
| <table bgcolor="#7270c2" width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#7270c2"><span class="note-caption"> NOTE</span></td></tr><tr><td bgcolor="#7270c2"><table bgcolor="#7270c2" width="100%" cellspacing="2" cellpadding="7" border="0"><tr><td bgcolor="#FFFFFF"><span class="note"> |
| It's recommended to place resource definitions within Context elements, which prevents name clashes |
| to occur when the same names are to point to different resources (e.g. EJBs). |
| </span></td></tr></table></td></tr></table> |
| </span></p> |
| <p><span class="bodyBlack"> |
| The following snippet shows the elements necessary to register the EJB reference, which has been defined |
| in the web application's deployment descriptor. The document doesn't describe the particular elements of |
| server.xml file other than |
| <i>ResourceParams</i> parameters. |
| The reader shall read the |
| <a href-="">Tomcat documentation</a> to get acquainted with the file's structure. |
| </span></p> |
| <p><span class="bodyBlack"> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">$CATALINA_HOME/conf/server.xml</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| |
| <Server> |
| ... |
| <Context path=...> |
| ... |
| <Ejb name="ejb/hello" |
| type="Session" |
| home="org.acme.HelloHome" |
| remote="org.acme.Hello"/> |
| <ResourceParams name="ejb/hello"> |
| <parameter> |
| <name>factory</name> |
| <value>org.openejb.client.TomcatEjbFactory</value> |
| </parameter> |
| <parameter> |
| <name>openejb.naming.factory.initial</name> |
| <value>org.openejb.client.LocalInitialContextFactory</value> |
| </parameter> |
| <parameter> |
| <name>openejb.naming.security.principal</name> |
| <value>username</value> |
| </parameter> |
| <parameter> |
| <name>openejb.naming.security.credentials</name> |
| <value>password</value> |
| </parameter> |
| <parameter> |
| <name>openejb.naming.provider.url</name> |
| <value>localhost:4201</value> |
| </parameter> |
| <parameter> |
| <name>openejb.ejb-link</name> |
| <value>Hello</value> |
| </parameter> |
| </ResourceParams> |
| </Context> |
| ... |
| </Server></pre></span></td></tr></table> |
| </span></p> |
| <p><span class="bodyBlack"> |
| ResourceParams parameters consitute a bean reference. They inform Tomcat about who will know how to handle |
| requests for the bean. |
| <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"> |
| <b>factory</b> - (mandatory) the class instantiated by Tomcat when a request for a bean has arrived; |
| it must be |
| <b>org.openejb.client.TomcatEjbFactory</b> if the request ought to be handed over to OpenEJB. |
| </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"> |
| <b>openejb.naming.factory.initial</b> - (mandatory) OpenEJB JNDI InitialContext implementation; |
| the parameter may be assigned to one of the two values: |
| <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"> |
| <b>org.openejb.client.LocalInitialContextFactory</b> - OpenEJB is started in the same JVM as Tomcat; |
| it boosts performance drastically as the beans are in the same JVM as a client (e.g. a web application); it boots up |
| OpenEJB in the local mode - an Local (aka IntraVM) Server instance |
| </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"> |
| <b>org.openejb.client.RemoteInitialContextFactory</b> - OpenEJB is started outside of the current JVM; |
| all calls are forwarded to a OpenEJB Remote Server instance |
| </span></td></tr> |
| </span></table> |
| </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"> |
| <b>openejb.ejb-link</b> - (mandatory) the bean's name to be looked up in OpenEJB; the name doesn't |
| have to be the same as the reference's name in Tomcat; it's the name the bean may be found in OpenEJB |
| JNDI name space. |
| </span></td></tr> |
| </span></table> |
| </span></p> |
| <p><span class="bodyBlack"> |
| The following parameters are only required when |
| <b>openejb.naming.factory.initial</b> is set to |
| <b>org.openejb.client.RemoteInitialContextFactory</b>. |
| <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"> |
| <b>openejb.naming.security.principal</b> - the name of the user who is allowed to access |
| the JNDI context |
| </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"> |
| <b>openejb.naming.security.credentials</b> - the password of the user who is set up in |
| openejb.naming.security.principal parameter |
| </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"> |
| <b>openejb.naming.provider.url</b> - the server and port OpenEJB handles remote requests |
| </span></td></tr> |
| </span></table> |
| </span></p> |
| <p><span class="bodyBlack"> |
| The |
| <b>factory</b> parameter indicates the class which passes a request for a bean to OpenEJB instance. |
| In order for the class to be instantiated by Tomcat, OpenEJB Loader has to be installed. The Loader takes |
| care of loading necessary classes from OpenEJB directory. It finds the directory relying upon |
| <b>OPENEJB_HOME</b> environament variable. |
| </span></p> |
| <p><span class="bodyBlack"> |
| Create a file named setenv.sh (or setenv.bat on MS Windows) in $CATALINA_HOME/bin directory with the following |
| content: |
| </span></p> |
| <p><span class="bodyBlack"> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">$CATALINA_HOME/bin/setenv.sh</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| |
| export CATALINA_OPTS="-Dopenejb.home=$OPENEJB_HOME"</pre></span></td></tr></table> |
| </span></p> |
| <p><span class="bodyBlack"> |
| Finally, add the OpenEJB Loader to Tomcat. |
| </span></p> |
| <p><span class="bodyBlack"> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| |
| $ cp $OPENEJB_HOME/dist/openejb_loader-0.9.0.war webapps/</pre></span></td></tr></table> |
| </span></p> |
| <p><span class="bodyBlack"> |
| That's it. Tomcat is now fully configured to work with OpenEJB. Don't forget to start up OpenEJB instance |
| if the factory's been configured with RemoteInitialContextFactory. |
| </span></p> |
| <a name="example"><h2>Example application</h2></a> |
| <p><span class="bodyBlack"> |
| You can use the OpenEJB Hello World as an |
| example EJB to test things out. You won't |
| need to do anything differently. Deploy |
| the myHelloEjb.jar just as described in |
| <a href="http://www.openejb.org/hello-world.html" target="_blank">http://www.openejb.org/hello-world.html</a> |
| </span></p> |
| <p><span class="bodyBlack"> |
| Register the factory in Tomcat by editing server.xml, i.e. add the above Ejb element declaration |
| between Context's tags of Tomcat's default <i>example</i> web application. Place the JSP - openejb.jsp - |
| in $CATALINA_HOME/webapps/examples directory. |
| </span></p> |
| <p><span class="bodyBlack">Start up Tomcat and enter <a href="http://localhost:8080/examples/openejb.jsp" target="_blank">http://localhost:8080/examples/openejb.jsp</a>. As a result, you should |
| see "Hello World!!!!!" on the screen. |
| </span></p> |
| <p><span class="bodyBlack">Tomcat should print out the following on its console (note OpenEJB messages about its startup):</span></p> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| Using CATALINA_BASE: C:\_Jacek\apps\jakarta-tomcat-4.1.18 |
| Using CATALINA_HOME: C:\_Jacek\apps\jakarta-tomcat-4.1.18 |
| Using CATALINA_TMPDIR: C:\_Jacek\apps\jakarta-tomcat-4.1.18\temp |
| Using JAVA_HOME: C:\_JACEK\APPS\JDK1.3.1 |
| [INFO] Registry - -Loading registry information |
| [INFO] Registry - -Creating new Registry instance |
| [INFO] Registry - -Creating MBeanServer |
| [INFO] Http11Protocol - -Initializing Coyote HTTP/1.1 on port 8080 |
| Starting service Tomcat-Standalone |
| Apache Tomcat/4.1.18 |
| OpenEJB 0.9.0 build: 20030118-2205 |
| http://openejb.sf.net |
| [INFO] Http11Protocol - -Starting Coyote HTTP/1.1 on port 8080 |
| [INFO] ChannelSocket - -JK2: ajp13 listening on 0.0.0.0/0.0.0.0:8009 |
| [INFO] JkMain - -Jk running ID=0 time=30/241 |
| config=C:\_Jacek\apps\jakarta-tomcat-4.1.18\conf\jk2.properties</pre></span></td></tr></table> |
| </td><td align="left" valign="top" height="5" width="120"><img src="images/diagram-tomcat-adapter.gif" width="240" height="500" border="0"><br> |
| |
| |
| |
| </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> |