我正在将应用从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
)。
我该怎么做才能获取并打印数据源的所有属性?
答案 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