我需要初始化一個給定url和驅動程序的DataSource。其需要足夠通用以支持Oracle和SQL Server。 應用程序是在JBoss 5.雙方提供樣品從url和驅動程序獲取DataSouce
運行:
<db-connection name="TEST-ORACLE">
<url>jdbc:oracle:thin:@test:1521:ins1</url>
<driver>oracle.jdbc.xa.client.OracleXADataSource</driver>
<user>user</user>
<password>{ENCR}oRloKFKlqXs=</password>
<min-size>5</min-size>
<max-size>30</max-size>
<idle-timeout-minutes>1</idle-timeout-minutes>
</db-connection>
<db-connections>
<db-connection name="TEST-MSSQLSERVER">
<url>jdbc:jtds:sqlserver://server:1433/db;ProgramName=program;SelectMethod=cursor;useLOBs=false</url>
<driver>net.sourceforge.jtds.jdbc.Driver</driver>
<user>user</user>
<password>{ENCR}oRloKFKlqXs=</password>
<min-size>40</min-size>
<max-size>80</max-size>
<idle-timeout-minutes>1</idle-timeout-minutes>
</db-connection>
的OracleXADataSource正在實施inteface DataSource,這樣的跳槽容易...但林不知道該通用就夠了。
編輯
我不知道應該才達到,如果我有multipile DB連接和multipile情況下/在這些連接模式.....
我當前的代碼看起來像這樣:
private DataSource getDataSourceForTanent(TenantConfig i_Tenant) {
DataSource result = null;
ClassLoader loader = DBConnector.class.getClassLoader();
try {
Class driverClass = loader.loadClass(i_Tenant.getDriver());
Object driver = driverClass.newInstance();
if(driver instanceof OracleDataSource){
((OracleDataSource)driver).setURL(i_Tenant.getUrl());
((OracleDataSource)driver).setUser(i_Tenant.getUser());
((OracleDataSource)driver).setPassword(i_Tenant.getPassword());
result = (DataSource) driver;
} else if(driver instanceof Driver){
Properties prop = new Properties();
prop.put("user", i_Tenant.getUser());
prop.put("password", i_Tenant.getPassword());
prop.put("min-size", i_Tenant.getMinSize());
prop.put("max-size", i_Tenant.getMaxSize());
prop.put("idle-timeout-minutes", i_Tenant.getIdleTimeoutMinute());
Connection con = ((Driver)driver).connect(i_Tenant.getUrl(), prop);
if(con != null){
//TODO: SQLServer handling
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
TenantConfig是一個Java bean保持XML屬性。
你到底在問什麼?如果您告訴它JDBC驅動程序類是什麼,JBoss負責給您一個DataSource。你不必關心任何事情。 – 2011-12-18 10:25:30
我有multipile db連接,我需要得到一個數據源給定的數據庫連接名稱。使用該配置所有數據庫的xml文件。 – 2011-12-18 10:34:47
@JBNizet我希望我mannage讓我的問題更清晰一點 – 2011-12-18 10:50:06