WebSphere 中的数据源

DataSources in WebSphere

在 WebSphere 7 中定义了一个 JNDI 名称为 "jdbc/project/SimpleDS" 的数据源。在管理控制台中,我更改了数据源属性:db_name、db_port、db_host , 登录名和密码。

因此引用 "jdbc/project/SimpleDS" 数据源的已部署应用程序抛出异常:

java.sql.SQLInvalidAuthorizationSpecException: [jcc][t4][2013][11249]
[4.8.87] Connection authorization failure occurred.  Reason: User ID or Password invalid. ERRORCODE=-4214, SQLSTATE=28000DSRA0010E: 
SQL State = 28000, Error Code = -4,214
    at com.ibm.db2.jcc.am.gd.a(gd.java:674)
    at com.ibm.db2.jcc.am.gd.a(gd.java:60)
    at com.ibm.db2.jcc.am.gd.a(gd.java:120)
    at com.ibm.db2.jcc.t4.b.p(b.java:2060)
    at com.ibm.db2.jcc.t4.b.c(b.java:1649)
    at com.ibm.db2.jcc.t4.db.r(db.java:799)
    at com.ibm.db2.jcc.t4.db.k(db.java:353)
    at com.ibm.db2.jcc.t4.db.c(db.java:133)
    at com.ibm.db2.jcc.t4.b.Wc(b.java:1263)
    at com.ibm.db2.jcc.t4.b.b(b.java:1184)
    at com.ibm.db2.jcc.t4.b.a(b.java:5175)
    at com.ibm.db2.jcc.t4.b.d(b.java:743)
    at com.ibm.db2.jcc.t4.b.c(b.java:685)
    at com.ibm.db2.jcc.t4.b.a(b.java:368)
    at com.ibm.db2.jcc.t4.b.<init>(b.java:308)
    at com.ibm.db2.jcc.t4.c.<init>(c.java:32)
    at com.ibm.db2.jcc.DB2PooledConnection.<init>(DB2PooledConnection.java:192)
    at com.ibm.db2.jcc.DB2XAConnection.<init>(DB2XAConnection.java:56)
    at com.ibm.db2.jcc.DB2XADataSource.getXAConnection(DB2XADataSource.java:168)
    at com.ibm.ws.rsadapter.spi.InternalGenericDataStoreHelper.run(InternalGenericDataStoreHelper.java:1338)
    at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
    at com.ibm.ws.rsadapter.spi.InternalGenericDataStoreHelper.getPooledConnection(InternalGenericDataStoreHelper.java:1375)
    at com.ibm.ws.rsadapter.spi.InternalDB2UniversalDataStoreHelper.getPooledConnection(InternalDB2UniversalDataStoreHelper.java:1855)
    at com.ibm.ws.rsadapter.spi.WSRdbDataSource.getPooledConnection(WSRdbDataSource.java:2624)
    at com.ibm.ws.rsadapter.spi.WSManagedConnectionFactoryImpl.createManagedConnection(WSManagedConnectionFactoryImpl.java:1695)
    at com.ibm.ejs.j2c.FreePool.createManagedConnectionWithMCWrapper(FreePool.java:2086)
    at com.ibm.ejs.j2c.FreePool.createOrWaitForConnection(FreePool.java:1761)
    at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:2636)
    at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:1064)
    at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:701)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:668)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:635)

我用Ubuntu14.04

如何在运行时替换数据源属性?

您需要停止并启动节点才能生效。您可以通过 运行 以下命令来完成:

cd <was_home>/profiles/<node_name>/bin

对于Linux:

停止节点

./stopNode.sh

启动节点

./startNode.sh

对于Windows

停止节点

stopNode.bat

启动节点

startNode.bat

此外,请验证您提供的用户名和密码是否正确。

您使用 JNDI 获取与数据库的连接。

您不必担心 settings\credentials 数据源是什么。这就是JNDI的思想。

如果您需要动态更改连接设置,也许您最好限制JNDI 并使用自定义连接创建机制。

如果您正在 z/OS,那么您可以在 WebSphere Application Server V7.0 Security Guide

中阅读 "Propagating user credentials to DB2 using JDBC Type 2 driver"

Ripplestart 是伪造这种东西的唯一方法。这样用户的影响最小。除非您有 A 和 B 集群模型,其中集群 B 已经脱机,等待这样的更改才能联机。据我所知,如果至少不对应用程序服务器进行滚动回收,就无法在运行时更改凭据。