| <html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>CMP EntityBeans</title><link href="default.css" rel="stylesheet"></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 align="left" valign="top" width="440"><img border="0" height="6" width="440" src="images/top_2.gif"></td><td align="left" valign="top" width="240"><img src="images/top_3.gif" width="240" 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="440"><span class="bodyBlack"><a href="faq.html">FAQ</a></span><img border="0" height="13" width="20" src="images/grayDot.gif"><span class="bodyBlack"><a href="faq_cmp.html">CMP EntityBeans</a></span><br><img border="0" height="2" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" height="20" width="240"> </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="440"><img border="0" height="3" width="440" src="images/line_light.gif"></td><td align="left" valign="top" width="240"><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="440" rowspan="4"><p></p><table width="100%" cellspacing="2" cellpadding="4"><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></td></tr><tr><td><span class="pageTitle"><name>CMP EntityBeans</name></span></td></tr><tr><td><ul><li><span class="toc"><a href="#jdo">What engine does OpenEJB use for CMP persistence?</a></span></li><li><span class="toc"><a href="#cmp.mapping">What is the format for the CMP mapping files?</a></span></li><li><span class="toc"><a href="#cmp.mapping">How are primary keys created for CMP EntityBeans?</a></span></li><li><span class="toc"><a href="#finders">How do I map my CMP finder methods?</a></span></li><li><span class="toc"><a href="#cmp.mapping">Does OpenEJB support EJB-QL?</a></span></li><li><span class="toc"><a href="#cmp.mapping">What is the syntax of OQL?</a></span></li></ul></td></tr><tr><td><a name="jdo"><h2>What engine does OpenEJB use for CMP persistence?</h2></a><answer id="jdo"> |
| <p><span class="bodyBlack"> |
| OpenEJB uses Castor JDO for CMP persistence. The CMP config files are all |
| Castor controlled files (www.castor.org). At the moment, most of the |
| real juicy CMP configuration file information is at the Castor site. |
| There is no difference between configuring a CMP EntityBean in OpenEJB |
| than with any other Castor controlled java object, so anything you learn |
| about Castor's config files will be applicable. |
| </span></p> |
| </answer></td></tr><tr><td><a name="cmp.mapping"><h2>What is the format for the CMP mapping files?</h2></a><answer id="cmp.mapping"> |
| <p><span class="bodyBlack"> |
| The Castor JDO mapping file provides a mechanism for binding a CMP |
| EntityBean deployed in OpenEJB to a relational database model. This is |
| usually referred to as object-to-relational mapping (O/R mapping). O/R |
| mapping bridges the gap between an object model and a relational model. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| The format of these files is <a href="http://www.castor.org/jdo-mapping.html">documented here</a> |
| </span></p> |
| |
| </answer></td></tr><tr><td><a name="cmp.mapping"><h2>How are primary keys created for CMP EntityBeans?</h2></a><answer id="cmp.mapping"> |
| <p><span class="bodyBlack"> |
| The KeyGenerator is responsible for creating the primary key of the |
| records that are inserted by Castor. |
| <a href="http://castor.exolab.org/key-generator.html">More information on |
| that here</a> |
| </span></p> |
| |
| </answer></td></tr><tr><td><a name="finders"><h2>How do I map my CMP finder methods?</h2></a><answer id="finders"> |
| <p><span class="bodyBlack"> |
| You can map your finder methods in the openejb-jar.xml that is created by |
| the deploy tool. Just grab the openejb-jar.xml file from the META-INF |
| directory of your jar and add a 'query' declaration like the one below for |
| all the CMP entities that need them. </span></p> |
| |
| <p><span class="bodyBlack"> |
| After the deployer is run for the first time, using your favourite |
| editor edit openejb-jar.xml file and add your finder select statement |
| in openejb-jar.xml file. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| Repackage your jar file. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| If openejb is already running close currently running openejb instance |
| by telnet localhost 4200 and issuing the stop command and restart openejb. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| Test your program by calling Runit.sh . |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| Whenever deployer is run again for your current application, it will overwrite |
| openejb-jar.xml file. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| Say you had a home interface with the following finder method... |
| </span></p> |
| <p><span class="bodyBlack"> |
| <table width="440" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| package org.acme.employee; |
| |
| ... |
| |
| public interface EmployeeHome extends EJBHome{ |
| |
| ... |
| |
| public Employee findByLastName( String lastName ) |
| throws RemoteException, FinderException; |
| |
| } |
| </pre></span></td></tr></table> |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| ... then that would require a 'query' declaration in your openejb-jar.xml |
| file like this one ... |
| |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| <table width="420" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#c0c0c0"><i><span class="code-title">META-INF/openejb-jar.xml</span></i></td></tr><tr><td bgcolor="#e0e0e0"><span class="code-block"><pre> |
| <ejb-deployment ... |
| <query> |
| <query-method> |
| <method-name>findByLastName</method-name> |
| <method-params> |
| <method-param>java.lang.String</method-param> |
| </method-params> |
| </query-method> |
| <object-ql> |
| SELECT o FROM org.acme.employee.EmployeeBean o WHERE o.lastname = $1 |
| </object-ql> |
| </query> |
| </ejb-deployment> |
| </pre></span></td></tr></table> |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| The 'query' element goes inside an 'ejb-deployment' element, right under |
| any 'resource-link' elements that may be there already. |
| </span></p> |
| |
| </answer></td></tr><tr><td><a name="cmp.mapping"><h2>Does OpenEJB support EJB-QL?</h2></a><answer id="cmp.mapping"> |
| <p><span class="bodyBlack"> |
| No, EJB-QL is an EJB 2.0 CMP feature, so that syntax won't work |
| with OpenEJB as the 2.0 spec isn't yet supported. However... |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| We do support OQL (Object Query Language), which is functionally identical. |
| </span></p> |
| </answer></td></tr><tr><td><a name="cmp.mapping"><h2>What is the syntax of OQL?</h2></a><answer id="cmp.mapping"> |
| <p><span class="bodyBlack"> |
| The syntax of the query statement must be Object Query Language (OQL) |
| compatible as described in the ODMG 3.0 specification section 4.12. OQL |
| is nearly identical to EJB QL, so converting CMP beans from 1.1 to 2.0 |
| will be very easy. |
| </span></p> |
| |
| <p><span class="bodyBlack"> |
| OQL itself is parsed by our persistence engine Castor, see this document |
| for more details on writing OQL statements for use with OpenEJB and |
| Castor. <a href="http://www.castor.org/oql.html">More information on |
| that here</a> |
| |
| </span></p> |
| </answer></td></tr></table></td><td align="left" valign="top" height="5" width="240"> |
| |
| </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="240"> </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"> </td><td align="left" valign="top" width="40"> </td><td align="left" valign="top" width="240"> </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="240"> </td></tr><tr height="5"><td align="left" valign="top" height="25" width="40"> </td><td align="left" valign="bottom" height="25" width="440"><br><br><img height="3" width="440" 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="240"> </td></tr></table></body></html> |