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