gdamour 2005/06/22 07:27:17 Added: modules/itests/src/cmp2/prefetch ejb-jar.xml openejb-jar.xml Log:
GERONIMO-665, checkpoint. Prefetching works for finders, selects and CMR. For CMR, it works as expected only if the entity is already defined by the transactional cache. Proper prefetching capabilities for CMR and CMP still need to be implemented. Revision Changes Path 1.1 openejb/modules/itests/src/cmp2/prefetch/ejb-jar.xml Index: ejb-jar.xml =================================================================== <?xml version="1.0" encoding="US-ASCII"?> <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1"> <enterprise-beans> <entity> <ejb-name>AddressBean</ejb-name> <local-home>org.openejb.test.entity.cmp2.model.AddressLocalHome</local-home> <local>org.openejb.test.entity.cmp2.model.AddressLocal</local> <ejb-class>org.openejb.test.entity.cmp2.model.AddressBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Integer</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> <primkey-field>id</primkey-field> </entity> <entity> <ejb-name>LineItemBean</ejb-name> <local-home>org.openejb.test.entity.cmp2.model.LineItemLocalHome</local-home> <local>org.openejb.test.entity.cmp2.model.LineItemLocal</local> <ejb-class>org.openejb.test.entity.cmp2.model.LineItemBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Integer</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> <primkey-field>id</primkey-field> </entity> <entity> <ejb-name>OrderBean</ejb-name> <local-home>org.openejb.test.entity.cmp2.model.OrderLocalHome</local-home> <local>org.openejb.test.entity.cmp2.model.OrderLocal</local> <ejb-class>org.openejb.test.entity.cmp2.model.OrderBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Integer</prim-key-class> <reentrant>false</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>Order</abstract-schema-name> <cmp-field><field-name>id</field-name></cmp-field> <cmp-field><field-name>reference</field-name></cmp-field> <primkey-field>id</primkey-field> <query> <query-method> <method-name>findPrefetchAll</method-name> <method-params> <method-param>java.lang.Integer</method-param> </method-params> </query-method> <ejb-ql> <![CDATA[SELECT OBJECT(o) FROM Order AS o WHERE o.id = ?1]]> </ejb-ql> </query> </entity> <entity> <ejb-name>ProductBean</ejb-name> <local-home>org.openejb.test.entity.cmp2.model.ProductLocalHome</local-home> <local>org.openejb.test.entity.cmp2.model.ProductLocal</local> <ejb-class>org.openejb.test.entity.cmp2.model.ProductBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Integer</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>productType</field-name></cmp-field> <primkey-field>id</primkey-field> </entity> <session> <ejb-name>PrefetchFacadeBean</ejb-name> <home>org.openejb.test.entity.cmp2.prefetch.PrefetchFacadeHome</home> <remote>org.openejb.test.entity.cmp2.prefetch.PrefetchFacadeObject</remote> <ejb-class>org.openejb.test.entity.cmp2.prefetch.PrefetchFacadeBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> <ejb-local-ref> <ejb-ref-name>ejb/Address</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>org.openejb.test.entity.cmp2.model.AddressLocalHome</local-home> <local>org.openejb.test.entity.cmp2.model.AddressLocal</local> <ejb-link>AddressBean</ejb-link> </ejb-local-ref> <ejb-local-ref> <ejb-ref-name>ejb/LineItem</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>org.openejb.test.entity.cmp2.model.LineItemLocalHome</local-home> <local>org.openejb.test.entity.cmp2.model.LineItemLocal</local> <ejb-link>LineItemBean</ejb-link> </ejb-local-ref> <ejb-local-ref> <ejb-ref-name>ejb/Order</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>org.openejb.test.entity.cmp2.model.OrderLocalHome</local-home> <local>org.openejb.test.entity.cmp2.model.OrderLocal</local> <ejb-link>OrderBean</ejb-link> </ejb-local-ref> <ejb-local-ref> <ejb-ref-name>ejb/Product</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>org.openejb.test.entity.cmp2.model.ProductLocalHome</local-home> <local>org.openejb.test.entity.cmp2.model.ProductLocal</local> <ejb-link>ProductBean</ejb-link> </ejb-local-ref> <resource-ref> <res-ref-name>jdbc/CMPDatasource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </session> </enterprise-beans> <relationships> <ejb-relation> <ejb-relationship-role> <multiplicity>Many</multiplicity> <relationship-role-source> <ejb-name>OrderBean</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>shippingAddress</cmr-field-name> </cmr-field> </ejb-relationship-role> <ejb-relationship-role> <multiplicity>One</multiplicity> <relationship-role-source> <ejb-name>AddressBean</ejb-name> </relationship-role-source> </ejb-relationship-role> </ejb-relation> <ejb-relation> <ejb-relationship-role> <multiplicity>Many</multiplicity> <relationship-role-source> <ejb-name>OrderBean</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>billingAddress</cmr-field-name> </cmr-field> </ejb-relationship-role> <ejb-relationship-role> <multiplicity>One</multiplicity> <relationship-role-source> <ejb-name>AddressBean</ejb-name> </relationship-role-source> </ejb-relationship-role> </ejb-relation> <ejb-relation> <ejb-relationship-role> <multiplicity>One</multiplicity> <relationship-role-source> <ejb-name>OrderBean</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>lineItems</cmr-field-name> </cmr-field> </ejb-relationship-role> <ejb-relationship-role> <multiplicity>Many</multiplicity> <relationship-role-source> <ejb-name>LineItemBean</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>order</cmr-field-name> </cmr-field> </ejb-relationship-role> </ejb-relation> <ejb-relation> <ejb-relationship-role> <multiplicity>One</multiplicity> <relationship-role-source> <ejb-name>ProductBean</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>lineItems</cmr-field-name> </cmr-field> </ejb-relationship-role> <ejb-relationship-role> <multiplicity>Many</multiplicity> <relationship-role-source> <ejb-name>LineItemBean</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>product</cmr-field-name> </cmr-field> </ejb-relationship-role> </ejb-relation> </relationships> <assembly-descriptor> <container-transaction> <method> <ejb-name>AddressBean</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Supports</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>LineItemBean</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Supports</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>OrderBean</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Supports</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>ProductBean</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Supports</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar> 1.1 openejb/modules/itests/src/cmp2/prefetch/openejb-jar.xml Index: openejb-jar.xml =================================================================== <?xml version="1.0"?> <openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar" configId="org/openejb/cmp2/Prefetch" parentId="org/apache/geronimo/DefaultDatabase"> <dependency> <uri>junit/jars/junit-3.8.1.jar</uri> </dependency> <cmp-connection-factory> <application>null</application> <module>org/apache/geronimo/DefaultDatabase</module> <name>DefaultDatasource</name> </cmp-connection-factory> <enterprise-beans> <entity> <ejb-name>AddressBean</ejb-name> <table-name>address</table-name> <cmp-field-mapping> <cmp-field-name>id</cmp-field-name> <table-column>id</table-column> </cmp-field-mapping> <cmp-field-mapping> <cmp-field-name>street</cmp-field-name> <table-column>street</table-column> </cmp-field-mapping> <cmp-field-mapping> <cmp-field-name>city</cmp-field-name> <table-column>city</table-column> </cmp-field-mapping> <prefetch-group> <group> <group-name>prefetchAll</group-name> <cmp-field-name>street</cmp-field-name> <cmp-field-name>city</cmp-field-name> </group> </prefetch-group> </entity> <entity> <ejb-name>LineItemBean</ejb-name> <table-name>line_item</table-name> <cmp-field-mapping> <cmp-field-name>id</cmp-field-name> <table-column>id</table-column> </cmp-field-mapping> <cmp-field-mapping> <cmp-field-name>quantity</cmp-field-name> <table-column>quantity</table-column> </cmp-field-mapping> <prefetch-group> <group> <group-name>prefetchAll</group-name> <cmp-field-name>quantity</cmp-field-name> <cmr-field> <cmr-field-name>product</cmr-field-name> </cmr-field> </group> </prefetch-group> </entity> <entity> <ejb-name>OrderBean</ejb-name> <table-name>order_table</table-name> <cmp-field-mapping> <cmp-field-name>id</cmp-field-name> <table-column>id</table-column> </cmp-field-mapping> <cmp-field-mapping> <cmp-field-name>reference</cmp-field-name> <table-column>reference</table-column> </cmp-field-mapping> <prefetch-group> <group> <group-name>prefetchAll</group-name> <cmp-field-name>reference</cmp-field-name> <cmr-field> <cmr-field-name>shippingAddress</cmr-field-name> </cmr-field> <cmr-field> <cmr-field-name>billingAddress</cmr-field-name> </cmr-field> <cmr-field> <cmr-field-name>lineItems</cmr-field-name> </cmr-field> </group> </prefetch-group> <query> <query-method> <method-name>findPrefetchAll</method-name> <method-params> <method-param>java.lang.Integer</method-param> </method-params> </query-method> <group-name>prefetchAll</group-name> </query> </entity> <entity> <ejb-name>ProductBean</ejb-name> <table-name>product</table-name> <cmp-field-mapping> <cmp-field-name>id</cmp-field-name> <table-column>id</table-column> </cmp-field-mapping> <cmp-field-mapping> <cmp-field-name>name</cmp-field-name> <table-column>name</table-column> </cmp-field-mapping> <cmp-field-mapping> <cmp-field-name>productType</cmp-field-name> <table-column>product_type</table-column> </cmp-field-mapping> <prefetch-group> <group> <group-name>prefetchAll</group-name> <cmp-field-name>name</cmp-field-name> <cmp-field-name>productType</cmp-field-name> </group> </prefetch-group> </entity> <session> <ejb-name>PrefetchFacadeBean</ejb-name> <jndi-name>cmp2/Prefetch/PrefetchFacade</jndi-name> <resource-ref> <ref-name>jdbc/CMPDatasource</ref-name> <application>null</application> <module>org/apache/geronimo/DefaultDatabase</module> <name>DefaultDatasource</name> </resource-ref> </session> </enterprise-beans> <relationships> <ejb-relation> <ejb-relationship-role> <relationship-role-source> <ejb-name>OrderBean</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>shippingAddress</cmr-field-name> </cmr-field> <foreign-key-column-on-source/> <role-mapping> <cmr-field-mapping> <key-column>id</key-column> <foreign-key-column>fk_shipping_address</foreign-key-column> </cmr-field-mapping> </role-mapping> </ejb-relationship-role> </ejb-relation> <ejb-relation> <ejb-relationship-role> <relationship-role-source> <ejb-name>OrderBean</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>billingAddress</cmr-field-name> </cmr-field> <foreign-key-column-on-source/> <role-mapping> <cmr-field-mapping> <key-column>id</key-column> <foreign-key-column>fk_billing_address</foreign-key-column> </cmr-field-mapping> </role-mapping> </ejb-relationship-role> </ejb-relation> <ejb-relation> <ejb-relationship-role> <relationship-role-source> <ejb-name>OrderBean</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>lineItems</cmr-field-name> </cmr-field> <role-mapping> <cmr-field-mapping> <key-column>id</key-column> <foreign-key-column>fk_order</foreign-key-column> </cmr-field-mapping> </role-mapping> </ejb-relationship-role> </ejb-relation> <ejb-relation> <ejb-relationship-role> <relationship-role-source> <ejb-name>ProductBean</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>lineItems</cmr-field-name> </cmr-field> <role-mapping> <cmr-field-mapping> <key-column>id</key-column> <foreign-key-column>fk_product</foreign-key-column> </cmr-field-mapping> </role-mapping> </ejb-relationship-role> </ejb-relation> </relationships> </openejb-jar>
