如何在WAS 6.1中获取数据源的属性

时间:2010-12-15 13:32:44

标签: java

我正在将应用从WAS4迁移到WAS6.1

一段代码如下:

javax.naming.Context ctx = new javax.naming.InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup(JNDI_NAME);                       
dsvalue_data   = new Hashtable(); 
confvalue_data = new Hashtable();

// Parse the datasource string and get the properties
// writeInfo will return the name of the datasource and will populate the
// dsvalue_data and confvalue_data hashtables with datasource and 
// connection pool properties

String tableHeader = writeInfo(ds.toString());

aResultHandler.addObject(CV_ABOUT_DESC,tableHeader);
aResultHandler.addObject(CV_ABOUT_PAGE,dsvalue_data);
.....
.....

问题在于WAS6.1,这个ds.toString()没有给出数据源的人类可读属性

当我试图打印时,它只给出了对象名称(如com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource@a21fg7)。

我该怎么做才能获取并打印数据源的所有属性?

3 个答案:

答案 0 :(得分:1)

获取数据源ds后,您可以获得如下数据库信息:

DatabaseMetaData md = ds.getConnection().getMetaData();

有很多方法可供使用,您可以从official documentation获取一个列表。

答案 1 :(得分:0)

您的主要目标是什么?因此,DataSource不会公开您正在寻找的属性。可能是您对aResultHandler API感到困惑。

我首先要说的是你需要摆脱aResultHandler API或重构它以使用DataSource。

如果您没有选择以下任何疯狂的原因是另一种选择。不确定这是否有效。

取决于toString()是一个糟糕的选择,因此你遇到了麻烦。我建议你尝试将从JNDI查找返回的DataSource转换为WAS实现类(do ds.getClass()以查看实际的impl类)并查看这些属性是否以某种方式公开。

答案 2 :(得分:0)

@Pangea

在Was4中,ds.toString()以可读格式提供数据源的详细信息

然后格式化以显示properties..like

 errorMap   =  null 
 logOrphan   =  false 
 connTimeout   =  180 
 TransactionBranchesLooselyCoupled  =  false 
 resetReadOnly   =  false 
 maxConnectionPoolSize   =  10 
 autoConnectionCleanupDisabled   =  false 
 minConnectionPoolSize   =  1 
 secureXACredential   =  false 
 surgeThreshold   =  -1 
 informixLockModeWait   =  0 
 dataBaseVersion   =  0 
 validationSQL   =  null 
 oracleStmtCacheSize   =  0 
 orphanTimeout   =  1800 
 stuckThreshold   =  -1 
 surgeTime   =  20 
 stuckTime   =  30 
 diagOptions   =  0 
 connectionValidation   =  false 
 maxStatementCacheSize   =  10 
 stuckTimerTime   =  5 
 idleTimeout   =  1800