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) {
throw new NamingException(
"Could not create resource factory, ClassNotFoundException:" +
e.getMessage());
}
} else {
try {
factoryClass = Class.forName(factoryClassName);
} catch(ClassNotFoundException e) {
throw new NamingException(
"Could not create resource factory, ClassNotFoundException:" +
e.getMessage());
}
}
if (factoryClass != null) {
try {
factory = (ObjectFactory) factoryClass.newInstance();
} catch(Throwable t) {
if( t instanceof NamingException)
throw (NamingException)t;
throw new NamingException(
"Could not create resource factory instance, " +
t.getMessage());
}
}
} 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) {
}
} 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) {
}
}
}
if (factory != null) {
return factory.getObjectInstance
(obj, name, nameCtx, environment);
} else {
throw new NamingException
("Cannot create resource instance");
}
}
return null;