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/26 06:11:15 UTC

svn commit: r500146 - in /incubator/openejb/trunk/openejb3/container/openejb-core/src: main/java/org/apache/openejb/config/ test/java/org/apache/openejb/config/ test/resources/convert/oej2/cmp/itest-2.2/

Author: dain
Date: Thu Jan 25 21:11:14 2007
New Revision: 500146

URL: http://svn.apache.org/viewvc?view=rev&rev=500146
Log:
Added detection of transient fields.
Cleaned up generation of id declarations

Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/OpenEjb2CmpConversion.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/Cmp2ConversionTest.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/convert/oej2/cmp/itest-2.2/itest-2.2-orm.xml

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java?view=diff&rev=500146&r1=500145&r2=500146
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java Thu Jan 25 21:11:14 2007
@@ -19,6 +19,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.lang.reflect.Field;
 
 import org.apache.openejb.jee.CmpField;
 import org.apache.openejb.jee.EjbJar;
@@ -29,6 +32,7 @@
 import org.apache.openejb.jee.PersistenceType;
 import org.apache.openejb.jee.RelationshipRoleSource;
 import org.apache.openejb.jee.Relationships;
+import org.apache.openejb.jee.PersistenceContextRef;
 import org.apache.openejb.jee.jpa.EntityMappings;
 import org.apache.openejb.jee.jpa.Entity;
 import org.apache.openejb.jee.jpa.Attributes;
@@ -40,9 +44,10 @@
 import org.apache.openejb.jee.jpa.ManyToMany;
 import org.apache.openejb.jee.jpa.RelationField;
 import org.apache.openejb.jee.jpa.CascadeType;
+import org.apache.openejb.jee.jpa.Transient;
 
 public class CmpJpaConversion {
-    public EntityMappings generateEntityMappings(EjbJar ejbJar) {
+    public EntityMappings generateEntityMappings(EjbJar ejbJar, ClassLoader classLoader) {
         EntityMappings entityMappings = new EntityMappings();
         Map<String, Entity> entitiesByName = new HashMap<String,Entity>();
         for (org.apache.openejb.jee.EnterpriseBean enterpriseBean : ejbJar.getEnterpriseBeans()) {
@@ -76,13 +81,22 @@
             entity.setAttributes(attributes);
 
             //
+            // Map fields remembering the names of the mapped fields
+            //
+            Set<String> persistantFields = new TreeSet<String>();
+
+            //
             // id: the primary key
             //
-            Id id = new Id();
-            // todo complex primary key
-            // todo unknown primary key
-            id.setName(bean.getPrimkeyField());
-            attributes.getId().add(id);
+            if (bean.getPrimkeyField() != null) {
+                Id id = new Id();
+                id.setName(bean.getPrimkeyField());
+                attributes.getId().add(id);
+                persistantFields.add(bean.getPrimkeyField());
+            } else {
+                // todo complex primary key
+                // todo unknown primary key                
+            }
 
             //
             // basic: cmp-fields
@@ -92,12 +106,35 @@
                 if (!cmpField.getFieldName().equals(bean.getPrimkeyField())) {
                     basic.setName(cmpField.getFieldName());
                     attributes.getBasic().add(basic);
+                    persistantFields.add(cmpField.getFieldName());
                 }
             }
 
             // add the entity
             entityMappings.getEntity().add(entity);
             entitiesByName.put(bean.getEjbName(), entity);
+
+            // add the persistence-context-ref
+            addPersistenceContextRef(bean);
+
+            //
+            // transient: non-persistent fields
+            //
+            if (classLoader != null) {
+                String ejbClassName = bean.getEjbClass();
+                try {
+                    Class ejbClass = classLoader.loadClass(ejbClassName);
+                    for (Field field : ejbClass.getDeclaredFields()) {
+                        if (!persistantFields.contains(field.getName())) {
+                            Transient transientField = new Transient();
+                            transientField.setName(field.getName());
+                            attributes.getTransient().add(transientField);
+                        }
+                    }
+                } catch (ClassNotFoundException e) {
+                    // todo warn
+                }
+            }
         }
 
         Relationships relationships = ejbJar.getRelationships();
@@ -261,11 +298,19 @@
             }
         }
 
-        //
-        // transient: non-persistent fields
-        //
-        // todo scan class file for fields that are not cmp-fields or cmr-fields and mark them transient
+
         return entityMappings;
+    }
+
+    private void addPersistenceContextRef(EntityBean bean) {
+        for (PersistenceContextRef ref : bean.getPersistenceContextRef()) {
+            // if a ref is already defined, skip this bean
+            if (ref.getName().equals("openejb/cmp")) return;
+        }
+        PersistenceContextRef persistenceContextRef = new PersistenceContextRef();
+        persistenceContextRef.setName("openejb/cmp");
+        persistenceContextRef.setPersistenceUnitName("cmp");
+        bean.getPersistenceContextRef().add(persistenceContextRef);
     }
 
     private void setCascade(EjbRelationshipRole role, RelationField field) {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/OpenEjb2CmpConversion.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/OpenEjb2CmpConversion.java?view=diff&rev=500146&r1=500145&r2=500146
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/OpenEjb2CmpConversion.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/OpenEjb2CmpConversion.java Thu Jan 25 21:11:14 2007
@@ -64,10 +64,8 @@
 
             for (EntityBeanType.CmpFieldMapping cmpFieldMapping : bean.getCmpFieldMapping()) {
                 String cmpFieldName = cmpFieldMapping.getCmpFieldName();
-                Field field;
-                if (cmpFieldName.equals(entityData.id.getName())) {
-                    field = entityData.id;
-                } else {
+                Field field = entityData.ids.get(cmpFieldName);
+                if (field == null) {
                     field = entityData.fields.get(cmpFieldName);
                 }
 
@@ -218,14 +216,16 @@
 
     private class EntityData {
         private final Entity entity;
-        private final Id id;
+        private final Map<String, Id> ids = new TreeMap<String, Id>();
         private final Map<String, Basic> fields = new TreeMap<String, Basic>();
         private final Map<String, RelationField> relations = new TreeMap<String, RelationField>();
 
         public EntityData(Entity entity) {
             this.entity = entity;
 
-            id = entity.getAttributes().getId().get(0);
+            for (Id id : entity.getAttributes().getId()) {
+                ids.put(id.getName(), id);
+            }
 
             Attributes attributes = entity.getAttributes();
             if (attributes == null) {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/Cmp2ConversionTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/Cmp2ConversionTest.java?view=diff&rev=500146&r1=500145&r2=500146
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/Cmp2ConversionTest.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/Cmp2ConversionTest.java Thu Jan 25 21:11:14 2007
@@ -81,7 +81,7 @@
         InputStream in = getClass().getClassLoader().getResourceAsStream(ejbJarFileName);
         EjbJar ejbJar = (EjbJar) JaxbJavaee.unmarshal(EjbJar.class, new ByteArrayInputStream(readContent(in).getBytes()));
         CmpJpaConversion cmpJpaConversion = new CmpJpaConversion();
-        EntityMappings entityMappings = cmpJpaConversion.generateEntityMappings(ejbJar);
+        EntityMappings entityMappings = cmpJpaConversion.generateEntityMappings(ejbJar, getClass().getClassLoader());
 
         String openejbJarXml = readContent(getClass().getClassLoader().getResourceAsStream(openejbJarFileName));
         JAXBElement element = (JAXBElement) JaxbOpenejbJar2.unmarshal(OpenejbJarType.class, new ByteArrayInputStream(openejbJarXml.getBytes()));

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/convert/oej2/cmp/itest-2.2/itest-2.2-orm.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/convert/oej2/cmp/itest-2.2/itest-2.2-orm.xml?view=diff&rev=500146&r1=500145&r2=500146
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/convert/oej2/cmp/itest-2.2/itest-2.2-orm.xml (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/convert/oej2/cmp/itest-2.2/itest-2.2-orm.xml Thu Jan 25 21:11:14 2007
@@ -14,6 +14,9 @@
             <basic name="lastName">
                 <column name="last_name"/>
             </basic>
+            <transient name="primaryKey"/>
+            <transient name="ejbContext"/>
+            <transient name="allowedOperationsTable"/>
         </attributes>
     </entity>
     <entity name="BasicCmpBeanExplicitPK" class="org.apache.openejb.test.entity.cmp.BasicCmpBean">
@@ -29,6 +32,9 @@
             <basic name="lastName">
                 <column name="last_name"/>
             </basic>
+            <transient name="primaryKey"/>
+            <transient name="ejbContext"/>
+            <transient name="allowedOperationsTable"/>
         </attributes>
     </entity>
     <entity name="AOBasicCmpBean" class="org.apache.openejb.test.entity.cmp.AllowedOperationsCmpBean">
@@ -45,6 +51,9 @@
             <basic name="lastName">
                 <column name="last_name"/>
             </basic>
+            <transient name="primaryKey"/>
+            <transient name="ejbContext"/>
+            <transient name="allowedOperationsTable"/>
         </attributes>
     </entity>
     <entity name="EncCmpBean" class="org.apache.openejb.test.entity.cmp.EncCmpBean">
@@ -61,6 +70,8 @@
             <basic name="lastName">
                 <column name="last_name"/>
             </basic>
+            <transient name="primaryKey"/>
+            <transient name="ejbContext"/>
         </attributes>
     </entity>
     <entity name="CmpRMIIIOPBean" class="org.apache.openejb.test.entity.cmp.RmiIiopCmpBean">
@@ -77,6 +88,8 @@
             <basic name="lastName">
                 <column name="last_name"/>
             </basic>
+            <transient name="primaryKey"/>
+            <transient name="ejbContext"/>
         </attributes>
     </entity>
     <entity name="BasicCmp2" class="org.apache.openejb.test.entity.cmp.BasicCmp2Bean">
@@ -93,6 +106,8 @@
             <basic name="lastName">
                 <column name="last_name"/>
             </basic>
+            <transient name="ejbContext"/>
+            <transient name="allowedOperationsTable"/>
         </attributes>
     </entity>
     <entity name="AOBasicCmp2" class="org.apache.openejb.test.entity.cmp.AllowedOperationsCmp2Bean">
@@ -109,6 +124,8 @@
             <basic name="lastName">
                 <column name="last_name"/>
             </basic>
+            <transient name="ejbContext"/>
+            <transient name="allowedOperationsTable"/>
         </attributes>
     </entity>
     <entity name="EncCmp2" class="org.apache.openejb.test.entity.cmp.EncCmp2Bean">
@@ -125,6 +142,7 @@
             <basic name="lastName">
                 <column name="last_name"/>
             </basic>
+            <transient name="ejbContext"/>
         </attributes>
     </entity>
     <entity name="Cmp2RmiIiop" class="org.apache.openejb.test.entity.cmp.RmiIiopCmp2Bean">
@@ -141,13 +159,13 @@
             <basic name="lastName">
                 <column name="last_name"/>
             </basic>
+            <transient name="ejbContext"/>
         </attributes>
     </entity>
     <entity name="Order" class="org.apache.openejb.test.entity.cmp2.cmrmapping.OneOwningSideBean">
         <description>OneOwningSideBean</description>
         <table name="OneOwning"/>
         <attributes>
-            <id/>
             <basic name="id">
                 <column name="col_id"/>
             </basic>
@@ -174,7 +192,6 @@
         <description>ManyOwningSideBean</description>
         <table name="ManyOwning"/>
         <attributes>
-            <id/>
             <basic name="id">
                 <column name="col_id"/>
             </basic>
@@ -190,7 +207,6 @@
         <description>AddressEJB</description>
         <table name="address"/>
         <attributes>
-            <id/>
             <basic name="street">
                 <column name="street"/>
             </basic>
@@ -214,4 +230,4 @@
             </basic>
         </attributes>
     </entity>
-</entity-mappings>
+</entity-mappings>
\ No newline at end of file