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>