DataSourceObjectBuilderpublic class DataSourceObjectBuilder extends Object implements SerializableUtility class, which would create necessary Datasource object according to the
specification. |
Fields Summary |
---|
private DataSourceSpec | spec | private Hashtable | driverProperties | private com.sun.gjc.util.MethodExecutor | executor | private static Logger | _logger | private static boolean | jdbc40 | private boolean | debug | private static final com.sun.enterprise.util.i18n.StringManager | sm |
Constructors Summary |
---|
public DataSourceObjectBuilder(DataSourceSpec spec)Construct a DataSource Object from the spec.
this.spec = spec;
executor = new MethodExecutor();
|
Methods Summary |
---|
public java.lang.Object | constructDataSourceObject()Construct the DataSource Object from the spec.
driverProperties = parseDriverProperties(spec);
Object dataSourceObject = getDataSourceObject();
Method[] methods = dataSourceObject.getClass().getMethods();
for (int i = 0; i < methods.length; i++) {
String methodName = methods[i].getName();
//Check for driver properties first since some jdbc properties
//may be supported in form of driver properties
if (driverProperties.containsKey(methodName.toUpperCase())) {
Vector values = (Vector) driverProperties.get(methodName.toUpperCase());
executor.runMethod(methods[i], dataSourceObject, values);
} else if (methodName.equalsIgnoreCase("setUser")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.USERNAME), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setPassword")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.PASSWORD), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setLoginTimeOut")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.LOGINTIMEOUT), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setLogWriter")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.LOGWRITER), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setDatabaseName")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.DATABASENAME), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setDataSourceName")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.DATASOURCENAME), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setDescription")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.DESCRIPTION), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setNetworkProtocol")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.NETWORKPROTOCOL), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setPortNumber")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.PORTNUMBER), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setRoleName")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.ROLENAME), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setServerName")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.SERVERNAME), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setMaxStatements")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.MAXSTATEMENTS), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setInitialPoolSize")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.INITIALPOOLSIZE), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setMinPoolSize")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.MINPOOLSIZE), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setMaxPoolSize")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.MAXPOOLSIZE), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setMaxIdleTime")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.MAXIDLETIME), methods[i], dataSourceObject);
} else if (methodName.equalsIgnoreCase("setPropertyCycle")) {
executor.runJavaBeanMethod(spec.getDetail(DataSourceSpec.PROPERTYCYCLE), methods[i], dataSourceObject);
}
}
return dataSourceObject;
| private static boolean | detectJDBC40()Check whether the jdbc api version is 4.0 or not.
boolean jdbc40 = false;
try {
Class.forName("java.sql.Wrapper");
jdbc40 = true;
} catch (ClassNotFoundException cnfe) {
_logger.log(Level.FINEST, "could not find Wrapper(available in jdbc-40), jdk supports only jdbc-30");
}
return jdbc40;
| private java.lang.Object | getDataSourceObject()Creates a Datasource object according to the spec.
String className = spec.getDetail(DataSourceSpec.CLASSNAME);
try {
Class dataSourceClass = Thread.currentThread().getContextClassLoader().loadClass(className);
Object dataSourceObject = dataSourceClass.newInstance();
return dataSourceObject;
} catch (ClassNotFoundException cnfe) {
_logger.log(Level.SEVERE, "jdbc.exc_cnfe_ds", cnfe);
String msg = sm.getString("dsob.class_not_found", className);
throw new ResourceException(msg);
} catch (InstantiationException ce) {
_logger.log(Level.SEVERE, "jdbc.exc_inst", className);
String msg = sm.getString("dsob.error_instantiating", className);
throw new ResourceException(msg);
} catch (IllegalAccessException ce) {
_logger.log(Level.SEVERE, "jdbc.exc_acc_inst", className);
String msg = sm.getString("dsob.access_error", className);
throw new ResourceException(msg);
}
| public static boolean | isJDBC40()
return jdbc40;
| private java.util.Hashtable | parseDriverProperties(DataSourceSpec spec)Get the extra driver properties from the DataSourceSpec object and
parse them to a set of methodName and parameters. Prepare a hashtable
containing these details and return.
String delim = spec.getDetail(DataSourceSpec.DELIMITER);
String prop = spec.getDetail(DataSourceSpec.DRIVERPROPERTIES);
if (prop == null || prop.trim().equals("")) {
return new Hashtable();
} else if (delim == null || delim.equals("")) {
String msg = sm.getString("dsob.delim_not_specified");
throw new ResourceException(msg);
}
Hashtable properties = new Hashtable();
delim = delim.trim();
String sep = delim + delim;
int sepLen = sep.length();
String cache = prop;
Vector methods = new Vector();
while (cache.indexOf(sep) != -1) {
int index = cache.indexOf(sep);
String name = cache.substring(0, index);
if (!name.trim().equals("")) {
methods.add(name);
cache = cache.substring(index + sepLen);
}
}
Enumeration allMethods = methods.elements();
while (allMethods.hasMoreElements()) {
String oneMethod = (String) allMethods.nextElement();
if (!oneMethod.trim().equals("")) {
String methodName = null;
Vector parms = new Vector();
StringTokenizer methodDetails = new StringTokenizer(oneMethod, delim);
for (int i = 0; methodDetails.hasMoreTokens(); i++) {
String token = (String) methodDetails.nextToken();
if (i == 0) {
methodName = token.toUpperCase();
} else {
parms.add(token);
}
}
properties.put(methodName, parms);
}
}
return properties;
|
|