You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2007/01/25 00:39:16 UTC

svn commit: r499616 [1/2] - in /incubator/openejb/trunk/openejb3/container/openejb-jee/src/test: java/org/apache/openejb/jee/jpa/Cmp2ConversionTest.java resources/ejb-jar-cmp-example1.xml resources/itest-ejb-jar-2.2.xml resources/openejb-jar-2.2.xml

Author: dain
Date: Wed Jan 24 15:39:14 2007
New Revision: 499616

URL: http://svn.apache.org/viewvc?view=rev&rev=499616
Log:
start of a cmp2 converter

Added:
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/Cmp2ConversionTest.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/resources/ejb-jar-cmp-example1.xml
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/resources/itest-ejb-jar-2.2.xml
Modified:
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/resources/openejb-jar-2.2.xml

Added: incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/Cmp2ConversionTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/Cmp2ConversionTest.java?view=auto&rev=499616
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/Cmp2ConversionTest.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/Cmp2ConversionTest.java Wed Jan 24 15:39:14 2007
@@ -0,0 +1,355 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.jee.jpa;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.ValidationEventHandler;
+import javax.xml.bind.ValidationEvent;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+import org.apache.openejb.jee.oej2.Oej2JaxbUtil;
+import org.apache.openejb.jee.oej2.OpenejbJarType;
+import org.apache.openejb.jee.oej2.GeronimoEjbJarType;
+import org.apache.openejb.jee.oej2.EnterpriseBean;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.Relationships;
+import org.apache.openejb.jee.EjbRelation;
+import org.apache.openejb.jee.EjbRelationshipRole;
+import org.apache.openejb.jee.RelationshipRoleSource;
+import org.apache.openejb.jee.CmrField;
+import org.apache.openejb.jee.EntityBean;
+import org.apache.openejb.jee.CmpField;
+import org.apache.openejb.jee.Multiplicity;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class Cmp2ConversionTest extends TestCase {
+
+    public void testEjbJarDoc() throws Exception {
+        marshalAndUnmarshal(EjbJar.class, "ejb-jar-cmp-example1.xml");
+    }
+
+    public void XtestConversion() throws Exception {
+//        InputStream in = this.getClass().getClassLoader().getResourceAsStream("ejb-jar-cmp-example1.xml");
+
+        EntityMappings entityMappings = generateEntityMappings("itest-ejb-jar-2.2.xml");
+
+        JAXBContext ctx = JAXBContext.newInstance(OpenejbJarType.class);
+        Unmarshaller unmarshaller = ctx.createUnmarshaller();
+
+        InputStream in = this.getClass().getClassLoader().getResourceAsStream("openejb-jar-2.2.xml");
+        String expected = readContent(in);
+
+//        Object value = Oej2JaxbUtil.unmarshal(OpenejbJarType.class, new ByteArrayInputStream(expected.getBytes()));
+        Object value = unmarshaller.unmarshal(new ByteArrayInputStream(expected.getBytes()));
+        OpenejbJarType openejbJarType = (OpenejbJarType) value;
+
+
+        String actual = toString(entityMappings);
+        System.out.println(actual);
+    }
+
+    private String toString(EntityMappings entityMappings) throws JAXBException {
+        JAXBContext entityMappingsContext = JAXBContext.newInstance(EntityMappings.class);
+
+        Marshaller marshaller = entityMappingsContext.createMarshaller();
+        marshaller.setProperty("jaxb.formatted.output", true);
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        marshaller.marshal(entityMappings, baos);
+
+        String actual = new String(baos.toByteArray());
+        return actual;
+    }
+
+    private EntityMappings generateEntityMappings(String fileName) throws IOException, JAXBException {
+        JAXBContext ctx = JAXBContext.newInstance(EjbJar.class);
+        Unmarshaller unmarshaller = ctx.createUnmarshaller();
+
+        InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName);
+        String expected = readContent(in);
+        EjbJar ejbJar = (EjbJar) unmarshaller.unmarshal(new ByteArrayInputStream(expected.getBytes()));
+
+        EntityMappings entityMappings = new EntityMappings();
+        // todo it would be nice if entities were auto mapped by name
+        Map<String, Entity> entitiesByName = new HashMap<String,Entity>();
+        for (org.apache.openejb.jee.EnterpriseBean enterpriseBean : ejbJar.getEnterpriseBeans()) {
+            if (!(enterpriseBean instanceof EntityBean)) {
+                continue;
+            }
+            EntityBean bean = (EntityBean) enterpriseBean;
+            Entity entity = new Entity();
+            entity.setDescription(bean.getEjbName());
+            entity.setClazz(bean.getEjbClass());
+            // todo if not set, use ejb name but replace spaces with '_'
+            if (bean.getAbstractSchemaName() != null) {
+                entity.setName(bean.getAbstractSchemaName());
+            } else {
+                String name = bean.getEjbName().trim().replaceAll("[ \\t\\n\\r]+", "_");
+                entity.setName(name);
+            }
+
+            //
+            // atributes: holds id, basic, oneToMany, manyToOne and manyToMany
+            //
+            Attributes attributes = new Attributes();
+            entity.setAttributes(attributes);
+
+            //
+            // id: the primary key
+            //
+            Id id = new Id();
+            // todo complex primary key
+            // todo unknown primary key
+            id.setName(bean.getPrimkeyField());
+
+            // todo detect generated
+            boolean generatedPk = true;
+            if (generatedPk) {
+                GeneratedValue generatedValue = new GeneratedValue();
+                generatedValue.setGenerator("IDENTITY");
+                id.setGeneratedValue(generatedValue);
+            }
+            attributes.getId().add(id);
+
+            //
+            // basic: cmp-fields
+            //
+            for (CmpField cmpField : bean.getCmpField()) {
+                Basic basic = new Basic();
+                if (!cmpField.getFieldName().equals(bean.getPrimkeyField())) {
+                    basic.setName(cmpField.getFieldName());
+                    attributes.getBasic().add(basic);
+                }
+            }
+
+            // add the entity
+            entityMappings.getEntity().add(entity);
+            entitiesByName.put(bean.getEjbName(), entity);
+        }
+
+        Relationships relationships = ejbJar.getRelationships();
+        if (relationships != null) {
+            for (EjbRelation relation : relationships.getEjbRelation()) {
+                List<EjbRelationshipRole> roles = relation.getEjbRelationshipRole();
+                // if we don't have two roles, the relation is bad so we skip it
+                if (roles.size() != 2) {
+                    continue;
+                }
+
+                EjbRelationshipRole leftRole = roles.get(0);
+                RelationshipRoleSource leftRoleSource = leftRole.getRelationshipRoleSource();
+                String leftEjbName = leftRoleSource == null ? null : leftRoleSource.getEjbName();
+                Entity leftEntity = entitiesByName.get(leftEjbName);
+                CmrField leftCmrField = leftRole.getCmrField();
+                String leftFieldName = leftCmrField.getCmrFieldName();
+                boolean leftCascade = leftRole.getCascadeDelete() != null;
+                boolean leftIsOne = leftRole.getMultiplicity() == Multiplicity.ONE;
+
+                EjbRelationshipRole rightRole = roles.get(1);
+                RelationshipRoleSource rightRoleSource = rightRole.getRelationshipRoleSource();
+                String rightEjbName = rightRoleSource == null ? null : rightRoleSource.getEjbName();
+                Entity rightEntity = entitiesByName.get(rightEjbName);
+                CmrField rightCmrField = rightRole.getCmrField();
+                String rightFieldName = rightCmrField.getCmrFieldName();
+                boolean rightCascade = rightRole.getCascadeDelete() != null;
+                boolean rightIsOne = rightRole.getMultiplicity() == Multiplicity.ONE;
+
+                if (leftIsOne && rightIsOne) {
+                    //
+                    // one-to-one
+                    //
+
+                    // left
+                    if (leftEntity != null) {
+                        OneToOne leftOneToOne = new OneToOne();
+                        leftOneToOne.setName(leftFieldName);
+                        if (leftCascade) {
+                            // todo simplify cmrType in jaxb tree
+                            CascadeType cascadeType = new CascadeType();
+                            cascadeType.setCascadeAll(new EmptyType());
+                            leftOneToOne.setCascade(cascadeType);
+                        }
+                        leftEntity.getAttributes().getOneToOne().add(leftOneToOne);
+                    }
+
+                    // right
+                    if (rightEntity != null) {
+                        OneToOne rightOneToOne = new OneToOne();
+                        rightOneToOne.setName(rightFieldName);
+                        // todo only non-owning (non-fk) side gets mapped-by
+                        // mapped by only required for bi-directional
+                        if (leftFieldName != null) {
+                            rightOneToOne.setMappedBy(leftFieldName);
+                        }
+                        if (rightCascade) {
+                            // todo simplify cmrType in jaxb tree
+                            CascadeType cascadeType = new CascadeType();
+                            cascadeType.setCascadeAll(new EmptyType());
+                            rightOneToOne.setCascade(cascadeType);
+                        }
+                        rightEntity.getAttributes().getOneToOne().add(rightOneToOne);
+                    }
+                } else if (leftIsOne && !rightIsOne) {
+                    //
+                    // one-to-many
+                    //
+
+                    // left
+                    if (leftEntity != null) {
+                        OneToMany leftOneToMany = new OneToMany();
+                        leftOneToMany.setName(leftFieldName);
+                        // mapped by only required for bi-directional
+                        if (rightFieldName != null) {
+                            leftOneToMany.setMappedBy(rightFieldName);
+                        }
+                        if (leftCascade) {
+                            // todo simplify cmrType in jaxb tree
+                            CascadeType cascadeType = new CascadeType();
+                            cascadeType.setCascadeAll(new EmptyType());
+                            leftOneToMany.setCascade(cascadeType);
+                        }
+                        leftEntity.getAttributes().getOneToMany().add(leftOneToMany);
+                    }
+
+                    // right
+                    ManyToOne rightManyToOne = new ManyToOne();
+                    rightManyToOne.setName(rightFieldName);
+                    rightEntity.getAttributes().getManyToOne().add(rightManyToOne);
+                } else if (!leftIsOne && rightIsOne) {
+                    //
+                    // many-to-one
+                    //
+
+                    // left
+                    ManyToOne leftManyToOne = new ManyToOne();
+                    leftManyToOne.setName(leftFieldName);
+                    leftEntity.getAttributes().getManyToOne().add(leftManyToOne);
+
+                    // right
+                    OneToMany rightOneToMany = new OneToMany();
+                    rightOneToMany.setName(rightFieldName);
+                    // mapped by only required for bi-directional
+                    if (leftFieldName != null) {
+                        rightOneToMany.setMappedBy(leftFieldName);
+                    }
+                    if (rightCascade) {
+                        // todo simplify cmrType in jaxb tree
+                        CascadeType cascadeType = new CascadeType();
+                        cascadeType.setCascadeAll(new EmptyType());
+                        rightOneToMany.setCascade(cascadeType);
+                    }
+                    rightEntity.getAttributes().getOneToMany().add(rightOneToMany);
+
+                } else if (!leftIsOne && !rightIsOne) {
+                    //
+                    // many-to-many
+                    //
+
+                    // left
+                    ManyToMany leftManyToMany = new ManyToMany();
+                    leftManyToMany.setName(leftFieldName);
+                    if (leftCascade) {
+                        // todo simplify cmrType in jaxb tree
+                        CascadeType cascadeType = new CascadeType();
+                        cascadeType.setCascadeAll(new EmptyType());
+                        leftManyToMany.setCascade(cascadeType);
+                    }
+                    leftEntity.getAttributes().getManyToMany().add(leftManyToMany);
+
+
+                    // right
+                    ManyToMany rightManyToMany = new ManyToMany();
+                    rightManyToMany.setName(rightFieldName);
+                    // mapped by only required for bi-directional
+                    if (leftFieldName != null) {
+                        rightManyToMany.setMappedBy(leftFieldName);
+                    }
+                    if (rightCascade) {
+                        // todo simplify cmrType in jaxb tree
+                        CascadeType cascadeType = new CascadeType();
+                        cascadeType.setCascadeAll(new EmptyType());
+                        rightManyToMany.setCascade(cascadeType);
+                    }
+                    rightEntity.getAttributes().getManyToMany().add(rightManyToMany);
+                }
+            }
+        }
+
+        //
+        // transient: non-persistent fields
+        //
+        // todo scan class file for fields that are not cmp-fields or cmr-fields
+        return entityMappings;
+    }
+
+    private <T> void marshalAndUnmarshal(Class<T> type, String xmlFileName) throws JAXBException, IOException {
+        JAXBContext ctx = JAXBContext.newInstance(type);
+        Unmarshaller unmarshaller = ctx.createUnmarshaller();
+
+        InputStream in = this.getClass().getClassLoader().getResourceAsStream(xmlFileName);
+        String expected = readContent(in);
+
+        Object object = unmarshaller.unmarshal(new ByteArrayInputStream(expected.getBytes()));
+//        JAXBElement element =  (JAXBElement) object;
+        unmarshaller.setEventHandler(new TestValidationEventHandler());
+//        T app = (T) element.getValue();
+//        System.out.println("unmarshalled");
+
+        Marshaller marshaller = ctx.createMarshaller();
+        marshaller.setProperty("jaxb.formatted.output", true);
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        marshaller.marshal(object, baos);
+
+        String actual = new String(baos.toByteArray());
+
+        assertEquals(expected, actual);
+    }
+
+    private static class TestValidationEventHandler implements ValidationEventHandler {
+        public boolean handleEvent(ValidationEvent validationEvent) {
+            System.out.println(validationEvent.getMessage());
+            return true;
+        }
+    }
+    private String readContent(InputStream in) throws IOException {
+        StringBuffer sb = new StringBuffer();
+        in = new BufferedInputStream(in);
+        int i = in.read();
+        while (i != -1) {
+            sb.append((char) i);
+            i = in.read();
+        }
+        return sb.toString();
+    }
+
+}

Added: incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/resources/ejb-jar-cmp-example1.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/resources/ejb-jar-cmp-example1.xml?view=auto&rev=499616
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/resources/ejb-jar-cmp-example1.xml (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/resources/ejb-jar-cmp-example1.xml Wed Jan 24 15:39:14 2007
@@ -0,0 +1,807 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.0" metadata-complete="true">
+    <description>This ejb-jar file contains assembled enterprise beans that are part of employee self-service application.</description>
+    <enterprise-beans>
+        <entity>
+            <description>The EmployeeRecord entity bean encapsulates access to the employee records.The deployer will use container-managed persistence to integrate the entity bean with the back-end system managing the employee records.</description>
+            <ejb-name>BasicCmpBean</ejb-name>
+            <home>org.apache.openejb.test.entity.cmp.BasicCmpHome</home>
+            <remote>org.apache.openejb.test.entity.cmp.BasicCmpObject</remote>
+            <ejb-class>org.apache.openejb.test.entity.cmp.BasicCmpBean</ejb-class>
+            <persistence-type>Container</persistence-type>
+            <prim-key-class>java.lang.Integer</prim-key-class>
+            <reentrant>false</reentrant>
+            <cmp-version>1.x</cmp-version>
+            <primkey-field>primaryKey</primkey-field>
+            <resource-ref>
+                <description>This is a reference to a JDBC database.</description>
+                <res-ref-name>jdbc/basic/entityDatabase</res-ref-name>
+                <res-type>javax.sql.DataSource</res-type>
+                <res-auth>Container</res-auth>
+                <res-sharing-scope>Shareable</res-sharing-scope>
+            </resource-ref>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+        </entity>
+        <entity>
+            <ejb-name>BasicCmp2Bean</ejb-name>
+            <home>org.apache.openejb.test.entity.cmp.BasicCmpHome</home>
+            <remote>org.apache.openejb.test.entity.cmp.BasicCmpObject</remote>
+            <ejb-class>org.apache.openejb.test.entity.cmp.BasicCmp2Bean</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>
+            <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>
+            <primkey-field>id</primkey-field>
+            <resource-ref>
+                <description>This is a reference to a JDBC database.</description>
+                <res-ref-name>jdbc/basic/entityDatabase</res-ref-name>
+                <res-type>javax.sql.DataSource</res-type>
+                <res-auth>Container</res-auth>
+                <res-sharing-scope>Shareable</res-sharing-scope>
+            </resource-ref>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+        </entity>
+        <entity>
+            <description>blah, blah, blah</description>
+            <ejb-name>AOBasicCmpBean</ejb-name>
+            <home>org.apache.openejb.test.entity.cmp.BasicCmpHome</home>
+            <remote>org.apache.openejb.test.entity.cmp.BasicCmpObject</remote>
+            <ejb-class>org.apache.openejb.test.entity.cmp.AllowedOperationsCmpBean</ejb-class>
+            <persistence-type>Container</persistence-type>
+            <prim-key-class>java.lang.Integer</prim-key-class>
+            <reentrant>false</reentrant>
+            <cmp-version>1.x</cmp-version>
+            <primkey-field>primaryKey</primkey-field>
+            <resource-ref>
+                <description>This is a reference to a JDBC database.</description>
+                <res-ref-name>jdbc/basic/entityDatabase</res-ref-name>
+                <res-type>javax.sql.DataSource</res-type>
+                <res-auth>Container</res-auth>
+                <res-sharing-scope>Shareable</res-sharing-scope>
+            </resource-ref>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+        </entity>
+        <entity>
+            <description>blah, blah, blah</description>
+            <ejb-name>AOBasicCmp2Bean</ejb-name>
+            <home>org.apache.openejb.test.entity.cmp.BasicCmpHome</home>
+            <remote>org.apache.openejb.test.entity.cmp.BasicCmpObject</remote>
+            <ejb-class>org.apache.openejb.test.entity.cmp.AllowedOperationsCmp2Bean</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>
+            <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>
+            <primkey-field>id</primkey-field>
+            <resource-ref>
+                <description>This is a reference to a JDBC database.</description>
+                <res-ref-name>jdbc/basic/entityDatabase</res-ref-name>
+                <res-type>javax.sql.DataSource</res-type>
+                <res-auth>Container</res-auth>
+                <res-sharing-scope>Shareable</res-sharing-scope>
+            </resource-ref>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+        </entity>
+        <entity>
+            <description>blah, blah, blah</description>
+            <ejb-name>EncCmpBean</ejb-name>
+            <home>org.apache.openejb.test.entity.cmp.EncCmpHome</home>
+            <remote>org.apache.openejb.test.entity.cmp.EncCmpObject</remote>
+            <ejb-class>org.apache.openejb.test.entity.cmp.EncCmpBean</ejb-class>
+            <persistence-type>Container</persistence-type>
+            <prim-key-class>java.lang.Integer</prim-key-class>
+            <reentrant>false</reentrant>
+            <cmp-version>1.x</cmp-version>
+            <primkey-field>primaryKey</primkey-field>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Boolean</env-entry-name>
+                <env-entry-type>java.lang.Boolean</env-entry-type>
+                <env-entry-value>true</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/String</env-entry-name>
+                <env-entry-type>java.lang.String</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Double</env-entry-name>
+                <env-entry-type>java.lang.Double</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Long</env-entry-name>
+                <env-entry-type>java.lang.Long</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Float</env-entry-name>
+                <env-entry-type>java.lang.Float</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Integer</env-entry-name>
+                <env-entry-type>java.lang.Integer</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Short</env-entry-name>
+                <env-entry-type>java.lang.Short</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Byte</env-entry-name>
+                <env-entry-type>java.lang.Byte</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Character</env-entry-name>
+                <env-entry-type>java.lang.Character</env-entry-type>
+                <env-entry-value>D</env-entry-value>
+            </env-entry>
+            <ejb-ref>
+                <ejb-ref-name>entity/cmp/beanReferences/cmp_entity</ejb-ref-name>
+                <ejb-ref-type>Entity</ejb-ref-type>
+                <home>org.apache.openejb.test.entity.cmp.BasicCmpHome</home>
+                <remote>org.apache.openejb.test.entity.cmp.BasicCmpObject</remote>
+                <ejb-link>BasicCmpBean</ejb-link>
+            </ejb-ref>
+            <ejb-ref>
+                <ejb-ref-name>entity/cmp/beanReferences/stateful</ejb-ref-name>
+                <ejb-ref-type>Session</ejb-ref-type>
+                <home>org.apache.openejb.test.stateful.BasicStatefulHome</home>
+                <remote>org.apache.openejb.test.stateful.BasicStatefulObject</remote>
+                <ejb-link>BasicStatefulBean</ejb-link>
+            </ejb-ref>
+            <ejb-ref>
+                <ejb-ref-name>entity/cmp/beanReferences/stateless</ejb-ref-name>
+                <ejb-ref-type>Session</ejb-ref-type>
+                <home>org.apache.openejb.test.stateless.BasicStatelessHome</home>
+                <remote>org.apache.openejb.test.stateless.BasicStatelessObject</remote>
+                <ejb-link>BasicStatelessBean</ejb-link>
+            </ejb-ref>
+            <resource-ref>
+                <res-ref-name>datasource</res-ref-name>
+                <res-type>javax.sql.DataSource</res-type>
+                <res-auth>Container</res-auth>
+                <res-sharing-scope>Shareable</res-sharing-scope>
+            </resource-ref>
+            <resource-ref>
+                <res-ref-name>jdbc/basic/entityDatabase</res-ref-name>
+                <res-type>javax.sql.DataSource</res-type>
+                <res-auth>Container</res-auth>
+                <res-sharing-scope>Shareable</res-sharing-scope>
+            </resource-ref>
+            <persistence-context-ref>
+                <description>Persistence context for testing the functionality.</description>
+                <persistence-context-ref-name>persistence/TestContext</persistence-context-ref-name>
+                <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
+            </persistence-context-ref>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+            <persistence-unit-ref>
+                <description>Persistence unit for testing the functionality.</description>
+                <persistence-unit-ref-name>persistence/TestUnit</persistence-unit-ref-name>
+                <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
+            </persistence-unit-ref>
+        </entity>
+        <entity>
+            <description>blah, blah, blah</description>
+            <ejb-name>EncCmp2Bean</ejb-name>
+            <home>org.apache.openejb.test.entity.cmp.EncCmpHome</home>
+            <remote>org.apache.openejb.test.entity.cmp.EncCmpObject</remote>
+            <ejb-class>org.apache.openejb.test.entity.cmp.EncCmp2Bean</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>
+            <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>
+            <primkey-field>id</primkey-field>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Boolean</env-entry-name>
+                <env-entry-type>java.lang.Boolean</env-entry-type>
+                <env-entry-value>true</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/String</env-entry-name>
+                <env-entry-type>java.lang.String</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Double</env-entry-name>
+                <env-entry-type>java.lang.Double</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Long</env-entry-name>
+                <env-entry-type>java.lang.Long</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Float</env-entry-name>
+                <env-entry-type>java.lang.Float</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Integer</env-entry-name>
+                <env-entry-type>java.lang.Integer</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Short</env-entry-name>
+                <env-entry-type>java.lang.Short</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Byte</env-entry-name>
+                <env-entry-type>java.lang.Byte</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <ejb-ref>
+                <ejb-ref-name>entity/cmp/beanReferences/cmp_entity</ejb-ref-name>
+                <ejb-ref-type>Entity</ejb-ref-type>
+                <home>org.apache.openejb.test.entity.cmp.BasicCmpHome</home>
+                <remote>org.apache.openejb.test.entity.cmp.BasicCmpObject</remote>
+                <ejb-link>BasicCmpBean</ejb-link>
+            </ejb-ref>
+            <ejb-ref>
+                <ejb-ref-name>entity/cmp/beanReferences/stateful</ejb-ref-name>
+                <ejb-ref-type>Session</ejb-ref-type>
+                <home>org.apache.openejb.test.stateful.BasicStatefulHome</home>
+                <remote>org.apache.openejb.test.stateful.BasicStatefulObject</remote>
+                <ejb-link>BasicStatefulBean</ejb-link>
+            </ejb-ref>
+            <ejb-ref>
+                <ejb-ref-name>entity/cmp/beanReferences/stateless</ejb-ref-name>
+                <ejb-ref-type>Session</ejb-ref-type>
+                <home>org.apache.openejb.test.stateless.BasicStatelessHome</home>
+                <remote>org.apache.openejb.test.stateless.BasicStatelessObject</remote>
+                <ejb-link>BasicStatelessBean</ejb-link>
+            </ejb-ref>
+            <resource-ref>
+                <res-ref-name>datasource</res-ref-name>
+                <res-type>javax.sql.DataSource</res-type>
+                <res-auth>Container</res-auth>
+                <res-sharing-scope>Shareable</res-sharing-scope>
+            </resource-ref>
+            <resource-ref>
+                <res-ref-name>jdbc/basic/entityDatabase</res-ref-name>
+                <res-type>javax.sql.DataSource</res-type>
+                <res-auth>Container</res-auth>
+                <res-sharing-scope>Shareable</res-sharing-scope>
+            </resource-ref>
+            <persistence-context-ref>
+                <description>Persistence context for testing the functionality.</description>
+                <persistence-context-ref-name>persistence/TestContext</persistence-context-ref-name>
+                <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
+            </persistence-context-ref>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+            <persistence-unit-ref>
+                <description>Persistence unit for testing the functionality.</description>
+                <persistence-unit-ref-name>persistence/TestUnit</persistence-unit-ref-name>
+                <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
+            </persistence-unit-ref>
+        </entity>
+        <entity>
+            <description>blah, blah, blah</description>
+            <ejb-name>ContextLookupCmpBean</ejb-name>
+            <home>org.apache.openejb.test.entity.cmp.EncCmpHome</home>
+            <remote>org.apache.openejb.test.entity.cmp.EncCmpObject</remote>
+            <ejb-class>org.apache.openejb.test.entity.cmp.ContextLookupCmpBean</ejb-class>
+            <persistence-type>Container</persistence-type>
+            <prim-key-class>java.lang.Integer</prim-key-class>
+            <reentrant>false</reentrant>
+            <primkey-field>primaryKey</primkey-field>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Boolean</env-entry-name>
+                <env-entry-type>java.lang.Boolean</env-entry-type>
+                <env-entry-value>true</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/String</env-entry-name>
+                <env-entry-type>java.lang.String</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Double</env-entry-name>
+                <env-entry-type>java.lang.Double</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Long</env-entry-name>
+                <env-entry-type>java.lang.Long</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Float</env-entry-name>
+                <env-entry-type>java.lang.Float</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Integer</env-entry-name>
+                <env-entry-type>java.lang.Integer</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Short</env-entry-name>
+                <env-entry-type>java.lang.Short</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Byte</env-entry-name>
+                <env-entry-type>java.lang.Byte</env-entry-type>
+                <env-entry-value>1</env-entry-value>
+            </env-entry>
+            <env-entry>
+                <env-entry-name>entity/cmp/references/Character</env-entry-name>
+                <env-entry-type>java.lang.Character</env-entry-type>
+                <env-entry-value>D</env-entry-value>
+            </env-entry>
+            <ejb-ref>
+                <ejb-ref-name>entity/cmp/beanReferences/cmp_entity</ejb-ref-name>
+                <ejb-ref-type>Entity</ejb-ref-type>
+                <home>org.apache.openejb.test.entity.cmp.BasicCmpHome</home>
+                <remote>org.apache.openejb.test.entity.cmp.BasicCmpObject</remote>
+                <ejb-link>BasicCmpBean</ejb-link>
+            </ejb-ref>
+            <ejb-ref>
+                <ejb-ref-name>entity/cmp/beanReferences/stateful</ejb-ref-name>
+                <ejb-ref-type>Session</ejb-ref-type>
+                <home>org.apache.openejb.test.stateful.BasicStatefulHome</home>
+                <remote>org.apache.openejb.test.stateful.BasicStatefulObject</remote>
+                <ejb-link>BasicStatefulBean</ejb-link>
+            </ejb-ref>
+            <ejb-ref>
+                <ejb-ref-name>entity/cmp/beanReferences/stateless</ejb-ref-name>
+                <ejb-ref-type>Session</ejb-ref-type>
+                <home>org.apache.openejb.test.stateless.BasicStatelessHome</home>
+                <remote>org.apache.openejb.test.stateless.BasicStatelessObject</remote>
+                <ejb-link>BasicStatelessBean</ejb-link>
+            </ejb-ref>
+            <resource-ref>
+                <res-ref-name>datasource</res-ref-name>
+                <res-type>javax.sql.DataSource</res-type>
+                <res-auth>Container</res-auth>
+                <res-sharing-scope>Shareable</res-sharing-scope>
+            </resource-ref>
+            <resource-ref>
+                <res-ref-name>jdbc/basic/entityDatabase</res-ref-name>
+                <res-type>javax.sql.DataSource</res-type>
+                <res-auth>Container</res-auth>
+                <res-sharing-scope>Shareable</res-sharing-scope>
+            </resource-ref>
+            <persistence-context-ref>
+                <description>Persistence context for testing the functionality.</description>
+                <persistence-context-ref-name>persistence/TestContext</persistence-context-ref-name>
+                <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
+            </persistence-context-ref>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+            <persistence-unit-ref>
+                <description>Persistence unit for testing the functionality.</description>
+                <persistence-unit-ref-name>persistence/TestUnit</persistence-unit-ref-name>
+                <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
+            </persistence-unit-ref>
+        </entity>
+        <entity>
+            <description>blah, blah, blah</description>
+            <ejb-name>Cmp RMI-IIOP Bean</ejb-name>
+            <home>org.apache.openejb.test.entity.cmp.RmiIiopCmpHome</home>
+            <remote>org.apache.openejb.test.entity.cmp.RmiIiopCmpObject</remote>
+            <ejb-class>org.apache.openejb.test.entity.cmp.RmiIiopCmpBean</ejb-class>
+            <persistence-type>Container</persistence-type>
+            <prim-key-class>java.lang.Integer</prim-key-class>
+            <reentrant>false</reentrant>
+            <cmp-version>1.x</cmp-version>
+            <primkey-field>primaryKey</primkey-field>
+            <ejb-ref>
+                <ejb-ref-name>cmp/rmi-iiop/home</ejb-ref-name>
+                <ejb-ref-type>Entity</ejb-ref-type>
+                <home>org.apache.openejb.test.entity.cmp.EncCmpHome</home>
+                <remote>org.apache.openejb.test.entity.cmp.EncCmpObject</remote>
+                <ejb-link>EncCmpBean</ejb-link>
+            </ejb-ref>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+            <security-role-ref>
+                <role-name>TheMan</role-name>
+                <role-link>Executive</role-link>
+            </security-role-ref>
+        </entity>
+        <entity>
+            <description>blah, blah, blah</description>
+            <ejb-name>Cmp2 RMI-IIOP Bean</ejb-name>
+            <home>org.apache.openejb.test.entity.cmp.RmiIiopCmpHome</home>
+            <remote>org.apache.openejb.test.entity.cmp.RmiIiopCmpObject</remote>
+            <ejb-class>org.apache.openejb.test.entity.cmp.RmiIiopCmp2Bean</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>
+            <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>
+            <primkey-field>id</primkey-field>
+            <ejb-ref>
+                <ejb-ref-name>cmp/rmi-iiop/home</ejb-ref-name>
+                <ejb-ref-type>Entity</ejb-ref-type>
+                <home>org.apache.openejb.test.entity.cmp.EncCmpHome</home>
+                <remote>org.apache.openejb.test.entity.cmp.EncCmpObject</remote>
+                <ejb-link>EncCmpBean</ejb-link>
+            </ejb-ref>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+            <security-role-ref>
+                <role-name>TheMan</role-name>
+                <role-link>Executive</role-link>
+            </security-role-ref>
+        </entity>
+        <entity>
+            <ejb-name>OneToOneA</ejb-name>
+            <local-home>org.apache.openejb.test.entity.cmr.onetoone.ALocalHome</local-home>
+            <local>org.apache.openejb.test.entity.cmr.onetoone.ALocal</local>
+            <ejb-class>org.apache.openejb.test.entity.cmr.onetoone.ABean</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>OneToOneA</abstract-schema-name>
+            <cmp-field>
+                <field-name>field1</field-name>
+            </cmp-field>
+            <cmp-field>
+                <field-name>field2</field-name>
+            </cmp-field>
+            <primkey-field>field1</primkey-field>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+            <query>
+                <query-method>
+                    <method-name>findByPrimaryKey</method-name>
+                    <method-params>
+                        <method-param>org.apache.openejb.deployment.entity.cmr.CompoundPK</method-param>
+                    </method-params>
+                </query-method>
+                <ejb-ql>SELECT OBJECT(A) FROM OneToOneA A</ejb-ql>
+            </query>
+        </entity>
+        <entity>
+            <ejb-name>OneToOneB</ejb-name>
+            <local-home>org.apache.openejb.test.entity.cmr.onetoone.BLocalHome</local-home>
+            <local>org.apache.openejb.test.entity.cmr.onetoone.BLocal</local>
+            <ejb-class>org.apache.openejb.test.entity.cmr.onetoone.BBean</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>OneToOneB</abstract-schema-name>
+            <cmp-field>
+                <field-name>field1</field-name>
+            </cmp-field>
+            <cmp-field>
+                <field-name>field2</field-name>
+            </cmp-field>
+            <cmp-field>
+                <field-name>field3</field-name>
+            </cmp-field>
+            <cmp-field>
+                <field-name>field4</field-name>
+            </cmp-field>
+            <primkey-field>field1</primkey-field>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+            <query>
+                <query-method>
+                    <method-name>findByPrimaryKey</method-name>
+                    <method-params>
+                        <method-param>org.apache.openejb.deployment.entity.cmr.CompoundPK</method-param>
+                    </method-params>
+                </query-method>
+                <ejb-ql>SELECT OBJECT(B) FROM OneToOneB B</ejb-ql>
+            </query>
+        </entity>
+        <entity>
+            <ejb-name>OneToManyA</ejb-name>
+            <local-home>org.apache.openejb.test.entity.cmr.onetomany.ALocalHome</local-home>
+            <local>org.apache.openejb.test.entity.cmr.onetomany.ALocal</local>
+            <ejb-class>org.apache.openejb.test.entity.cmr.onetomany.ABean</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>OneToManyA</abstract-schema-name>
+            <cmp-field>
+                <field-name>field1</field-name>
+            </cmp-field>
+            <cmp-field>
+                <field-name>field2</field-name>
+            </cmp-field>
+            <primkey-field>field1</primkey-field>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+            <query>
+                <query-method>
+                    <method-name>findByPrimaryKey</method-name>
+                    <method-params>
+                        <method-param>org.apache.openejb.deployment.entity.cmr.CompoundPK</method-param>
+                    </method-params>
+                </query-method>
+                <ejb-ql>SELECT OBJECT(A) FROM OneToManyA A</ejb-ql>
+            </query>
+        </entity>
+        <entity>
+            <ejb-name>OneToManyB</ejb-name>
+            <local-home>org.apache.openejb.test.entity.cmr.onetomany.BLocalHome</local-home>
+            <local>org.apache.openejb.test.entity.cmr.onetomany.BLocal</local>
+            <ejb-class>org.apache.openejb.test.entity.cmr.onetomany.BBean</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>OneToManyB</abstract-schema-name>
+            <cmp-field>
+                <field-name>field1</field-name>
+            </cmp-field>
+            <cmp-field>
+                <field-name>field2</field-name>
+            </cmp-field>
+            <cmp-field>
+                <field-name>field3</field-name>
+            </cmp-field>
+            <cmp-field>
+                <field-name>field4</field-name>
+            </cmp-field>
+            <primkey-field>field1</primkey-field>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+            <query>
+                <query-method>
+                    <method-name>findByPrimaryKey</method-name>
+                    <method-params>
+                        <method-param>org.apache.openejb.deployment.entity.cmr.CompoundPK</method-param>
+                    </method-params>
+                </query-method>
+                <ejb-ql>SELECT OBJECT(B) FROM OneToManyB B</ejb-ql>
+            </query>
+        </entity>
+        <entity>
+            <ejb-name>OneOwningSideBean</ejb-name>
+            <local-home>org.apache.openejb.test.entity.cmr.cmrmapping.OneOwningSideLocalHome</local-home>
+            <local>org.apache.openejb.test.entity.cmr.cmrmapping.OneOwningSideLocal</local>
+            <ejb-class>org.apache.openejb.test.entity.cmr.cmrmapping.OneOwningSideBean</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>OneOwningSideBean</abstract-schema-name>
+            <cmp-field>
+                <field-name>id</field-name>
+            </cmp-field>
+            <cmp-field>
+                <field-name>field1</field-name>
+            </cmp-field>
+            <primkey-field>id</primkey-field>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+        </entity>
+        <entity>
+            <ejb-name>OneInverseSideBean</ejb-name>
+            <local-home>org.apache.openejb.test.entity.cmr.cmrmapping.OneInverseSideLocalHome</local-home>
+            <local>org.apache.openejb.test.entity.cmr.cmrmapping.OneInverseSideLocal</local>
+            <ejb-class>org.apache.openejb.test.entity.cmr.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>OneInverseSideBean</abstract-schema-name>
+            <cmp-field>
+                <field-name>id</field-name>
+            </cmp-field>
+            <primkey-field>id</primkey-field>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+        </entity>
+        <entity>
+            <ejb-name>ManyOwningSideBean</ejb-name>
+            <local-home>org.apache.openejb.test.entity.cmr.cmrmapping.ManyOwningSideLocalHome</local-home>
+            <local>org.apache.openejb.test.entity.cmr.cmrmapping.ManyOwningSideLocal</local>
+            <ejb-class>org.apache.openejb.test.entity.cmr.cmrmapping.ManyOwningSideBean</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>ManyOwningSideBean</abstract-schema-name>
+            <cmp-field>
+                <field-name>id</field-name>
+            </cmp-field>
+            <cmp-field>
+                <field-name>field1</field-name>
+            </cmp-field>
+            <primkey-field>id</primkey-field>
+            <persistence-context-ref>
+                <persistence-context-ref-name>openejb/cmp</persistence-context-ref-name>
+                <persistence-unit-name>cmp</persistence-unit-name>
+            </persistence-context-ref>
+            <query>
+                <query-method>
+                    <method-name>ejbSelectSomething</method-name>
+                    <method-params>
+                        <method-param>java.lang.Integer</method-param>
+                    </method-params>
+                </query-method>
+                <ejb-ql>SELECT m.oneInverseSide FROM Order m WHERE m.id = ?1</ejb-ql>
+            </query>
+        </entity>
+    </enterprise-beans>
+    <relationships>
+        <ejb-relation>
+            <ejb-relationship-role>
+                <multiplicity>One</multiplicity>
+                <cascade-delete/>
+                <relationship-role-source>
+                    <ejb-name>OneToOneA</ejb-name>
+                </relationship-role-source>
+                <cmr-field>
+                    <cmr-field-name>b</cmr-field-name>
+                </cmr-field>
+            </ejb-relationship-role>
+            <ejb-relationship-role>
+                <multiplicity>One</multiplicity>
+                <relationship-role-source>
+                    <ejb-name>OneToOneB</ejb-name>
+                </relationship-role-source>
+                <cmr-field>
+                    <cmr-field-name>a</cmr-field-name>
+                </cmr-field>
+            </ejb-relationship-role>
+        </ejb-relation>
+        <ejb-relation>
+            <ejb-relationship-role>
+                <multiplicity>One</multiplicity>
+                <cascade-delete/>
+                <relationship-role-source>
+                    <ejb-name>OneToManyA</ejb-name>
+                </relationship-role-source>
+                <cmr-field>
+                    <cmr-field-name>b</cmr-field-name>
+                    <cmr-field-type>java.util.Set</cmr-field-type>
+                </cmr-field>
+            </ejb-relationship-role>
+            <ejb-relationship-role>
+                <multiplicity>Many</multiplicity>
+                <relationship-role-source>
+                    <ejb-name>OneToManyB</ejb-name>
+                </relationship-role-source>
+                <cmr-field>
+                    <cmr-field-name>a</cmr-field-name>
+                </cmr-field>
+            </ejb-relationship-role>
+        </ejb-relation>
+        <ejb-relation>
+            <ejb-relationship-role>
+                <multiplicity>One</multiplicity>
+                <relationship-role-source>
+                    <ejb-name>OneToManyA</ejb-name>
+                </relationship-role-source>
+                <cmr-field>
+                    <cmr-field-name>bNonCascade</cmr-field-name>
+                    <cmr-field-type>java.util.Set</cmr-field-type>
+                </cmr-field>
+            </ejb-relationship-role>
+            <ejb-relationship-role>
+                <multiplicity>Many</multiplicity>
+                <relationship-role-source>
+                    <ejb-name>OneToManyB</ejb-name>
+                </relationship-role-source>
+                <cmr-field>
+                    <cmr-field-name>aNonCascade</cmr-field-name>
+                </cmr-field>
+            </ejb-relationship-role>
+        </ejb-relation>
+        <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>
+</ejb-jar>