* @param mediator the mediator to store properties for serialization
* @return a DataSource created using specified properties
*/
private DataSource createCustomDataSource(OMElement pool, AbstractDBMediator mediator) {
BasicDataSource ds = new BasicDataSource();
// load the minimum required properties
ds.setDriverClassName(getValue(pool, DRIVER_Q));
ds.setUsername(getValue(pool, USER_Q));
ds.setPassword(getValue(pool, PASS_Q));
ds.setUrl(getValue(pool, URL_Q));
//save loaded properties for later
mediator.addDataSourceProperty(DRIVER_Q, getValue(pool, DRIVER_Q));
mediator.addDataSourceProperty(URL_Q, getValue(pool, URL_Q));
mediator.addDataSourceProperty(USER_Q, getValue(pool, USER_Q));
mediator.addDataSourceProperty(PASS_Q, getValue(pool, PASS_Q));
Iterator props = pool.getChildrenWithName(PROP_Q);
while (props.hasNext()) {
OMElement prop = (OMElement) props.next();
String name = prop.getAttribute(ATT_NAME).getAttributeValue();
String value = prop.getAttribute(ATT_VALUE).getAttributeValue();
// save property for later
mediator.addDataSourceProperty(name, value);
if ("autocommit".equals(name)) {
if ("true".equals(value)) {
ds.setDefaultAutoCommit(true);
} else if ("false".equals(value)) {
ds.setDefaultAutoCommit(false);
}
} else if ("isolation".equals(name)) {
try {
if ("Connection.TRANSACTION_NONE".equals(value)) {
ds.setDefaultTransactionIsolation(Connection.TRANSACTION_NONE);
} else if ("Connection.TRANSACTION_READ_COMMITTED".equals(value)) {
ds.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
} else if ("Connection.TRANSACTION_READ_UNCOMMITTED".equals(value)) {
ds.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
} else if ("Connection.TRANSACTION_REPEATABLE_READ".equals(value)) {
ds.setDefaultTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
} else if ("Connection.TRANSACTION_SERIALIZABLE".equals(value)) {
ds.setDefaultTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
}
} catch (NumberFormatException ignore) {}
} else if ("initialsize".equals(name)) {
try {
ds.setInitialSize(Integer.parseInt(value));
} catch (NumberFormatException ignore) {}
} else if ("maxactive".equals(name)) {
try {
ds.setMaxActive(Integer.parseInt(value));
} catch (NumberFormatException ignore) {}
} else if ("maxidle".equals(name)) {
try {
ds.setMaxIdle(Integer.parseInt(value));
} catch (NumberFormatException ignore) {}
} else if ("maxopenstatements".equals(name)) {
try {
ds.setMaxOpenPreparedStatements(Integer.parseInt(value));
} catch (NumberFormatException ignore) {}
} else if ("maxwait".equals(name)) {
try {
ds.setMaxWait(Long.parseLong(value));
} catch (NumberFormatException ignore) {}
} else if ("minidle".equals(name)) {
try {
ds.setMinIdle(Integer.parseInt(value));
} catch (NumberFormatException ignore) {}
} else if ("poolstatements".equals(name)) {
if ("true".equals(value)) {
ds.setPoolPreparedStatements(true);
} else if ("false".equals(value)) {
ds.setPoolPreparedStatements(false);
}
} else if ("testonborrow".equals(name)) {
if ("true".equals(value)) {
ds.setTestOnBorrow(true);
} else if ("false".equals(value)) {
ds.setTestOnBorrow(false);
}
} else if ("testonreturn".equals(name)) {
if ("true".equals(value)) {
ds.setTestOnReturn(true);
} else if ("false".equals(value)) {
ds.setTestOnReturn(false);
}
} else if ("testwhileidle".equals(name)) {
if ("true".equals(value)) {
ds.setTestWhileIdle(true);
} else if ("false".equals(value)) {
ds.setTestWhileIdle(false);
}
} else if ("validationquery".equals(name)) {
ds.setValidationQuery(value);
}
}
return ds;
}