<?xml version="1.0"?>

<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd'> 

<ejb-jar>
   <enterprise-beans>
      <entity>
	 <ejb-name>Person</ejb-name>

	 <local-home>ejava.examples.personnel.ejb20.PersonLocalHome</local-home>
	 <local>ejava.examples.personnel.ejb20.PersonLocal</local>
	 <ejb-class>ejava.examples.personnel.ejb20.PersonEJB</ejb-class>
	 <persistence-type>Container</persistence-type>
	 <prim-key-class>ejava.examples.personnel.ejb20.PersonPK
	 </prim-key-class>
	 <reentrant>False</reentrant>

	 <abstract-schema-name>Person</abstract-schema-name>
	 <cmp-field> <field-name>id</field-name> </cmp-field>
	 <cmp-field> <field-name>firstName</field-name> </cmp-field>
	 <cmp-field> <field-name>lastName</field-name> </cmp-field>
	 <cmp-field> <field-name>address</field-name> </cmp-field>
	 <cmp-field> <field-name>phoneNumber</field-name> </cmp-field>

	 <env-entry>
	    <env-entry-name>example</env-entry-name>
	    <env-entry-type>java.lang.String</env-entry-type>
	    <env-entry-value>Sample Environment Value</env-entry-value>
	 </env-entry>
	 
         <query>
	    <query-method>
	       <method-name>findByName</method-name>
	       <method-params>
	          <method-param>java.lang.String</method-param> <!-- fname -->
	          <method-param>java.lang.String</method-param> <!-- lname -->
	       </method-params>
	    </query-method>
	    <ejb-ql>
	       SELECT OBJECT(p) FROM Person p 
	       WHERE p.firstName = ?1 AND p.lastName = ?2
	    </ejb-ql>
         </query>
         <query>
	    <query-method>
	       <method-name>findAll</method-name>
	       <method-params/>
	    </query-method>
	    <ejb-ql>
	       SELECT OBJECT(p) FROM Person p 
	    </ejb-ql>
         </query>
         <query>
	    <query-method>
	       <method-name>findByAddress</method-name>
	       <method-params>
	          <method-param>java.lang.String</method-param> <!-- fname -->
	       </method-params>
	    </query-method>
	    <ejb-ql>
	       SELECT OBJECT(p) FROM Person p 
	       WHERE p.address = ?1
	    </ejb-ql>
         </query>
         <query>
	    <query-method>
	       <method-name>ejbSelectPhoneNumbers</method-name>
	       <method-params/>
	    </query-method>
	    <ejb-ql>
	       SELECT DISTINCT p.phoneNumber FROM Person p 
	    </ejb-ql>
         </query>
      </entity>

      <entity>
	 <ejb-name>Borrower</ejb-name>

	 <local-home>ejava.examples.checkouts.ejb.BorrowerLocalHome</local-home>
	 <local>ejava.examples.checkouts.ejb.BorrowerLocal</local>
	 <ejb-class>ejava.examples.checkouts.ejb.BorrowerEJB</ejb-class>
	 <persistence-type>Container</persistence-type>
	 <prim-key-class>java.lang.String</prim-key-class>
	 <reentrant>False</reentrant>

	 <abstract-schema-name>Borrower</abstract-schema-name>
	 <cmp-field> <field-name>id</field-name> </cmp-field>
	 <cmp-field> <field-name>beginDate</field-name> </cmp-field>
	 <cmp-field> <field-name>endDate</field-name> </cmp-field>

	 <primkey-field>id</primkey-field>

         <query>
	    <query-method>
	       <method-name>findByName</method-name>
	       <method-params>
	          <method-param>java.lang.String</method-param> <!-- fname -->
	          <method-param>java.lang.String</method-param> <!-- lname -->
	       </method-params>
	    </query-method>
	    <ejb-ql>
	       SELECT OBJECT(b) FROM Borrower b 
	       WHERE b.identity.firstName = ?1 AND b.identity.lastName = ?2
	    </ejb-ql>
         </query>
         <query>
	    <query-method>
	       <method-name>findAll</method-name>
	       <method-params/>
	    </query-method>
	    <ejb-ql>
	       SELECT OBJECT(b) FROM Borrower b 
	    </ejb-ql>
         </query>
      </entity>
      
      <entity>
	 <ejb-name>Checkout</ejb-name>

	 <local-home>ejava.examples.checkouts.ejb.CheckoutLocalHome</local-home>
	 <local>ejava.examples.checkouts.ejb.CheckoutLocal</local>
	 <ejb-class>ejava.examples.checkouts.ejb.CheckoutEJB</ejb-class>
	 <persistence-type>Container</persistence-type>
	 <prim-key-class>java.lang.Integer</prim-key-class>
	 <reentrant>False</reentrant>

	 <abstract-schema-name>Checkout</abstract-schema-name>
	 <cmp-field> <field-name>id</field-name> </cmp-field>
	 <cmp-field> <field-name>outSQLDate</field-name> </cmp-field>
	 
	 <primkey-field>id</primkey-field>

	 <ejb-ref>
	    <ejb-ref-name>CheckoutLocalHome</ejb-ref-name>
	    <ejb-ref-type>Entity</ejb-ref-type>
	    <home>ejava.examples.checkouts.ejb.CheckoutLocalHome</home>
	    <remote>ejava.examples.checkouts.ejb.CheckoutLocal</remote>
	    <ejb-link>Checkout</ejb-link>
	 </ejb-ref>

         <query>
	    <query-method>
	       <method-name>findAll</method-name>
	       <method-params/>
	    </query-method>
	    <ejb-ql>
	       SELECT OBJECT(c) FROM Checkout c 
	    </ejb-ql>
         </query>
         
	 <query>
	    <query-method>
	       <method-name>ejbSelectOverdue</method-name>
	       <method-params>
	          <method-param>long</method-param>
	       </method-params>
	    </query-method>
	    <ejb-ql>
	       <![CDATA[
	       SELECT OBJECT(c) FROM Checkout c 
	       WHERE c.outSQLDate < ?1
	       ]]>
	    </ejb-ql>
         </query>
      </entity>
      
      <entity>
	 <ejb-name>UIDGenerator</ejb-name>
	 <local-home>ejava.examples.uid.ejb.UIDGeneratorLocalHome</local-home>
	 <local>ejava.examples.uid.ejb.UIDGeneratorLocal</local>
	 <ejb-class>ejava.examples.uid.ejb.UIDGeneratorEJB</ejb-class>
	 <persistence-type>Bean</persistence-type>
	 <prim-key-class>java.lang.Integer</prim-key-class>
	 <reentrant>False</reentrant>
	 
	 <env-entry>
	    <description>Name of UID table in DB.</description>
	    <env-entry-name>jdbc/tableName</env-entry-name>
	    <env-entry-type>java.lang.String</env-entry-type>
	    <env-entry-value>UIDSequence</env-entry-value>
	 </env-entry>

	 <resource-ref>
	    <res-ref-name>jdbc/uidDB</res-ref-name>
	    <res-type>javax.sql.DataSource</res-type>
	    <res-auth>Container</res-auth>
	 </resource-ref>
      </entity>

   </enterprise-beans>
   
   <relationships>
      <ejb-relation> <!-- Borrower(0..1)->(1)Person (unidirectional) -->
         <ejb-relation-name>Borrower-Person</ejb-relation-name>
         <ejb-relationship-role>
	    <ejb-relationship-role-name>Borrower-to-Identity
	    </ejb-relationship-role-name>
	    <multiplicity>One</multiplicity>
	    <cascade-delete/> <!-- delete Borrower role when delete Person -->
	    <relationship-role-source>
	       <ejb-name>Borrower</ejb-name>
	    </relationship-role-source>
	    <cmr-field>
	       <cmr-field-name>identity</cmr-field-name>
	    </cmr-field>
	 </ejb-relationship-role>
         <ejb-relationship-role>
	    <ejb-relationship-role-name>Identity-to-Borrower
	    </ejb-relationship-role-name>
	    <multiplicity>One</multiplicity>
	    <relationship-role-source>
	       <ejb-name>Person</ejb-name>
	    </relationship-role-source>
	 </ejb-relationship-role>
      </ejb-relation>
      
      <ejb-relation> <!-- Borrower(1)->(N)Checkout (bi-directional) -->
         <ejb-relation-name>Borrower-Checkout</ejb-relation-name>
         <ejb-relationship-role>
	    <ejb-relationship-role-name>Borrower-to-Checkout
	    </ejb-relationship-role-name>
	    <multiplicity>One</multiplicity>
	    <relationship-role-source>
	       <ejb-name>Borrower</ejb-name>
	    </relationship-role-source>
	    <cmr-field>
	       <cmr-field-name>checkouts</cmr-field-name>
	       <cmr-field-type>java.util.Set</cmr-field-type>
	    </cmr-field>
	 </ejb-relationship-role>
         <ejb-relationship-role>
	    <ejb-relationship-role-name>Checkout-to-Borrower
	    </ejb-relationship-role-name>
	    <multiplicity>Many</multiplicity>
	    <cascade-delete/> <!-- delete Checkouts when delete Borrower -->
	    <relationship-role-source>
	       <ejb-name>Checkout</ejb-name>
	    </relationship-role-source>
	    <cmr-field>
	       <cmr-field-name>borrower</cmr-field-name>
	    </cmr-field>
	 </ejb-relationship-role>
      </ejb-relation>

   </relationships>
   
   <assembly-descriptor>
      <container-transaction>
	 <method>
	    <ejb-name>UIDGenerator</ejb-name>
	    <method-name>*</method-name>
	 </method>
	 <trans-attribute>Required</trans-attribute>
      </container-transaction>
   </assembly-descriptor>

   
</ejb-jar>
