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]