Overview

General

Configuration

Servers

Integrations

Community

Feeds


Site
News
   



Castor CMP [ edit ]

What engine does OpenEJB use for CMP persistence?

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.

What is the format for the CMP mapping files?

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.

The format of these files is documented here

How are primary keys created for CMP EntityBeans?

The KeyGenerator is responsible for creating the primary key of the records that are inserted by Castor. [More information on
that here|http://castor.exolab.org/key-generator.html]

How do I map my CMP finder methods?

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.

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.

Repackage your jar file.

If openejb is already running close currently running openejb instance by telnet localhost 4200 and issuing the stop command and restart openejb.

Test your program by calling Runit.sh .

Whenever deployer is run again for your current application, it will overwrite openejb-jar.xml file.

Say you had a home interface with the following finder method...

package org.acme.employee;

...

public interface EmployeeHome extends EJBHome{
  
  ...
  
  public Employee findByLastName( String lastName ) 
         throws RemoteException, FinderException; 
         
}

... then that would require a 'query' declaration in your openejb-jar.xml file like this one ...

META-INF/openejb-jar.xml
<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>

The 'query' element goes inside an 'ejb-deployment' element, right under any 'resource-link' elements that may be there already.

Does OpenEJB support EJB-QL?

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...

We do support OQL (Object Query Language), which is functionally identical.

What is the syntax of OQL?

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.

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. More information on that here

         
     
     
     
 


Apache OpenEJB is an project of The Apache Software Foundation (ASF)
 
Powered by Atlassian Confluence.