You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2001/01/15 06:12:31 UTC
cvs commit: jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/factory Constants.java EjbFactory.java ResourceEnvFactory.java ResourceFactory.java TransactionFactory.java
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;