ResourceFactorypublic class ResourceFactory extends Object implements ObjectFactoryObject factory for Resources. |
Methods Summary |
---|
public java.lang.Object | getObjectInstance(java.lang.Object obj, javax.naming.Name name, javax.naming.Context nameCtx, java.util.Hashtable environment)Crete a new DataSource instance.
if (obj instanceof ResourceRef) {
Reference ref = (Reference) obj;
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) {
NamingException ex = new NamingException
("Could not load resource factory class");
ex.initCause(e);
throw ex;
}
} else {
try {
factoryClass = Class.forName(factoryClassName);
} catch(ClassNotFoundException e) {
NamingException ex = new NamingException
("Could not load resource factory class");
ex.initCause(e);
throw ex;
}
}
if (factoryClass != null) {
try {
factory = (ObjectFactory) factoryClass.newInstance();
} catch (Throwable t) {
if (t instanceof NamingException)
throw (NamingException) t;
NamingException ex = new NamingException
("Could not create resource factory instance");
ex.initCause(t);
throw ex;
}
}
} else {
if (ref.getClassName().equals("javax.sql.DataSource")) {
String javaxSqlDataSourceFactoryClassName =
System.getProperty("javax.sql.DataSource.Factory",
Constants.DBCP_DATASOURCE_FACTORY);
try {
factory = (ObjectFactory)
Class.forName(javaxSqlDataSourceFactoryClassName)
.newInstance();
} catch (Throwable t) {
NamingException ex = new NamingException
("Could not create resource factory instance");
ex.initCause(t);
throw ex;
}
} else if (ref.getClassName().equals("javax.mail.Session")) {
String javaxMailSessionFactoryClassName =
System.getProperty("javax.mail.Session.Factory",
"org.apache.naming.factory.MailSessionFactory");
try {
factory = (ObjectFactory)
Class.forName(javaxMailSessionFactoryClassName)
.newInstance();
} catch(Throwable t) {
NamingException ex = new NamingException
("Could not create resource factory instance");
ex.initCause(t);
throw ex;
}
}
}
if (factory != null) {
return factory.getObjectInstance
(obj, name, nameCtx, environment);
} else {
throw new NamingException
("Cannot create resource instance");
}
}
return null;
|
|