【发布时间】:2012-01-22 23:30:54
【问题描述】:
我需要初始化一个给定 url 和驱动程序的 DataSource。 它需要足够通用以支持 Oracle 和 SQL Server。 该应用程序在 jboss 5 上运行。
为两者提供样本:
<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 正在实现接口数据源,所以它很容易退出......但我不确定是否足够通用。
编辑
我想知道如果我在这些连接中有多个数据库连接和多个实例/模式,应该如何实现......
我当前的代码如下:
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 是一个包含 xml 属性的 java bean。
【问题讨论】:
-
你到底在问什么? JBoss 负责给您一个 DataSource,只要您告诉它 JDBC 驱动程序类是什么。你不必关心任何事情。
-
我连接了多个数据库,我需要获取一个给定数据库连接名称的数据源。使用该 xml 文件,该文件配置所有连接的数据库。
-
@JBNizet 我希望我能设法让我的问题更清楚
标签: java url jboss datasource driver