remm        01/01/14 21:12:31

  Modified:    catalina/src/share/org/apache/naming/factory Constants.java
                        EjbFactory.java ResourceEnvFactory.java
                        ResourceFactory.java TransactionFactory.java
  Log:
  - Make the object factories easily pluggable.
  - Now, the default factories will look for a RefAddr in the Reference which
    contains the classname of the factory to use. This can be set using the
    ResourceParams element in server.xml.
  - Will attempt to load the factory using the thread's context class loader, so
    that it can load classes from the webapp's classloader repositories.
  
  Revision  Changes    Path
  1.2       +5 -3      
jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/Constants.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Constants.java    2000/11/04 06:46:09     1.1
  +++ Constants.java    2001/01/15 05:12:28     1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/Constants.java,v
 1.1 2000/11/04 06:46:09 remm Exp $
  - * $Revision: 1.1 $
  - * $Date: 2000/11/04 06:46:09 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/Constants.java,v
 1.2 2001/01/15 05:12:28 remm Exp $
  + * $Revision: 1.2 $
  + * $Date: 2001/01/15 05:12:28 $
    *
    * ====================================================================
    *
  @@ -92,5 +92,7 @@
           Package + ".TyrexTransactionFactory";
   
       public static final String OBJECT_FACTORIES = "";
  +
  +    public static final String FACTORY = "factory";
   
   }
  
  
  
  1.2       +40 -5     
jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/EjbFactory.java
  
  Index: EjbFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/EjbFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- EjbFactory.java   2000/11/04 06:46:09     1.1
  +++ EjbFactory.java   2001/01/15 05:12:29     1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/EjbFactory.java,v
 1.1 2000/11/04 06:46:09 remm Exp $
  - * $Revision: 1.1 $
  - * $Date: 2000/11/04 06:46:09 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/EjbFactory.java,v
 1.2 2001/01/15 05:12:29 remm Exp $
  + * $Revision: 1.2 $
  + * $Date: 2001/01/15 05:12:29 $
    *
    * ====================================================================
    *
  @@ -77,7 +77,7 @@
    * Object factory for EJBs.
    * 
    * @author Remy Maucherat
  - * @version $Revision: 1.1 $ $Date: 2000/11/04 06:46:09 $
  + * @version $Revision: 1.2 $ $Date: 2001/01/15 05:12:29 $
    */
   
   public class EjbFactory
  @@ -106,11 +106,46 @@
        */
       public Object getObjectInstance(Object obj, Name name, Context nameCtx,
                                       Hashtable environment)
  -        throws NamingException {
  +        throws Exception {
           
           if (obj instanceof EjbRef) {
               Reference ref = (Reference) obj;
  -            // Does nothing yet
  +            ObjectFactory factory = null;
  +            RefAddr factoryRefAddr = ref.get(Constants.FACTORY);
  +            if (factoryRefAddr != null) {
  +                // Using the specified factory
  +                String factoryClassName = 
  +                    factoryRefAddr.getContent().toString();
  +                // Loading factory
  +                ClassLoader tcl = 
  +                    Thread.currentThread().getContextClassLoader();
  +                Class factoryClass = null;
  +                if (tcl != null) {
  +                    try {
  +                        factoryClass = tcl.loadClass(factoryClassName);
  +                    } catch(ClassNotFoundException e) {
  +                    }
  +                } else {
  +                    try {
  +                        factoryClass = Class.forName(factoryClassName);
  +                    } catch(ClassNotFoundException e) {
  +                    }
  +                }
  +                if (factoryClass != null) {
  +                    try {
  +                        factory = (ObjectFactory) factoryClass.newInstance();
  +                    } catch(Throwable t) {
  +                    }
  +                }
  +            }
  +            // Note: No defaults here
  +            if (factory != null) {
  +                return factory.getObjectInstance
  +                    (obj, name, nameCtx, environment);
  +            } else {
  +                throw new NamingException
  +                    ("Cannot create resource instance");
  +            }
           }
   
           return null;
  
  
  
  1.2       +40 -5     
jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/ResourceEnvFactory.java
  
  Index: ResourceEnvFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/ResourceEnvFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ResourceEnvFactory.java   2000/11/04 06:46:09     1.1
  +++ ResourceEnvFactory.java   2001/01/15 05:12:29     1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/ResourceEnvFactory.java,v
 1.1 2000/11/04 06:46:09 remm Exp $
  - * $Revision: 1.1 $
  - * $Date: 2000/11/04 06:46:09 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/ResourceEnvFactory.java,v
 1.2 2001/01/15 05:12:29 remm Exp $
  + * $Revision: 1.2 $
  + * $Date: 2001/01/15 05:12:29 $
    *
    * ====================================================================
    *
  @@ -77,7 +77,7 @@
    * Object factory for Resources env.
    * 
    * @author Remy Maucherat
  - * @version $Revision: 1.1 $ $Date: 2000/11/04 06:46:09 $
  + * @version $Revision: 1.2 $ $Date: 2001/01/15 05:12:29 $
    */
   
   public class ResourceEnvFactory
  @@ -106,11 +106,46 @@
        */
       public Object getObjectInstance(Object obj, Name name, Context nameCtx,
                                       Hashtable environment)
  -        throws NamingException {
  +        throws Exception {
           
           if (obj instanceof ResourceEnvRef) {
               Reference ref = (Reference) obj;
  -            // Does nothing yet
  +            ObjectFactory factory = null;
  +            RefAddr factoryRefAddr = ref.get(Constants.FACTORY);
  +            if (factoryRefAddr != null) {
  +                // Using the specified factory
  +                String factoryClassName = 
  +                    factoryRefAddr.getContent().toString();
  +                // Loading factory
  +                ClassLoader tcl = 
  +                    Thread.currentThread().getContextClassLoader();
  +                Class factoryClass = null;
  +                if (tcl != null) {
  +                    try {
  +                        factoryClass = tcl.loadClass(factoryClassName);
  +                    } catch(ClassNotFoundException e) {
  +                    }
  +                } else {
  +                    try {
  +                        factoryClass = Class.forName(factoryClassName);
  +                    } catch(ClassNotFoundException e) {
  +                    }
  +                }
  +                if (factoryClass != null) {
  +                    try {
  +                        factory = (ObjectFactory) factoryClass.newInstance();
  +                    } catch(Throwable t) {
  +                    }
  +                }
  +            }
  +            // Note: No defaults here
  +            if (factory != null) {
  +                return factory.getObjectInstance
  +                    (obj, name, nameCtx, environment);
  +            } else {
  +                throw new NamingException
  +                    ("Cannot create resource instance");
  +            }
           }
   
           return null;
  
  
  
  1.3       +49 -22    
jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/ResourceFactory.java
  
  Index: ResourceFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/ResourceFactory.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ResourceFactory.java      2000/11/28 05:42:17     1.2
  +++ ResourceFactory.java      2001/01/15 05:12:29     1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/ResourceFactory.java,v
 1.2 2000/11/28 05:42:17 remm Exp $
  - * $Revision: 1.2 $
  - * $Date: 2000/11/28 05:42:17 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/ResourceFactory.java,v
 1.3 2001/01/15 05:12:29 remm Exp $
  + * $Revision: 1.3 $
  + * $Date: 2001/01/15 05:12:29 $
    *
    * ====================================================================
    *
  @@ -77,7 +77,7 @@
    * Object factory for Resources.
    * 
    * @author Remy Maucherat
  - * @version $Revision: 1.2 $ $Date: 2000/11/28 05:42:17 $
  + * @version $Revision: 1.3 $ $Date: 2001/01/15 05:12:29 $
    */
   
   public class ResourceFactory
  @@ -110,28 +110,55 @@
           
           if (obj instanceof ResourceRef) {
               Reference ref = (Reference) obj;
  -            if (ref.getClassName().equals("javax.sql.DataSource")) {
  -                // Checking the different known resource factories
  -                ObjectFactory factory = null;
  -                String javaxSqlDataSourceFactoryClassName =
  -                    System.getProperty("javax.sql.DataSource.Factory",
  -                                       Constants.TYREX_DATASOURCE_FACTORY);
  -                try {
  -                    factory = (ObjectFactory) 
  -                        Class.forName(javaxSqlDataSourceFactoryClassName)
  -                        .newInstance();
  -                } catch(Throwable t) {
  -                }
  -                if (factory != null) {
  -                    return factory.getObjectInstance
  -                        (obj, name, nameCtx, environment);
  +            ObjectFactory factory = null;
  +            RefAddr factoryRefAddr = ref.get(Constants.FACTORY);
  +            if (factoryRefAddr != null) {
  +                // Using the specified factory
  +                String factoryClassName = 
  +                    factoryRefAddr.getContent().toString();
  +                // Loading factory
  +                ClassLoader tcl = 
  +                    Thread.currentThread().getContextClassLoader();
  +                Class factoryClass = null;
  +                if (tcl != null) {
  +                    try {
  +                        factoryClass = tcl.loadClass(factoryClassName);
  +                    } catch(ClassNotFoundException e) {
  +                    }
                   } else {
  -                    throw new NamingException
  -                        ("Cannot create resource instance");
  +                    try {
  +                        factoryClass = Class.forName(factoryClassName);
  +                    } catch(ClassNotFoundException e) {
  +                    }
  +                }
  +                if (factoryClass != null) {
  +                    try {
  +                        factory = (ObjectFactory) factoryClass.newInstance();
  +                    } catch(Throwable t) {
  +                    }
  +                }
  +            } else {
  +                if (ref.getClassName().equals("javax.sql.DataSource")) {
  +                    String javaxSqlDataSourceFactoryClassName =
  +                        System.getProperty("javax.sql.DataSource.Factory",
  +                                           Constants.TYREX_DATASOURCE_FACTORY);
  +                    try {
  +                        factory = (ObjectFactory) 
  +                            Class.forName(javaxSqlDataSourceFactoryClassName)
  +                            .newInstance();
  +                    } catch(Throwable t) {
  +                    }
                   }
               }
  +            if (factory != null) {
  +                return factory.getObjectInstance
  +                    (obj, name, nameCtx, environment);
  +            } else {
  +                throw new NamingException
  +                    ("Cannot create resource instance");
  +            }
           }
  -
  +        
           return null;
   
       }
  
  
  
  1.3       +43 -12    
jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/TransactionFactory.java
  
  Index: TransactionFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/TransactionFactory.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TransactionFactory.java   2000/11/28 05:42:17     1.2
  +++ TransactionFactory.java   2001/01/15 05:12:29     1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/TransactionFactory.java,v
 1.2 2000/11/28 05:42:17 remm Exp $
  - * $Revision: 1.2 $
  - * $Date: 2000/11/28 05:42:17 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory/TransactionFactory.java,v
 1.3 2001/01/15 05:12:29 remm Exp $
  + * $Revision: 1.3 $
  + * $Date: 2001/01/15 05:12:29 $
    *
    * ====================================================================
    *
  @@ -77,7 +77,7 @@
    * Object factory for User trasactions.
    * 
    * @author Remy Maucherat
  - * @version $Revision: 1.2 $ $Date: 2000/11/28 05:42:17 $
  + * @version $Revision: 1.3 $ $Date: 2001/01/15 05:12:29 $
    */
   
   public class TransactionFactory
  @@ -111,14 +111,44 @@
           if (obj instanceof TransactionRef) {
               Reference ref = (Reference) obj;
               ObjectFactory factory = null;
  -            String javaxTransactionUserTransactionFactoryClassName =
  -                System.getProperty("javax.transaction.UserTransaction.Factory",
  -                                   Constants.TYREX_TRANSACTION_FACTORY);
  -            try {
  -                factory = (ObjectFactory) Class.forName
  -                    (javaxTransactionUserTransactionFactoryClassName)
  -                    .newInstance();
  -            } catch(Throwable t) {
  +            RefAddr factoryRefAddr = ref.get(Constants.FACTORY);
  +            if (factoryRefAddr != null) {
  +                // Using the specified factory
  +                String factoryClassName = 
  +                    factoryRefAddr.getContent().toString();
  +                // Loading factory
  +                ClassLoader tcl = 
  +                    Thread.currentThread().getContextClassLoader();
  +                Class factoryClass = null;
  +                if (tcl != null) {
  +                    try {
  +                        factoryClass = tcl.loadClass(factoryClassName);
  +                    } catch(ClassNotFoundException e) {
  +                    }
  +                } else {
  +                    try {
  +                        factoryClass = Class.forName(factoryClassName);
  +                    } catch(ClassNotFoundException e) {
  +                    }
  +                }
  +                if (factoryClass != null) {
  +                    try {
  +                        factory = (ObjectFactory) factoryClass.newInstance();
  +                    } catch(Throwable t) {
  +                    }
  +                }
  +            } else {
  +                // Defaults to Tyrex
  +                String javaxTransactionUserTransactionFactoryClassName =
  +                    System.getProperty
  +                    ("javax.transaction.UserTransaction.Factory",
  +                     Constants.TYREX_TRANSACTION_FACTORY);
  +                try {
  +                    factory = (ObjectFactory) Class.forName
  +                        (javaxTransactionUserTransactionFactoryClassName)
  +                        .newInstance();
  +                } catch(Throwable t) {
  +                }
               }
               if (factory != null) {
                   return factory.getObjectInstance
  @@ -127,6 +157,7 @@
                   throw new NamingException
                       ("Cannot create resource instance");
               }
  +            
           }
           
           return null;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to