gdamour     2005/02/20 10:44:50

  Modified:    modules/openejb-builder/src/java/org/openejb/deployment
                        CMPContainerBuilder.java CMPEntityBuilder.java
                        OpenEJBModuleBuilder.java
  Log:

  o Add a db-syntax-factory optional element. It corresponds to a database
  syntax factory.
  
  This is used to support discrepencies between various DB and JDBC providers.
  
  For instance, the CONCAT and SUBSTRING functions need to be escaped in the
  case of Derby and not in the case of Oracle.
  
  The default syntax is set to Derby.
  
  o Add a ejb-ql-compiler-factory optional element. It corresponds to the
  strategy used to compile EJB QL queries.
  
  This is used to support discrepencies between the operations supported by
  various DB providers.
  
  For instance, a SELECT OBJECT(A) FROM AASN AS A, IN(A.toB) B may produce
  two SQL queries: one with an INNER JOIN if supported by the DB or a CROSS JOIN
  with the relevant conditions appended to the WHERE clause.
  
  The default compiler strategy is set to Derby.
  
  o PrimaryKeyGenerator.getNextPrimaryKey() throws now a
  DuplicateIdentityException; update accordingly the code.
  
  Revision  Changes    Path
  1.14      +2 -2      
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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- CMPContainerBuilder.java  19 Feb 2005 18:24:43 -0000      1.13
  +++ CMPContainerBuilder.java  20 Feb 2005 15:44:49 -0000      1.14
  @@ -135,8 +135,8 @@
   import org.tranql.schema.Association;
   import org.tranql.schema.Attribute;
   import org.tranql.schema.Schema;
  +import org.tranql.sql.EJBQLToPhysicalQuery;
   import org.tranql.sql.SQLSchema;
  -import org.tranql.sql.sql92.EJBQLToPhysicalQuery;
   
   /**
    * @version $Revision$ $Date$
  
  
  
  1.18      +7 -8      
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.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- CMPEntityBuilder.java     16 Feb 2005 06:12:38 -0000      1.17
  +++ CMPEntityBuilder.java     20 Feb 2005 15:44:50 -0000      1.18
  @@ -106,7 +106,6 @@
   import org.tranql.sql.Table;
   import org.tranql.sql.TypeConverter;
   import org.tranql.sql.jdbc.SQLTypeLoader;
  -import org.tranql.sql.sql92.SQL92Schema;
   
   
   /**
  @@ -117,7 +116,7 @@
           super(builder);
       }
   
  -    protected void buildBeans(EARContext earContext, J2eeContext 
moduleJ2eeContext, ClassLoader cl, EJBModule ejbModule, EJBSchema ejbSchema, 
SQL92Schema sqlSchema, GlobalSchema globalSchema, Map openejbBeans, 
TransactionPolicyHelper transactionPolicyHelper, Security security, 
EnterpriseBeansType enterpriseBeans, TransactionManagerDelegate tmDelegate) 
throws DeploymentException {
  +    protected void buildBeans(EARContext earContext, J2eeContext 
moduleJ2eeContext, ClassLoader cl, EJBModule ejbModule, EJBSchema ejbSchema, 
SQLSchema sqlSchema, GlobalSchema globalSchema, Map openejbBeans, 
TransactionPolicyHelper transactionPolicyHelper, Security security, 
EnterpriseBeansType enterpriseBeans, TransactionManagerDelegate tmDelegate) 
throws DeploymentException {
           // CMP Entity Beans
           EntityBeanType[] entityBeans = enterpriseBeans.getEntityArray();
           for (int i = 0; i < entityBeans.length; i++) {
  @@ -137,7 +136,7 @@
       }
       
   
  -    public void buildCMPSchema(EARContext earContext, J2eeContext 
moduleJ2eeContext, EjbJarType ejbJar, OpenejbOpenejbJarType openejbEjbJar, 
ClassLoader cl, EJBSchema ejbSchema, SQL92Schema sqlSchema, GlobalSchema 
globalSchema) throws DeploymentException {
  +    public void buildCMPSchema(EARContext earContext, J2eeContext 
moduleJ2eeContext, EjbJarType ejbJar, OpenejbOpenejbJarType openejbEjbJar, 
ClassLoader cl, EJBSchema ejbSchema, SQLSchema sqlSchema, GlobalSchema 
globalSchema) throws DeploymentException {
           try {
               processEnterpriseBeans(earContext, moduleJ2eeContext, ejbJar, 
openejbEjbJar, cl, ejbSchema, sqlSchema);
               processRelationships(ejbJar, openejbEjbJar, ejbSchema, 
sqlSchema);
  @@ -147,7 +146,7 @@
           }
       }
   
  -    private void processEnterpriseBeans(EARContext earContext, J2eeContext 
moduleJ2eeContext, EjbJarType ejbJar, OpenejbOpenejbJarType openejbEjbJar, 
ClassLoader cl, EJBSchema ejbSchema, SQL92Schema sqlSchema) throws 
DeploymentException {
  +    private void processEnterpriseBeans(EARContext earContext, J2eeContext 
moduleJ2eeContext, EjbJarType ejbJar, OpenejbOpenejbJarType openejbEjbJar, 
ClassLoader cl, EJBSchema ejbSchema, SQLSchema sqlSchema) throws 
DeploymentException {
           Map openEjbEntities = new HashMap();
           OpenejbEntityBeanType[] openEJBEntities = 
openejbEjbJar.getEnterpriseBeans().getEntityArray();
           for (int i = 0; i < openEJBEntities.length; i++) {
  @@ -413,7 +412,7 @@
           }
       }
       
  -    private void processRelationships(EjbJarType ejbJar, 
OpenejbOpenejbJarType openejbEjbJar, EJBSchema ejbSchema, SQL92Schema 
sqlSchema) throws DeploymentException {
  +    private void processRelationships(EjbJarType ejbJar, 
OpenejbOpenejbJarType openejbEjbJar, EJBSchema ejbSchema, SQLSchema sqlSchema) 
throws DeploymentException {
           if ( !ejbJar.isSetRelationships() ) {
               return;
           } else if ( !openejbEjbJar.isSetRelationships() ) {
  @@ -488,7 +487,7 @@
           return roleInfo;
       }
   
  -    private void extractJoinInfo(RoleInfo[] roleInfo, String mtmEntityName, 
EJBSchema ejbSchema, SQL92Schema sqlSchema, OpenejbEjbRelationshipRoleType 
role) throws DeploymentException {
  +    private void extractJoinInfo(RoleInfo[] roleInfo, String mtmEntityName, 
EJBSchema ejbSchema, SQLSchema sqlSchema, OpenejbEjbRelationshipRoleType role) 
throws DeploymentException {
           String ejbName = role.getRelationshipRoleSource().getEjbName();
           String cmrFieldName = null;
           if ( role.isSetCmrField() ) {
  @@ -557,7 +556,7 @@
           mappedRoleInfo[0].tableJDef = new 
JoinDefinition(mappedRoleInfo[0].table, fkTable, pkToFkMapTable);
       }
   
  -    private void buildSchemaForJoin(RoleInfo[] roleInfo, String 
mtmEntityName, EJBSchema ejbSchema, SQL92Schema sqlSchema, int id) {
  +    private void buildSchemaForJoin(RoleInfo[] roleInfo, String 
mtmEntityName, EJBSchema ejbSchema, SQLSchema sqlSchema, int id) {
           Relationship relationship;
           JoinTable joinTable;
           if (null == mtmEntityName) {
  
  
  
  1.29      +44 -3     
openejb/modules/openejb-builder/src/java/org/openejb/deployment/OpenEJBModuleBuilder.java
  
  Index: OpenEJBModuleBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/OpenEJBModuleBuilder.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- OpenEJBModuleBuilder.java 19 Feb 2005 20:22:58 -0000      1.28
  +++ OpenEJBModuleBuilder.java 20 Feb 2005 15:44:50 -0000      1.29
  @@ -50,6 +50,7 @@
   
   import java.io.File;
   import java.io.IOException;
  +import java.lang.reflect.Constructor;
   import java.net.URI;
   import java.net.URISyntaxException;
   import java.net.URL;
  @@ -58,6 +59,7 @@
   import java.util.Map;
   import java.util.Set;
   import java.util.jar.JarFile;
  +
   import javax.management.MalformedObjectNameException;
   import javax.management.ObjectName;
   import javax.naming.Reference;
  @@ -106,8 +108,13 @@
   import org.tranql.cache.SimpleFlushStrategyFactory;
   import org.tranql.ejb.EJBSchema;
   import org.tranql.ejb.TransactionManagerDelegate;
  +import org.tranql.ejbqlcompiler.DerbyDBSyntaxtFactory;
  +import org.tranql.ejbqlcompiler.DerbyEJBQLCompilerFactory;
  +import org.tranql.sql.BaseSQLSchema;
  +import org.tranql.sql.DBSyntaxFactory;
   import org.tranql.sql.DataSourceDelegate;
  -import org.tranql.sql.sql92.SQL92Schema;
  +import org.tranql.sql.EJBQLCompilerFactory;
  +import org.tranql.sql.SQLSchema;
   
   
   /**
  @@ -377,7 +384,41 @@
           EJBSchema ejbSchema = new EJBSchema(module.getName());
           TransactionManagerDelegate tmDelegate = new 
TransactionManagerDelegate();
           DataSourceDelegate delegate = new DataSourceDelegate();
  -        SQL92Schema sqlSchema = new SQL92Schema(module.getName(), delegate);
  +
  +        EJBQLCompilerFactory compilerFactory = new 
DerbyEJBQLCompilerFactory();
  +        try {
  +            if (openejbEjbJar.isSetEjbQlCompilerFactory()) {
  +                String className = 
openejbEjbJar.getEjbQlCompilerFactory().toString();
  +                Class clazz = cl.loadClass(className);
  +                Constructor constructor = clazz.getConstructor(null);
  +                Object factory = constructor.newInstance(null);
  +                if (false == factory instanceof EJBQLCompilerFactory) {
  +                    throw new DeploymentException("EJBQLCompilerFactory 
expected. was=" + factory);
  +                }
  +                compilerFactory = (EJBQLCompilerFactory) factory;
  +            }
  +        } catch (Exception e) {
  +            throw new DeploymentException("Can not initialize 
ejb-ql-compiler-factory=" + openejbEjbJar.getEjbQlCompilerFactory(), e);
  +        }
  +        
  +        DBSyntaxFactory syntaxFactory = new DerbyDBSyntaxtFactory();
  +        try {
  +            if (openejbEjbJar.isSetDbSyntaxFactory()) {
  +                String className = 
openejbEjbJar.getDbSyntaxFactory().toString();
  +                Class clazz = cl.loadClass(className);
  +                Constructor constructor = clazz.getConstructor(null);
  +                Object factory = constructor.newInstance(null);
  +                if (false == factory instanceof DBSyntaxFactory) {
  +                    throw new DeploymentException("DBSyntaxFactory expected. 
was=" + factory);
  +                }
  +                syntaxFactory = (DBSyntaxFactory) factory;
  +            }
  +        } catch (Exception e) {
  +            throw new DeploymentException("Can not initialize 
ejb-ql-compiler-factory=" + openejbEjbJar.getEjbQlCompilerFactory(), e);
  +        }
  +        
  +        SQLSchema sqlSchema = new BaseSQLSchema(module.getName(), delegate, 
syntaxFactory, compilerFactory);
  +        
           GlobalSchema globalSchema = new GlobalSchema(module.getName(), 
flushStrategyFactory);
   
           GBeanData ejbModuleGBeanData = new GBeanData(ejbModuleObjectName, 
EJBModuleImpl.GBEAN_INFO);
  
  
  

Reply via email to