EJB Performance Tuning

For example, you have this relationship defined in the ejb-jar.xml file:

<relationships>

<ejb-relation>

<description>Order-OrderLine</description>

<ejb-relation-name>Order-OrderLine</ejb-relation-name> <ejb-relationship-role>

<ejb-relationship-role-name> Order-has-N-OrderLines </ejb-relationship-role-name>

<multiplicity>One</multiplicity> <relationship-role-source>

<ejb-name>OrderEJB</ejb-name> </relationship-role-source> <cmr-field>

<cmr-field-name>orderLines</cmr-field-name> <cmr-field-type>java.util.Collection</cmr-field-type>

</cmr-field> </ejb-relationship-role>

</ejb-relation> </relationships>

When a particular Order is loaded, you can load its related OrderLines by adding this to the sun-cmp-mapping.xml file for the application:

<entity-mapping> <ejb-name>Order</ejb-name> <table-name>...</table-name> <cmp-field-mapping>...</cmp-field-mapping> <cmr-field-mapping>

<cmr-field-name>orderLines</cmr-field-name> <column-pair>

<column-name>OrderTable.OrderID</column-name> <column-name>OrderLineTable.OrderLine_OrderID</column-name>

</column-pair> <fetched-with>

<default> </fetched-with>

</cmr-field-mapping> </entity-mappping>

Now when an Order is retrieved, the CMP engine issues SQL to retrieve all related OrderLines with a SELECT statement that has the following WHERE clause:

OrderTable.OrderID = OrderLineTable.OrderLine_OrderID

This clause indicates an outer join. These OrderLines are pre-fetched.

Chapter 2 • Tuning Your Application

45

Page 45
Image 45
Sun Microsystems 820434310 manual OrderTable.OrderID = OrderLineTable.OrderLineOrderID