gdamour 2005/12/14 08:31:32
Modified: modules/openejb-builder/src/java/org/openejb/deployment
CMPContainerBuilder.java
Log:
GERONIMO-1361 - CMP having a compound PK with only one field are not supported
As pointed out by Manu George, buildFaultHandler and createCMPFieldAccessors
should use EJB.isCompoundPK instead of the number of PK fields to identify
compound PK.
Revision Changes Path
1.32 +8 -20
openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPContainerBuilder.java
Index: CMPContainerBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPContainerBuilder.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- CMPContainerBuilder.java 19 Oct 2005 01:48:58 -0000 1.31
+++ CMPContainerBuilder.java 14 Dec 2005 13:31:32 -0000 1.32
@@ -53,6 +53,7 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import javax.management.ObjectName;
@@ -134,11 +135,9 @@
import org.tranql.field.FieldAccessor;
import org.tranql.field.FieldTransform;
import org.tranql.field.ReferenceAccessor;
-import org.tranql.identity.DerivedIdentity;
import org.tranql.identity.IdentityDefiner;
import org.tranql.identity.IdentityDefinerBuilder;
import org.tranql.identity.IdentityTransform;
-import org.tranql.identity.UserDefinedIdentity;
import org.tranql.pkgenerator.PrimaryKeyGenerator;
import org.tranql.ql.QueryException;
import org.tranql.query.QueryCommand;
@@ -150,7 +149,6 @@
import org.tranql.schema.Schema;
import org.tranql.sql.SQLQueryBuilder;
import org.tranql.sql.SQLSchema;
-import org.tranql.sql.Table;
/**
* @version $Revision$ $Date$
@@ -365,8 +363,8 @@
AssociationEnd end =
ejb.getAssociationEndDefiningFKAttribute(name);
CMPFieldTransform cmrAccessor = (CMPFieldTransform)
cmrFieldAccessor.get(end.getName());
- Entity relatedEntity = end.getEntity();
- if (1 < relatedEntity.getPrimaryKeyFields().size()) {
+ EJB relatedEJB = (EJB) end.getEntity();
+ if (relatedEJB.isCompoundPK()) {
IdentityDefiner identityDefiner =
identityDefinerBuilder.getIdentityDefiner(end.getEntity());
accessor = new
CMPFieldIdentityExtractorAccessor(cmrAccessor, identityDefiner);
@@ -384,7 +382,7 @@
accessor = new ReadOnlyCMPFieldAccessor(accessor,
attribute.getName());
} else {
- IdentityTransform transform =
identityDefinerBuilder.getPrimaryKeyTransform(relatedEntity);
+ IdentityTransform transform =
identityDefinerBuilder.getPrimaryKeyTransform(relatedEJB);
accessor = new CMPMappedToCMRAccessor(cmrAccessor,
accessor, transform);
}
} else {
@@ -487,20 +485,10 @@
Association association = field.getAssociation();
CMRField relatedField = (CMRField) association.getOtherEnd(field);
EJB relatedEJB = (EJB) field.getEntity();
- CacheTable relatedCacheTbl = (CacheTable)
globalSchema.getEntity(relatedEJB.getName());
- IdentityDefiner identityDefiner =
identityDefinerBuilder.getIdentityDefiner(relatedField.getEntity());
- List pkFields = relatedEJB.getPrimaryKeyFields();
- IdentityDefiner relatedIdentityDefiner;
- if ( 1 == pkFields.size() ) {
- relatedIdentityDefiner = new
UserDefinedIdentity(relatedCacheTbl, 0);
- } else {
- int slots[] = new int[pkFields.size()];
- for (int i = 0; i < slots.length; i++) {
- slots[i] = i;
- }
- relatedIdentityDefiner = new DerivedIdentity(relatedCacheTbl,
slots);
- }
+ IdentityDefiner identityDefiner =
identityDefinerBuilder.getIdentityDefiner(relatedField.getEntity());
+ IdentityDefiner relatedIdentityDefiner =
+ identityDefinerBuilder.getIdentityDefiner(relatedEJB, 0);
QueryCommand faultCommand =
queryBuilder.buildLoadAssociationEnd(definingEJB.getName(), field.getName(),
prefetch);
if ( field.isOneToOne() || field.isManyToOne() ) {