<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC
   "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
   "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar>
   <enterprise-beans>
      <entity>
         <description>User</description>
         <ejb-name>UserEJB</ejb-name>
         <home>org.jboss.test.cmp2.commerce.UserHome</home>
         <remote>org.jboss.test.cmp2.commerce.User</remote>
         <local-home>org.jboss.test.cmp2.commerce.UserLocalHome</local-home>
         <local>org.jboss.test.cmp2.commerce.UserLocal</local>
         <ejb-class>org.jboss.test.cmp2.commerce.UserBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.String</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>user</abstract-schema-name>
         <cmp-field><field-name>userId</field-name></cmp-field>
         <cmp-field><field-name>userName</field-name></cmp-field>
         <cmp-field><field-name>email</field-name></cmp-field>
         <cmp-field><field-name>sendSpam</field-name></cmp-field>
         <primkey-field>userId</primkey-field>
         <query>
            <description>
               Find the user with the specified name.
            </description>
            <query-method>
               <method-name>findByUserName</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
               </method-params>
            </query-method>
            <ejb-ql>
               select object(U)
               from user u
               where U.userName = ?1
            </ejb-ql>
         </query>
         <query>
            <description>
               Find all users
            </description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(u)
               FROM user U
            </ejb-ql>
         </query>
         <query>
            <description>
               Find the user with the specified name.
            </description>
            <query-method>
               <method-name>findAllByUserName</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
               </method-params>
            </query-method>
            <ejb-ql>
               select object(U)
               from user u
               where U.userName = ?1
            </ejb-ql>
         </query>
         <query>
            <description>
               This is just a place holder. Overriden with declared-sql
            </description>
            <query-method>
               <method-name>ejbSelectUserIds</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(u)
               FROM user u
            </ejb-ql>
         </query>
      </entity>
      <entity>
         <description>Customer</description>
         <ejb-name>CustomerEJB</ejb-name>
         <home>org.jboss.test.cmp2.commerce.CustomerHome</home>
         <remote>org.jboss.test.cmp2.commerce.Customer</remote>
         <local-home>org.jboss.test.cmp2.commerce.CustomerLocalHome</local-home>
         <local>org.jboss.test.cmp2.commerce.CustomerLocal</local>
         <ejb-class>org.jboss.test.cmp2.commerce.CustomerBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.Long</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>Customer</abstract-schema-name>
         <cmp-field><field-name>id</field-name></cmp-field>
         <cmp-field><field-name>name</field-name></cmp-field>
         <primkey-field>id</primkey-field>
         <ejb-local-ref>
            <ejb-ref-name>ejb/UserLocal</ejb-ref-name>
            <ejb-ref-type>Entity</ejb-ref-type>
            <local-home>org.jboss.test.cmp2.commerce.UserLocalHome</local-home>
            <local>org.jboss.test.cmp2.commerce.UserLocal</local>
            <ejb-link>UserEJB</ejb-link>
         </ejb-local-ref>
         <ejb-ref>
            <ejb-ref-name>ejb/User</ejb-ref-name>
            <ejb-ref-type>Entity</ejb-ref-type>
            <home>org.jboss.test.cmp2.commerce.UserHome</home>
            <remote>org.jboss.test.cmp2.commerce.User</remote>
            <ejb-link>UserEJB</ejb-link>
         </ejb-ref>
         <query>
            <description>
               Find all Customers
            </description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(c)
               FROM Customer c
            </ejb-ql>
         </query>
         <query>
            <description>
               find the customer with the specified name.
            </description>
            <query-method>
               <method-name>findByName</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
               </method-params>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(c)
               FROM Customer c
               WHERE c.name = ?1
            </ejb-ql>
         </query>
         <query>
            <description>
               Select the addresses in CA for the customer with the
               specified id.
            </description>
            <query-method>
               <method-name>ejbSelectAddressesInCAForCustomer</method-name>
               <method-params>
                  <method-param>java.lang.Long</method-param>
               </method-params>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(a)
               FROM Customer c, IN (c.addresses) AS a
               WHERE c.id = ?1 AND a.state='CA'
            </ejb-ql>
         </query>
      </entity>
      <entity>
         <description>Order</description>
         <ejb-name>OrderEJB</ejb-name>
         <local-home>org.jboss.test.cmp2.commerce.OrderHome</local-home>
         <local>org.jboss.test.cmp2.commerce.Order</local>
         <ejb-class>org.jboss.test.cmp2.commerce.OrderBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.Long</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>OrderX</abstract-schema-name>
         <cmp-field><field-name>ordernumber</field-name></cmp-field>
         <cmp-field><field-name>orderStatus</field-name></cmp-field>
         <cmp-field><field-name>creditCard</field-name></cmp-field>
         <primkey-field>ordernumber</primkey-field>
         <query>
            <query-method>
               <method-name>ejbSelectGeneric</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.Object[]</method-param>
               </method-params>
            </query-method>
            <ejb-ql/>
         </query>
         <query>
            <query-method>
               <method-name>ejbSelectLazy</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.Object[]</method-param>
               </method-params>
            </query-method>
            <ejb-ql/>
         </query>
         <query>
            <description>
               Find all Orderd
            </description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(o)
               FROM OrderX o
            </ejb-ql>
         </query>
         <query>
            <description>
               Find the orders with the specified status.
            </description>
            <query-method>
               <method-name>findByStatus</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
               </method-params>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(o)
               FROM OrderX o
               WHERE o.orderStatus = ?1
            </ejb-ql>
         </query>
         <query>
            <description>
               Search all orders shipped to CA
            </description>
            <query-method>
               <method-name>ejbSelectOrdersShippedToCA</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(o)
               FROM OrderX o
               WHERE o.shippingAddress.state = 'CA'
            </ejb-ql>
         </query>
         <query>
            <description>
               Place holder. Overriden with declared-sql.
            </description>
            <query-method>
               <method-name>ejbSelectOrdersShippedToCA2</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(o)
               FROM OrderX o
               WHERE o.shippingAddress.state = 'XXXXX'
            </ejb-ql>
         </query>
         <query>
            <description>
               Search all states orders have been shipped to
            </description>
            <query-method>
               <method-name>ejbSelectOrderShipToStates</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT O.shippingAddress.state
               FROM OrderX o
            </ejb-ql>
         </query>
         <query>
            <description>
               Place holder. Overriden with declared-sql.
            </description>
            <query-method>
               <method-name>ejbSelectOrderShipToStates2</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT o.shippingAddress.state
               FROM OrderX o
               WHERE o.shippingAddress.state = 'XXXXX'
            </ejb-ql>
         </query>
         <query>
            <description>
               Gets all known addresses in CA
            </description>
            <query-method>
               <method-name>ejbSelectAddressesInCA</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(a)
               FROM Address a
               WHERE a.state = 'CA'
            </ejb-ql>
         </query>
         <query>
            <description>
               Place holder. Overriden with declared-sql.
            </description>
            <query-method>
               <method-name>ejbSelectAddressesInCA2</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(a)
               FROM Address a
               WHERE a.state = 'CAXXXXX'
            </ejb-ql>
         </query>
         <query>
            <query-method>
               <method-name>findDoubleJoin</method-name>
               <method-params>
                  <method-param>int</method-param>
                  <method-param>int</method-param>
               </method-params>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(o)
               FROM OrderX o, IN(o.lineItems) l1, IN(o.lineItems) l2
               WHERE l1.quantity = ?1 AND l2.quantity = ?2
            </ejb-ql>
         </query>
         <query>
            <query-method>
               <method-name>findWithLimitOffset</method-name>
               <method-params>
                  <method-param>int</method-param>
                  <method-param>int</method-param>
               </method-params>
            </query-method>
            <ejb-ql><!-- define in jbosscmp --></ejb-ql>
         </query>
      </entity>
      <entity>
         <description>Address</description>
         <ejb-name>AddressEJB</ejb-name>
         <local-home>org.jboss.test.cmp2.commerce.AddressHome</local-home>
         <local>org.jboss.test.cmp2.commerce.Address</local>
         <ejb-class>org.jboss.test.cmp2.commerce.AddressBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.Long</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>Address</abstract-schema-name>
         <cmp-field><field-name>id</field-name></cmp-field>
         <cmp-field><field-name>street</field-name></cmp-field>
         <cmp-field><field-name>city</field-name></cmp-field>
         <cmp-field><field-name>state</field-name></cmp-field>
         <cmp-field><field-name>zip</field-name></cmp-field>
         <cmp-field><field-name>zipPlus4</field-name></cmp-field>
         <primkey-field>id</primkey-field>
         <query>
            <description>
               Find all address
            </description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(a)
               FROM Address a
            </ejb-ql>
         </query>
         <query>
            <query-method>
               <method-name>findByOrdernumber</method-name>
               <method-params>
                  <method-param>long</method-param>
               </method-params>
            </query-method>
            <ejb-ql>select o.shippingAddress from OrderX o where o.ordernumber=?1</ejb-ql>
         </query>
         <query>
            <query-method>
               <method-name>ejbSelectAddresses</method-name>
               <method-params>
                  <method-param>int</method-param>
               </method-params>
            </query-method>
            <ejb-ql><![CDATA[select object(o) from Address o where o.zip=?1]]></ejb-ql>
         </query>
         <query>
            <query-method>
               <method-name>ejbSelectAddresses</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
               </method-params>
            </query-method>
            <ejb-ql><![CDATA[select object(o) from Address o where o.street=?1]]></ejb-ql>
         </query>
      </entity>
      <entity>
         <description>Order Line Item</description>
         <ejb-name>LineItemEJB</ejb-name>
         <local-home>org.jboss.test.cmp2.commerce.LineItemHome</local-home>
         <local>org.jboss.test.cmp2.commerce.LineItem</local>
         <ejb-class>org.jboss.test.cmp2.commerce.LineItemBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.Long</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>LineItem</abstract-schema-name>
         <cmp-field><field-name>id</field-name></cmp-field>
         <cmp-field><field-name>quantity</field-name></cmp-field>
         <cmp-field><field-name>shipped</field-name></cmp-field>
         <primkey-field>id</primkey-field>
         <query>
            <description>
               Find all LineItems
            </description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(l)
               FROM LineItem l
            </ejb-ql>
         </query>
      </entity>
      <entity>
         <description>Models a Product</description>
         <ejb-name>ProductEJB</ejb-name>
         <local-home>org.jboss.test.cmp2.commerce.ProductHome</local-home>
         <local>org.jboss.test.cmp2.commerce.Product</local>
         <ejb-class>org.jboss.test.cmp2.commerce.ProductBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.Long</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>Product</abstract-schema-name>
         <cmp-field><field-name>id</field-name></cmp-field>
         <cmp-field><field-name>name</field-name></cmp-field>
         <cmp-field><field-name>type</field-name></cmp-field>
         <cmp-field><field-name>unit</field-name></cmp-field>
         <cmp-field><field-name>costPerUnit</field-name></cmp-field>
         <cmp-field><field-name>weight</field-name></cmp-field>
         <cmp-field><field-name>length</field-name></cmp-field>
         <cmp-field><field-name>girth</field-name></cmp-field>
         <primkey-field>id</primkey-field>
         <query>
            <description>
               Find all Products
            </description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(p)
               FROM Product p
            </ejb-ql>
         </query>
         <query>
            <description>
               Find the products with the specified name.
            </description>
            <query-method>
               <method-name>findByName</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
               </method-params>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(p)
               FROM Product p
               WHERE p.name = ?1
            </ejb-ql>
         </query>
      </entity>
      <entity>
         <description>Models a ProductCategory</description>
         <ejb-name>ProductCategoryEJB</ejb-name>
         <local-home>org.jboss.test.cmp2.commerce.ProductCategoryHome</local-home>
         <local>org.jboss.test.cmp2.commerce.ProductCategory</local>
         <ejb-class>org.jboss.test.cmp2.commerce.ProductCategoryBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>org.jboss.test.cmp2.commerce.CompositeId</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>ProductCategory</abstract-schema-name>
         <cmp-field><field-name>id</field-name></cmp-field>
         <cmp-field><field-name>subId</field-name></cmp-field>
         <cmp-field><field-name>name</field-name></cmp-field>
         <query>
            <description>
               Find all ProductCategorys
            </description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(pc)
               FROM ProductCategory pc
            </ejb-ql>
         </query>
      </entity>
      <entity>
         <description>A copy of ProductCategory used for batch-cascade-delete testing</description>
         <ejb-name>ProductCategoryBatchDeleteEJB</ejb-name>
         <local-home>org.jboss.test.cmp2.commerce.ProductCategoryHome</local-home>
         <local>org.jboss.test.cmp2.commerce.ProductCategory</local>
         <ejb-class>org.jboss.test.cmp2.commerce.ProductCategoryBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>org.jboss.test.cmp2.commerce.CompositeId</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>ProductCategoryBatchDelete</abstract-schema-name>
         <cmp-field><field-name>id</field-name></cmp-field>
         <cmp-field><field-name>subId</field-name></cmp-field>
         <cmp-field><field-name>name</field-name></cmp-field>
         <query>
            <description>
               Find all ProductCategorys
            </description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params/>
            </query-method>
            <ejb-ql>
               SELECT OBJECT(pc)
               FROM ProductCategoryBatchDelete pc
            </ejb-ql>
         </query>
      </entity>
      <entity>
         <description>Models a ProductCategoryType</description>
         <ejb-name>ProductCategoryTypeEJB</ejb-name>
         <local-home>org.jboss.test.cmp2.commerce.ProductCategoryTypeHome</local-home>
         <local>org.jboss.test.cmp2.commerce.ProductCategoryType</local>
         <ejb-class>org.jboss.test.cmp2.commerce.ProductCategoryTypeBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.Long</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>ProductCategoryType</abstract-schema-name>
         <cmp-field><field-name>id</field-name></cmp-field>
         <cmp-field><field-name>name</field-name></cmp-field>
         <primkey-field>id</primkey-field>
      </entity>
      <entity>
         <description>A copy of ProductCategoryType used for batch-cascade-delete testing</description>
         <ejb-name>ProductCategoryTypeBatchDeleteEJB</ejb-name>
         <local-home>org.jboss.test.cmp2.commerce.ProductCategoryTypeHome</local-home>
         <local>org.jboss.test.cmp2.commerce.ProductCategoryType</local>
         <ejb-class>org.jboss.test.cmp2.commerce.ProductCategoryTypeBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.Long</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>ProductCategoryTypeBatchDelete</abstract-schema-name>
         <cmp-field><field-name>id</field-name></cmp-field>
         <cmp-field><field-name>name</field-name></cmp-field>
         <primkey-field>id</primkey-field>
      </entity>
      <session>
         <ejb-name>TxTesterEJB</ejb-name>
         <local-home>org.jboss.test.cmp2.commerce.TxTesterHome</local-home>
         <local>org.jboss.test.cmp2.commerce.TxTester</local>
         <ejb-class>org.jboss.test.cmp2.commerce.TxTesterBean</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Container</transaction-type>
      </session>
      <session>
         <description>JUnit Session Bean Test Runner</description>
         <ejb-name>EJBTestRunnerEJB</ejb-name>
         <home>org.jboss.test.util.ejb.EJBTestRunnerHome</home>
         <remote>org.jboss.test.util.ejb.EJBTestRunner</remote>
         <ejb-class>org.jboss.test.util.ejb.EJBTestRunnerBean</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Bean</transaction-type>
      </session>
      <entity>
         <ejb-name>AutoNumberEJB</ejb-name>
         <home>org.jboss.varia.autonumber.AutoNumberHome</home>
         <remote>org.jboss.varia.autonumber.AutoNumber</remote>
         <ejb-class>org.jboss.varia.autonumber.AutoNumberEJB2</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.String</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>autonumber</abstract-schema-name>
         <cmp-field><field-name>name</field-name></cmp-field>
         <cmp-field><field-name>value</field-name></cmp-field>
         <primkey-field>name</primkey-field>
      </entity>
   </enterprise-beans>
   <relationships>
      <ejb-relation>
         <ejb-relation-name>ProductCategory-Subcategories</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>parent.getSubcategories()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>ProductCategoryEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>subcategories</cmr-field-name>
               <cmr-field-type>java.util.Collection</cmr-field-type>
            </cmr-field>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>subcategory.getParent()</ejb-relationship-role-name>
            <multiplicity>Many</multiplicity>
            <cascade-delete/>
            <relationship-role-source>
               <ejb-name>ProductCategoryEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>parent</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>ProductCategory-ProductCategoryType</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>type.getProductCategories()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>ProductCategoryTypeEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>productCategories</cmr-field-name>
               <cmr-field-type>java.util.Collection</cmr-field-type>
            </cmr-field>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>productCategory.getType()</ejb-relationship-role-name>
            <multiplicity>Many</multiplicity>
            <cascade-delete/>
            <relationship-role-source>
               <ejb-name>ProductCategoryEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>type</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>Order-ShippingAddress</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>shippingAddress.getOrder()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <cascade-delete/>
            <relationship-role-source>
               <ejb-name>AddressEJB</ejb-name>
            </relationship-role-source>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>order.getShippingAddress()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>OrderEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>shippingAddress</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>Order-BillingAddress</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>billingAddress.getOrder()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <cascade-delete/>
            <relationship-role-source>
               <ejb-name>AddressEJB</ejb-name>
            </relationship-role-source>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>order.getBillingAddress()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>OrderEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>billingAddress</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>Order-LineItem</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>order.getLineitems()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>OrderEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>lineItems</cmr-field-name>
               <cmr-field-type>java.util.Collection</cmr-field-type>
            </cmr-field>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>lineitem.getOrder()</ejb-relationship-role-name>
            <multiplicity>Many</multiplicity>
            <cascade-delete/>
            <relationship-role-source>
               <ejb-name>LineItemEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>order</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>Product-LineItem</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>product.getLineitems()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>ProductEJB</ejb-name>
            </relationship-role-source>
            <!-- since Product does not know about LineItem
            there is no cmr field in Product for accessing
            Lineitem
            -->
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>lineitem.getProduct()</ejb-relationship-role-name>
            <multiplicity>Many</multiplicity>
            <relationship-role-source>
               <ejb-name>LineItemEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>product</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>
      </ejb-relation>
      <!--
      MANT-TO-MANY: Product Categories
      -->
      <ejb-relation>
         <ejb-relation-name>Product-ProductCategory</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>product.getProductCategories()</ejb-relationship-role-name>
            <multiplicity>Many</multiplicity>
            <relationship-role-source>
               <ejb-name>ProductEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>productCategories</cmr-field-name>
               <cmr-field-type>java.util.Collection</cmr-field-type>
            </cmr-field>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>productCategories.getProducts()</ejb-relationship-role-name>
            <multiplicity>Many</multiplicity>
            <relationship-role-source>
               <ejb-name>ProductCategoryEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>products</cmr-field-name>
               <cmr-field-type>java.util.Collection</cmr-field-type>
            </cmr-field>
         </ejb-relationship-role>
      </ejb-relation>
      <!--
      ONE-TO-MANY: Order Customer:
      -->
      <ejb-relation>
         <ejb-relation-name>Order-Customer</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>customer.getOrders()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>CustomerEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>orders</cmr-field-name>
               <cmr-field-type>java.util.Collection</cmr-field-type>
            </cmr-field>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>order.getCustomer()</ejb-relationship-role-name>
            <multiplicity>Many</multiplicity>
            <relationship-role-source>
               <ejb-name>OrderEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>customer</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>Customer-Addresses</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>customer.getAddresses()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>CustomerEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>addresses</cmr-field-name>
               <cmr-field-type>java.util.Collection</cmr-field-type>
            </cmr-field>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>address.getCustomer()</ejb-relationship-role-name>
            <multiplicity>Many</multiplicity>
            <cascade-delete/>
            <relationship-role-source>
               <ejb-name>AddressEJB</ejb-name>
            </relationship-role-source>
         </ejb-relationship-role>
      </ejb-relation>
      <!--
      ONE-TO-ONE unidirectional relationship:
      User is unaware of Customer
      -->
      <ejb-relation>
         <ejb-relation-name>Customer-User</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>customer.getUser()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>CustomerEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>userLocal</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>user.getCustomer()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>UserEJB</ejb-name>
            </relationship-role-source>
         </ejb-relationship-role>
      </ejb-relation>

      <!-- Batch cascade-delete -->
      <ejb-relation>
         <ejb-relation-name>ProductCategory-Subcategories-BatchDelete</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>parent.getSubcategories()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>ProductCategoryBatchDeleteEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>subcategories</cmr-field-name>
               <cmr-field-type>java.util.Collection</cmr-field-type>
            </cmr-field>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>subcategory.getParent()</ejb-relationship-role-name>
            <multiplicity>Many</multiplicity>
            <cascade-delete/>
            <relationship-role-source>
               <ejb-name>ProductCategoryBatchDeleteEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>parent</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>ProductCategory-ProductCategoryType-BatchDelete</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>type.getProductCategories()</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source>
               <ejb-name>ProductCategoryTypeBatchDeleteEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>productCategories</cmr-field-name>
               <cmr-field-type>java.util.Collection</cmr-field-type>
            </cmr-field>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>productCategory.getType()</ejb-relationship-role-name>
            <multiplicity>Many</multiplicity>
            <cascade-delete/>
            <relationship-role-source>
               <ejb-name>ProductCategoryBatchDeleteEJB</ejb-name>
            </relationship-role-source>
            <cmr-field>
               <cmr-field-name>type</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>
      </ejb-relation>
   </relationships>
   <assembly-descriptor>
      <container-transaction>
         <method>
            <ejb-name>UserEJB</ejb-name>
            <method-name>*</method-name>
         </method>
         <method>
            <ejb-name>CustomerEJB</ejb-name>
            <method-name>*</method-name>
         </method>
         <method>
            <ejb-name>OrderEJB</ejb-name>
            <method-name>*</method-name>
         </method>
         <method>
            <ejb-name>AddressEJB</ejb-name>
            <method-name>*</method-name>
         </method>
         <method>
            <ejb-name>LineItemEJB</ejb-name>
            <method-name>*</method-name>
         </method>
         <method>
            <ejb-name>ProductEJB</ejb-name>
            <method-name>*</method-name>
         </method>
         <trans-attribute>Required</trans-attribute>
      </container-transaction>
      <container-transaction>
         <method>
            <ejb-name>TxTesterEJB</ejb-name>
            <method-name>*</method-name>
         </method>
         <trans-attribute>NotSupported</trans-attribute>
      </container-transaction>
    </assembly-descriptor>
</ejb-jar>
