gdamour 2005/01/30 01:02:35
Modified: modules/openejb-builder/src/java/org/openejb/deployment
CMPContainerBuilder.java CMPEntityBuilder.java
Log:
This is principally a commit to reflect some recent TranQL API changes.
o IdentityDefinerBuilder.getIdentityDefiner takes now as formal parameter
Entity and takes an additional constructor parameter.
o Fix the way MTM entities are created and added to their corresponding
schemata. The previous implementation was not able to accommodate the same
MTM table for more than one MTM relationship.
Revision Changes Path
1.9 +5 -5
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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- CMPContainerBuilder.java 26 Jan 2005 15:13:20 -0000 1.8
+++ CMPContainerBuilder.java 30 Jan 2005 06:02:35 -0000 1.9
@@ -212,8 +212,8 @@
EJBProxyFactory proxyFactory = (EJBProxyFactory)
ejb.getProxyFactory();
- IdentityDefinerBuilder identityDefinerBuilder = new
IdentityDefinerBuilder(globalSchema);
- EJBQueryBuilder queryBuilder = new EJBQueryBuilder(ejbSchema,
identityDefinerBuilder);
+ IdentityDefinerBuilder identityDefinerBuilder = new
IdentityDefinerBuilder(ejbSchema, globalSchema);
+ EJBQueryBuilder queryBuilder = new
EJBQueryBuilder(identityDefinerBuilder);
CommandTransform mapper = new SchemaMapper(sqlSchema);
CacheTable cacheTable = (CacheTable)
globalSchema.getEntity(getEJBName());
@@ -341,7 +341,7 @@
}
private LinkedHashMap createCMRFieldAccessors() throws Exception {
- IdentityDefinerBuilder identityDefinerBuilder = new
IdentityDefinerBuilder(globalSchema);
+ IdentityDefinerBuilder identityDefinerBuilder = new
IdentityDefinerBuilder(ejbSchema, globalSchema);
IdentityDefiner identityDefiner =
identityDefinerBuilder.getIdentityDefiner(ejb);
SchemaMapper mapper = new SchemaMapper(sqlSchema);
@@ -396,7 +396,7 @@
}
private FaultHandler buildFaultHandler(AssociationEndFaultHandlerBuilder
handlerBuilder, CMRField field, int slot) throws UndefinedIdentityException,
QueryException {
- IdentityDefinerBuilder identityDefinerBuilder = new
IdentityDefinerBuilder(globalSchema);
+ IdentityDefinerBuilder identityDefinerBuilder = new
IdentityDefinerBuilder(ejbSchema, globalSchema);
Association association = field.getAssociation();
CMRField relatedField = (CMRField) association.getOtherEnd(field);
EJB relatedEJB = (EJB) field.getEntity();
1.15 +27 -13
openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPEntityBuilder.java
Index: CMPEntityBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPEntityBuilder.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- CMPEntityBuilder.java 26 Jan 2005 15:13:20 -0000 1.14
+++ CMPEntityBuilder.java 30 Jan 2005 06:02:35 -0000 1.15
@@ -96,6 +96,7 @@
import org.tranql.ejb.SelectEJBQLQuery;
import org.tranql.ejb.TransactionManagerDelegate;
import org.tranql.pkgenerator.PrimaryKeyGeneratorDelegate;
+import org.tranql.schema.Association;
import org.tranql.schema.Association.JoinDefinition;
import org.tranql.sql.Column;
import org.tranql.sql.EndTable;
@@ -415,11 +416,6 @@
}
}
- OpenejbEjbRelationshipRoleType[] openEjbRoles =
openEjbRelation.getEjbRelationshipRoleArray();
- for (int j = 0; j < openEjbRoles.length; j++) {
- extractJoinInfo(roleInfo, openEjbRoles[j]);
- }
-
String mtmTableName = null;
if ( !roleInfo[0].isOne && !roleInfo[1].isOne ) {
if ( !openEjbRelation.isSetManyToManyTableName() ) {
@@ -428,6 +424,11 @@
}
mtmTableName = openEjbRelation.getManyToManyTableName();
}
+
+ OpenejbEjbRelationshipRoleType[] openEjbRoles =
openEjbRelation.getEjbRelationshipRoleArray();
+ for (int j = 0; j < openEjbRoles.length; j++) {
+ extractJoinInfo(roleInfo, mtmTableName, ejbSchema,
sqlSchema, openEjbRoles[j]);
+ }
buildSchemaForJoin(roleInfo, mtmTableName, ejbSchema, sqlSchema,
i);
}
@@ -451,7 +452,7 @@
return roleInfo;
}
- private void extractJoinInfo(RoleInfo[] roleInfo,
OpenejbEjbRelationshipRoleType role) throws DeploymentException {
+ private void extractJoinInfo(RoleInfo[] roleInfo, String mtmEntityName,
EJBSchema ejbSchema, SQL92Schema sqlSchema, OpenejbEjbRelationshipRoleType
role) throws DeploymentException {
String ejbName = role.getRelationshipRoleSource().getEjbName();
String cmrFieldName = null;
if ( role.isSetCmrField() ) {
@@ -501,8 +502,23 @@
pkToFkMapTable.put(att, column);
}
- mappedRoleInfo[0].ejbJDef = new
JoinDefinition(mappedRoleInfo[0].ejb, mappedRoleInfo[1].ejb, pkToFkMapEJB);
- mappedRoleInfo[0].tableJDef = new
JoinDefinition(mappedRoleInfo[0].table, mappedRoleInfo[1].table,
pkToFkMapTable);
+ EJB fkEJB = mappedRoleInfo[1].ejb;
+ Table fkTable = mappedRoleInfo[1].table;
+ if (null != mtmEntityName) {
+ fkEJB = ejbSchema.getEJB(mtmEntityName);
+ if (null == fkEJB) {
+ fkEJB = new EJB(mtmEntityName, mtmEntityName);
+ ejbSchema.addEJB(fkEJB);
+ }
+ fkTable = sqlSchema.getTable(mtmEntityName);
+ if (null == fkTable) {
+ fkTable = new Table(mtmEntityName);
+ sqlSchema.addTable(fkTable);
+ }
+ }
+
+ mappedRoleInfo[0].ejbJDef = new
JoinDefinition(mappedRoleInfo[0].ejb, fkEJB, pkToFkMapEJB);
+ mappedRoleInfo[0].tableJDef = new
JoinDefinition(mappedRoleInfo[0].table, fkTable, pkToFkMapTable);
}
private void buildSchemaForJoin(RoleInfo[] roleInfo, String
mtmEntityName, EJBSchema ejbSchema, SQL92Schema sqlSchema, int id) {
@@ -517,12 +533,10 @@
joinTable = new JoinTable(roleInfo[1].tableJDef);
}
} else {
- EJB mtmEJB = new EJB(mtmEntityName, mtmEntityName);
+ EJB mtmEJB = ejbSchema.getEJB(mtmEntityName);
relationship = new Relationship(mtmEJB, roleInfo[0].ejbJDef,
roleInfo[1].ejbJDef);
- Table mtmTable = new Table(mtmEntityName);
+ Table mtmTable = sqlSchema.getTable(mtmEntityName);
joinTable = new JoinTable(mtmTable, roleInfo[0].tableJDef,
roleInfo[1].tableJDef);
- ejbSchema.addEJB(mtmEJB);
- sqlSchema.addTable(mtmTable);
}
boolean isVirtual = null == roleInfo[0].cmrFieldName;