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;
  
  
  

Reply via email to