blob: c0bcb08a335ec15ba6f3c4ebaabc83e9b1b14774 [file] [log] [blame]
<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">&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="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">&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="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>
&lt;ejb-deployment ...
&lt;query&gt;
&lt;query-method&gt;
&lt;method-name&gt;findByLastName&lt;/method-name&gt;
&lt;method-params&gt;
&lt;method-param&gt;java.lang.String&lt;/method-param&gt;
&lt;/method-params&gt;
&lt;/query-method&gt;
&lt;object-ql&gt;
SELECT o FROM org.acme.employee.EmployeeBean o WHERE o.lastname = $1
&lt;/object-ql&gt;
&lt;/query&gt;
&lt;/ejb-deployment&gt;
</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">
&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="240">&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">&nbsp;</td><td align="left" valign="top" width="40">&nbsp;</td><td align="left" valign="top" width="240">&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="240">&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="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>&nbsp;<br></small></span><p></p>
&nbsp;
</td><td align="left" valign="top" height="25" width="240">&nbsp;</td></tr></table></body></html>