<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" version="2.1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://example.org/ns/dd resources/test/dd/ejb-jar_2_1.xsd">
    <display-name>DukesBankEJBJAR</display-name>
    <enterprise-beans>
        <session>
            <ejb-name>AccountControllerBean</ejb-name>
            <home>com.sun.ebank.ejb.account.AccountControllerHome</home>
            <remote>com.sun.ebank.ejb.account.AccountController</remote>
            <ejb-class>com.sun.ebank.ejb.account.AccountControllerBean</ejb-class>
            <session-type>Stateful</session-type>
            <transaction-type>Container</transaction-type>
            <ejb-local-ref>
                <ejb-ref-name>ejb/customer</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home>com.sun.ebank.ejb.customer.LocalCustomerHome</local-home>
                <local>com.sun.ebank.ejb.customer.LocalCustomer</local>
                <ejb-link>CustomerBean</ejb-link>
            </ejb-local-ref>
            <ejb-local-ref>
                <ejb-ref-name>ejb/account</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home>com.sun.ebank.ejb.account.LocalAccountHome</local-home>
                <local>com.sun.ebank.ejb.account.LocalAccount</local>
                <ejb-link>AccountBean</ejb-link>
            </ejb-local-ref>
            <ejb-local-ref>
                <ejb-ref-name>ejb/nextId</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home>com.sun.ebank.ejb.util.LocalNextIdHome</local-home>
                <local>com.sun.ebank.ejb.util.LocalNextId</local>
                <ejb-link>NextIdBean</ejb-link>
            </ejb-local-ref>
            <resource-ref>
                <res-ref-name>jdbc/BankDB</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <res-auth>Container</res-auth>
                <res-sharing-scope>Shareable</res-sharing-scope>
            </resource-ref>
            <security-identity>
                <use-caller-identity/>
            </security-identity>
        </session>
        <entity>
            <ejb-name>CustomerBean</ejb-name>
            <local-home>com.sun.ebank.ejb.customer.LocalCustomerHome</local-home>
            <local>com.sun.ebank.ejb.customer.LocalCustomer</local>
            <ejb-class>com.sun.ebank.ejb.customer.CustomerBean</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>CustomerBean</abstract-schema-name>
            <cmp-field>
                <field-name>customerId</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>lastName</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>firstName</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>middleInitial</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>phone</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>email</field-name>
            </cmp-field>
            <primkey-field>customerId</primkey-field>
            <security-identity>
                <use-caller-identity/>
            </security-identity>
            <query>
                <query-method>
                    <method-name>findByAccountId</method-name>
                    <method-params>
                        <method-param>java.lang.String</method-param>
                    </method-params>
                </query-method>
                <ejb-ql>select distinct object(c) from CustomerBean c, in (c.accounts) as
                    a where a.accountId = ?1 </ejb-ql>
            </query>
            <query>
                <query-method>
                    <method-name>findByLastName</method-name>
                    <method-params>
                        <method-param>java.lang.String</method-param>
                    </method-params>
                </query-method>
                <ejb-ql> select object(c) from CustomerBean c where c.lastName =
                ?1</ejb-ql>
            </query>
        </entity>
        <session>
            <ejb-name>CustomerControllerBean</ejb-name>
            <home>com.sun.ebank.ejb.customer.CustomerControllerHome</home>
            <remote>com.sun.ebank.ejb.customer.CustomerController</remote>
            <ejb-class>com.sun.ebank.ejb.customer.CustomerControllerBean</ejb-class>
            <session-type>Stateful</session-type>
            <transaction-type>Container</transaction-type>
            <ejb-local-ref>
                <ejb-ref-name>ejb/customer</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home>com.sun.ebank.ejb.customer.LocalCustomerHome</local-home>
                <local>com.sun.ebank.ejb.customer.LocalCustomer</local>
                <ejb-link>CustomerBean</ejb-link>
            </ejb-local-ref>
            <ejb-local-ref>
                <ejb-ref-name>ejb/nextId</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home>com.sun.ebank.ejb.util.LocalNextIdHome</local-home>
                <local>com.sun.ebank.ejb.util.LocalNextId</local>
                <ejb-link>NextIdBean</ejb-link>
            </ejb-local-ref>
            <resource-ref>
                <res-ref-name>jdbc/BankDB</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <res-auth>Container</res-auth>
                <res-sharing-scope>Shareable</res-sharing-scope>
            </resource-ref>
            <security-identity>
                <use-caller-identity/>
            </security-identity>
        </session>
        <entity>
            <ejb-name>AccountBean</ejb-name>
            <local-home>com.sun.ebank.ejb.account.LocalAccountHome</local-home>
            <local>com.sun.ebank.ejb.account.LocalAccount</local>
            <ejb-class>com.sun.ebank.ejb.account.AccountBean</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>AccountBean</abstract-schema-name>
            <cmp-field>
                <field-name>accountId</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>type</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>description</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>balance</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>creditLine</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>beginBalance</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>beginBalanceTimeStamp</field-name>
            </cmp-field>
            <primkey-field>accountId</primkey-field>
            <security-identity>
                <use-caller-identity/>
            </security-identity>
            <query>
                <query-method>
                    <method-name>findByCustomerId</method-name>
                    <method-params>
                        <method-param>java.lang.String</method-param>
                    </method-params>
                </query-method>
                <ejb-ql>select distinct object(a) from AccountBean a, in (a.customers) as
                    c where c.customerId = ?1</ejb-ql>
            </query>
        </entity>
        <session>
            <ejb-name>TxControllerBean</ejb-name>
            <home>com.sun.ebank.ejb.tx.TxControllerHome</home>
            <remote>com.sun.ebank.ejb.tx.TxController</remote>
            <ejb-class>com.sun.ebank.ejb.tx.TxControllerBean</ejb-class>
            <session-type>Stateful</session-type>
            <transaction-type>Container</transaction-type>
            <ejb-local-ref>
                <ejb-ref-name>ejb/nextId</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home>com.sun.ebank.ejb.util.LocalNextIdHome</local-home>
                <local>com.sun.ebank.ejb.util.LocalNextId</local>
                <ejb-link>NextIdBean</ejb-link>
            </ejb-local-ref>
            <ejb-local-ref>
                <ejb-ref-name>ejb/tx</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home>com.sun.ebank.ejb.tx.LocalTxHome</local-home>
                <local>com.sun.ebank.ejb.tx.LocalTx</local>
                <ejb-link>TxBean</ejb-link>
            </ejb-local-ref>
            <ejb-local-ref>
                <ejb-ref-name>ejb/account</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home>com.sun.ebank.ejb.account.LocalAccountHome</local-home>
                <local>com.sun.ebank.ejb.account.LocalAccount</local>
                <ejb-link>AccountBean</ejb-link>
            </ejb-local-ref>
            <resource-ref>
                <res-ref-name>jdbc/BankDB</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <res-auth>Container</res-auth>
                <res-sharing-scope>Shareable</res-sharing-scope>
            </resource-ref>
            <security-identity>
                <use-caller-identity/>
            </security-identity>
        </session>
        <entity>
            <ejb-name>TxBean</ejb-name>
            <local-home>com.sun.ebank.ejb.tx.LocalTxHome</local-home>
            <local>com.sun.ebank.ejb.tx.LocalTx</local>
            <ejb-class>com.sun.ebank.ejb.tx.TxBean</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>TxBean</abstract-schema-name>
            <cmp-field>
                <field-name>txId</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>timeStamp</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>amount</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>balance</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>description</field-name>
            </cmp-field>
            <primkey-field>txId</primkey-field>
            <security-identity>
                <use-caller-identity/>
            </security-identity>
            <query>
                <query-method>
                    <method-name>findByAccountId</method-name>
                    <method-params>
                        <method-param>java.util.Date</method-param>
                        <method-param>java.util.Date</method-param>
                        <method-param>java.lang.String</method-param>
                    </method-params>
                </query-method>
                <ejb-ql><![CDATA[
                    select object(t) from TxBean t 
                    where t.account.accountId = ?3 and (t.timeStamp >= ?1 and  t.timeStamp <= ?2)
                    ]]></ejb-ql>
            </query>
        </entity>
        <entity>
            <ejb-name>NextIdBean</ejb-name>
            <local-home>com.sun.ebank.ejb.util.LocalNextIdHome</local-home>
            <local>com.sun.ebank.ejb.util.LocalNextId</local>
            <ejb-class>com.sun.ebank.ejb.util.NextIdBean</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>NextIdBean</abstract-schema-name>
            <cmp-field>
                <field-name>beanName</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>id</field-name>
            </cmp-field>
            <primkey-field>beanName</primkey-field>
        </entity>
    </enterprise-beans>
    <relationships>
        <ejb-relation>
            <ejb-relation-name>account-customer</ejb-relation-name>
            <ejb-relationship-role>
                <ejb-relationship-role-name>customer-belongs-to-account</ejb-relationship-role-name>
                <multiplicity>Many</multiplicity>
                <relationship-role-source>
                    <ejb-name>CustomerBean</ejb-name>
                </relationship-role-source>
                <cmr-field>
                    <cmr-field-name>accounts</cmr-field-name>
                    <cmr-field-type>java.util.Collection</cmr-field-type>
                </cmr-field>
            </ejb-relationship-role>
            <ejb-relationship-role>
                <ejb-relationship-role-name>account-has-customers</ejb-relationship-role-name>
                <multiplicity>Many</multiplicity>
                <relationship-role-source>
                    <ejb-name>AccountBean</ejb-name>
                </relationship-role-source>
                <cmr-field>
                    <cmr-field-name>customers</cmr-field-name>
                    <cmr-field-type>java.util.Collection</cmr-field-type>
                </cmr-field>
            </ejb-relationship-role>
        </ejb-relation>
        <ejb-relation>
            <ejb-relation-name>tx-account</ejb-relation-name>
            <ejb-relationship-role>
                <ejb-relationship-role-name>tx-has-account</ejb-relationship-role-name>
                <multiplicity>Many</multiplicity>
                <cascade-delete/>
                <relationship-role-source>
                    <ejb-name>TxBean</ejb-name>
                </relationship-role-source>
                <cmr-field>
                    <cmr-field-name>account</cmr-field-name>
                </cmr-field>
            </ejb-relationship-role>
            <ejb-relationship-role>
                <ejb-relationship-role-name>account-has-tx</ejb-relationship-role-name>
                <multiplicity>One</multiplicity>
                <relationship-role-source>
                    <ejb-name>AccountBean</ejb-name>
                </relationship-role-source>
            </ejb-relationship-role>
        </ejb-relation>
    </relationships>
    <assembly-descriptor>
        <security-role>
            <role-name>bankCustomer</role-name>
        </security-role>
        <security-role>
            <role-name>bankAdmin</role-name>
        </security-role>

        <method-permission>
            <role-name>bankCustomer</role-name>
            <method>
                <ejb-name>CustomerBean</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <role-name>bankCustomer</role-name>
            <method>
                <ejb-name>AccountBean</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <role-name>bankCustomer</role-name>
            <method>
                <ejb-name>TxBean</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <role-name>bankCustomer</role-name>
            <method>
                <ejb-name>NextIdBean</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <role-name>bankCustomer</role-name>
            <method>
                <ejb-name>CustomerControllerBean</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <role-name>bankCustomer</role-name>
            <method>
                <ejb-name>AccountControllerBean</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <role-name>bankCustomer</role-name>
            <method>
                <ejb-name>TxControllerBean</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <container-transaction>
            <method>
                <ejb-name>AccountControllerBean</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
        <container-transaction>
            <method>
                <ejb-name>CustomerControllerBean</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
        <container-transaction>
            <method>
                <ejb-name>TxControllerBean</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
        <container-transaction>
            <method>
                <ejb-name>AccountBean</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
        <container-transaction>
            <method>
                <ejb-name>CustomerBean</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
        <container-transaction>
            <method>
                <ejb-name>TxBean</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
        <container-transaction>
            <method>
                <ejb-name>NextIdBean</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>RequiresNew</trans-attribute>
        </container-transaction>
    </assembly-descriptor>
</ejb-jar>
