gdamour 2005/08/19 23:49:06
Added: modules/itests/src/cmp2/cmrmapping ejb-jar.xml
openejb-jar.xml
Log:
o GERONIMO-675 CMR / CMP Fields should not be read-only
Some additional enhancement to support the scenario where a primary key column
is also a foreign key column.
This basically implements the rules that Jeremy was recommending to apply
in such a case:
when the primary key is set in the ejbCreate<Method> the associated CMR field,
i.e. the CMR mapped to the foreign key column, is marked as under
construction.
From this point, the CMR must be set before the commit of the current
transaction. If not set, then the transaction is marked as rolled back.
Also, if an attempt is made to reset the pk field by relating the entity to
the wrong entity, an IllegalStateException is thrown.
o Also sync the code with the refactoring of the Association and
AssociationEnd
classes: the Association.isOneToOne, isOneToMany, isManyToOne and
isManyToMany methods have been moved to AssociationEnd.
Revision Changes Path
1.1 openejb/modules/itests/src/cmp2/cmrmapping/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>OneOwningSideBean</ejb-name>
<local-home>org.openejb.test.entity.cmp2.cmrmapping.OneOwningSideLocalHome</local-home>
<local>org.openejb.test.entity.cmp2.cmrmapping.OneOwningSideLocal</local>
<ejb-class>org.openejb.test.entity.cmp2.cmrmapping.OneOwningSideBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>org.openejb.test.entity.cmp2.cmrmapping.CompoundPK</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>field1</field-name></cmp-field>
</entity>
<entity>
<ejb-name>OneInverseSideBean</ejb-name>
<local-home>org.openejb.test.entity.cmp2.cmrmapping.OneInverseSideLocalHome</local-home>
<local>org.openejb.test.entity.cmp2.cmrmapping.OneInverseSideLocal</local>
<ejb-class>org.openejb.test.entity.cmp2.cmrmapping.OneInverseSideBean</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>
<primkey-field>id</primkey-field>
</entity>
<entity>
<ejb-name>ManyOwningSideBean</ejb-name>
<local-home>org.openejb.test.entity.cmp2.cmrmapping.ManyOwningSideLocalHome</local-home>
<local>org.openejb.test.entity.cmp2.cmrmapping.ManyOwningSideLocal</local>
<ejb-class>org.openejb.test.entity.cmp2.cmrmapping.ManyOwningSideBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>org.openejb.test.entity.cmp2.cmrmapping.CompoundPK</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>field1</field-name></cmp-field>
</entity>
<session>
<ejb-name>CMRMappingFacadeBean</ejb-name>
<home>org.openejb.test.entity.cmp2.cmrmapping.CMRMappingFacadeHome</home>
<remote>org.openejb.test.entity.cmp2.cmrmapping.CMRMappingFacadeRemote</remote>
<ejb-class>org.openejb.test.entity.cmp2.cmrmapping.CMRMappingFacadeBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
<ejb-local-ref>
<ejb-ref-name>ejb/OneOwningSideLocalHome</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>org.openejb.test.entity.cmp2.cmrmapping.OneOwningSideLocalHome</local-home>
<local>org.openejb.test.entity.cmp2.cmrmapping.OneOwningSideLocal</local>
<ejb-link>OneOwningSideBean</ejb-link>
</ejb-local-ref>
<ejb-local-ref>
<ejb-ref-name>ejb/OneInverseSideLocalHome</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>org.openejb.test.entity.cmp2.cmrmapping.OneInverseSideLocalHome</local-home>
<local>org.openejb.test.entity.cmp2.cmrmapping.OneInverseSideLocal</local>
<ejb-link>OneInverseSideBean</ejb-link>
</ejb-local-ref>
<ejb-local-ref>
<ejb-ref-name>ejb/ManyOwningSideLocalHome</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>org.openejb.test.entity.cmp2.cmrmapping.ManyOwningSideLocalHome</local-home>
<local>org.openejb.test.entity.cmp2.cmrmapping.ManyOwningSideLocal</local>
<ejb-link>ManyOwningSideBean</ejb-link>
</ejb-local-ref>
</session>
</enterprise-beans>
<relationships>
<ejb-relation>
<ejb-relationship-role>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>OneOwningSideBean</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>oneInverseSide</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>OneInverseSideBean</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>oneOwningSide</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
</ejb-relation>
<ejb-relation>
<ejb-relationship-role>
<multiplicity>Many</multiplicity>
<relationship-role-source>
<ejb-name>ManyOwningSideBean</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>oneInverseSide</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>OneInverseSideBean</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>manyOwningSide</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
</ejb-relation>
</relationships>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>OneOwningSideBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Supports</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>OneInverseSideBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Supports</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>ManyOwningSideBean</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/cmrmapping/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/CMRMapping"
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>OneOwningSideBean</ejb-name>
<table-name>OneOwning</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>field1</cmp-field-name>
<table-column>field1</table-column>
</cmp-field-mapping>
</entity>
<entity>
<ejb-name>OneInverseSideBean</ejb-name>
<table-name>OneInverse</table-name>
<cmp-field-mapping>
<cmp-field-name>id</cmp-field-name>
<table-column>id</table-column>
</cmp-field-mapping>
</entity>
<entity>
<ejb-name>ManyOwningSideBean</ejb-name>
<table-name>ManyOwning</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>field1</cmp-field-name>
<table-column>field1</table-column>
</cmp-field-mapping>
</entity>
<session>
<ejb-name>CMRMappingFacadeBean</ejb-name>
<jndi-name>cmp2/CMRMappingFacade</jndi-name>
</session>
</enterprise-beans>
<relationships>
<ejb-relation>
<ejb-relationship-role>
<relationship-role-source>
<ejb-name>OneInverseSideBean</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>oneOwningSide</cmr-field-name>
</cmr-field>
<role-mapping>
<cmr-field-mapping>
<key-column>id</key-column>
<foreign-key-column>field1</foreign-key-column>
</cmr-field-mapping>
</role-mapping>
</ejb-relationship-role>
</ejb-relation>
<ejb-relation>
<ejb-relationship-role>
<relationship-role-source>
<ejb-name>OneInverseSideBean</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>manyOwningSide</cmr-field-name>
</cmr-field>
<role-mapping>
<cmr-field-mapping>
<key-column>id</key-column>
<foreign-key-column>field1</foreign-key-column>
</cmr-field-mapping>
</role-mapping>
</ejb-relationship-role>
</ejb-relation>
</relationships>
</openejb-jar>