Author: dblevins
Date: Mon Jun  2 22:16:20 2008
New Revision: 662653

URL: http://svn.apache.org/viewvc?rev=662653&view=rev
Log:
Small refactor of the CmpJpaConversion.  Uses updated Jaxb objects with 
KeyedCollections

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/InitEjbDeployments.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java?rev=662653&r1=662652&r2=662653&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
 Mon Jun  2 22:16:20 2008
@@ -93,19 +93,6 @@
 
         if (!hasCmpEntities(appModule)) return appModule;
 
-        // search for the cmp persistence unit
-        PersistenceUnit persistenceUnit = null;
-        for (PersistenceModule persistenceModule : 
appModule.getPersistenceModules()) {
-            Persistence persistence = persistenceModule.getPersistence();
-            for (PersistenceUnit unit : persistence.getPersistenceUnit()) {
-                if (CMP_PERSISTENCE_UNIT_NAME.equals(unit.getName())) {
-                    persistenceUnit = unit;
-                    break;
-                }
-
-            }
-        }
-
         // todo scan existing persistence module for all entity mappings and 
don't generate mappings for them
 
 
@@ -122,28 +109,8 @@
         }
 
         if (!cmpMappings.getEntity().isEmpty()) {
-            // if not found create one
-            if (persistenceUnit == null) {
-                persistenceUnit = new PersistenceUnit();
-                persistenceUnit.setName(CMP_PERSISTENCE_UNIT_NAME);
-                persistenceUnit.setTransactionType(TransactionType.JTA);
-                // Don't set default values here, let the autoconfig do that
-                // 
persistenceUnit.setJtaDataSource("java:openejb/Resource/Default JDBC Database");
-                // 
persistenceUnit.setNonJtaDataSource("java:openejb/Resource/Default Unmanaged 
JDBC Database");
-                // todo paramterize this
-                Properties properties = new Properties();
-                properties.setProperty("openjpa.jdbc.SynchronizeMappings", 
"buildSchema(ForeignKeys=true, Indexes=false, IgnoreErrors=true)");
-                // properties.setProperty("openjpa.DataCache", "false");
-                // properties.setProperty("openjpa.Log", "DefaultLevel=TRACE");
-                persistenceUnit.setProperties(properties);
-
-                Persistence persistence = new Persistence();
-                persistence.setVersion("1.0");
-                persistence.getPersistenceUnit().add(persistenceUnit);
+            PersistenceUnit persistenceUnit = getCmpPersistenceUnit(appModule);
 
-                PersistenceModule persistenceModule = new 
PersistenceModule(appModule.getModuleId(), persistence);
-                appModule.getPersistenceModules().add(persistenceModule);
-            }
             
persistenceUnit.getMappingFile().add("META-INF/openejb-cmp-generated-orm.xml");
             for (Entity entity : cmpMappings.getEntity()) {
                 persistenceUnit.getClazz().add(entity.getClazz());
@@ -153,18 +120,57 @@
         return appModule;
     }
 
+    private PersistenceUnit getCmpPersistenceUnit(AppModule appModule) {
+        // search for the cmp persistence unit
+        PersistenceUnit persistenceUnit = null;
+        for (PersistenceModule persistenceModule : 
appModule.getPersistenceModules()) {
+            Persistence persistence = persistenceModule.getPersistence();
+            for (PersistenceUnit unit : persistence.getPersistenceUnit()) {
+                if (CMP_PERSISTENCE_UNIT_NAME.equals(unit.getName())) {
+                    persistenceUnit = unit;
+                    break;
+                }
+
+            }
+        }
+        // if not found create one
+        if (persistenceUnit == null) {
+            persistenceUnit = new PersistenceUnit();
+            persistenceUnit.setName(CMP_PERSISTENCE_UNIT_NAME);
+            persistenceUnit.setTransactionType(TransactionType.JTA);
+            // Don't set default values here, let the autoconfig do that
+            // persistenceUnit.setJtaDataSource("java:openejb/Resource/Default 
JDBC Database");
+            // 
persistenceUnit.setNonJtaDataSource("java:openejb/Resource/Default Unmanaged 
JDBC Database");
+            // todo paramterize this
+            Properties properties = new Properties();
+            properties.setProperty("openjpa.jdbc.SynchronizeMappings", 
"buildSchema(ForeignKeys=true, Indexes=false, IgnoreErrors=true)");
+            // properties.setProperty("openjpa.DataCache", "false");
+            // properties.setProperty("openjpa.Log", "DefaultLevel=TRACE");
+            persistenceUnit.setProperties(properties);
+
+            Persistence persistence = new Persistence();
+            persistence.setVersion("1.0");
+            persistence.getPersistenceUnit().add(persistenceUnit);
+
+            PersistenceModule persistenceModule = new 
PersistenceModule(appModule.getModuleId(), persistence);
+            appModule.getPersistenceModules().add(persistenceModule);
+        }
+        return persistenceUnit;
+    }
+
     private boolean hasCmpEntities(AppModule appModule) {
         for (EjbModule ejbModule : appModule.getEjbModules()) {
             for (EnterpriseBean bean : 
ejbModule.getEjbJar().getEnterpriseBeans()) {
-                if (bean instanceof EntityBean) {
-                    EntityBean entityBean = (EntityBean) bean;
-                    if (entityBean.getPersistenceType() == 
PersistenceType.CONTAINER) return true;
-                }
+                if (isCmpEntity(bean)) return true;
             }
         }
         return false;
     }
 
+    private static boolean isCmpEntity(EnterpriseBean bean) {
+        return bean instanceof EntityBean && ((EntityBean) 
bean).getPersistenceType() == PersistenceType.CONTAINER;
+    }
+
     public EntityMappings generateEntityMappings(EjbModule ejbModule) throws 
OpenEJBException {
         AppModule appModule = new AppModule(ejbModule.getClassLoader(), 
ejbModule.getJarLocation());
         appModule.getEjbModules().add(ejbModule);
@@ -179,11 +185,6 @@
         OpenejbJar openejbJar = ejbModule.getOpenejbJar();
         ClassLoader classLoader = ejbModule.getClassLoader();
 
-        Map<String, MappedSuperclass> mappedSuperclassByClass = new 
TreeMap<String,MappedSuperclass>();
-        for (MappedSuperclass mappedSuperclass : 
entityMappings.getMappedSuperclass()) {
-            mappedSuperclassByClass.put(mappedSuperclass.getClazz(), 
mappedSuperclass);
-        }
-
         Map<String, Entity> entitiesByName = new TreeMap<String,Entity>();
         for (Entity entity : entityMappings.getEntity()) {
             entitiesByName.put(entity.getName(), entity);
@@ -191,23 +192,9 @@
 
         for (org.apache.openejb.jee.EnterpriseBean enterpriseBean : 
ejbJar.getEnterpriseBeans()) {
             // skip all non-CMP beans
-            if (!(enterpriseBean instanceof EntityBean) || ((EntityBean) 
enterpriseBean).getPersistenceType() != PersistenceType.CONTAINER) {
-                continue;
-            }
-            EntityBean bean = (EntityBean) enterpriseBean;
+            if (!isCmpEntity(enterpriseBean)) continue;
 
-            // Always set the abstract schema name
-            if (bean.getAbstractSchemaName() == null) {
-                String abstractSchemaName = 
bean.getEjbName().trim().replaceAll("[ \\t\\n\\r-]+", "_");
-                if (entitiesByName.containsKey(abstractSchemaName)) {
-                    int i = 2;
-                    while (entitiesByName.containsKey(abstractSchemaName + i)) 
{
-                         i++;
-                    }
-                    abstractSchemaName = abstractSchemaName + i;
-                }
-                bean.setAbstractSchemaName(abstractSchemaName);
-            }
+            EntityBean bean = (EntityBean) enterpriseBean;
 
             // try to add a new persistence-context-ref for cmp
             if (!addPersistenceContextRef(bean)) {
@@ -239,7 +226,7 @@
                 // map the cmp class, but if we are using a mapped super 
class, generate attribute-override instead of id and basic
                 Collection<MappedSuperclass> mappedSuperclasses = 
mapClass1x(bean.getEjbClass(), entity, bean, classLoader);
                 for (MappedSuperclass mappedSuperclass : mappedSuperclasses) {
-                    mappedSuperclassByClass.put(mappedSuperclass.getClazz(), 
mappedSuperclass);
+                    entityMappings.getMappedSuperclass().add(mappedSuperclass);
                 }
             }
 
@@ -293,7 +280,6 @@
                 }
             }
         }
-        
entityMappings.getMappedSuperclass().addAll(mappedSuperclassByClass.values());
 
         Relationships relationships = ejbJar.getRelationships();
         if (relationships != null) {

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/InitEjbDeployments.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/InitEjbDeployments.java?rev=662653&r1=662652&r2=662653&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/InitEjbDeployments.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/InitEjbDeployments.java
 Mon Jun  2 22:16:20 2008
@@ -27,6 +27,8 @@
 import org.apache.openejb.jee.oejb3.OpenejbJar;
 import org.apache.openejb.jee.oejb3.EjbDeployment;
 import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.EntityBean;
+import org.apache.openejb.jee.PersistenceType;
 import org.codehaus.swizzle.stream.StringTemplate;
 
 public class InitEjbDeployments implements DynamicDeployer {
@@ -88,11 +90,25 @@
                     logger.info("Auto-assigning deployment-id for ejb " + 
bean.getEjbName() + ": EjbDeployment(deployment-id=" + 
ejbDeployment.getDeploymentId() + ")");
                 }
             }
+
+            if (isCmpEntity(bean)){
+                EntityBean entity = (EntityBean) bean;
+                if (entity.getAbstractSchemaName() == null){
+                    String abstractSchemaName = 
bean.getEjbName().trim().replaceAll("[ \\t\\n\\r-]+", "_");
+                    // The AbstractSchemaName must be unique, we should check 
that it is 
+                    entity.setAbstractSchemaName(abstractSchemaName);
+                }
+            }
         }
 
         return ejbModule;
     }
 
+    private static boolean isCmpEntity(EnterpriseBean bean) {
+        return bean instanceof EntityBean && ((EntityBean) 
bean).getPersistenceType() == PersistenceType.CONTAINER;
+    }
+
+
     private String autoAssignDeploymentId(EnterpriseBean bean, Map<String, 
String> contextData, StringTemplate template) {
         contextData.put("ejbType", bean.getClass().getSimpleName());
         contextData.put("ejbClass", bean.getClass().getName());


Reply via email to