将客户机信息传递给数据库
通过使用 WebSphere® Application Server API 或跟踪功能,可以传递有关源自相同数据源的各个连接的特有客户机信息。
关于此任务
一些数据库(例如 DB2®)支持数据源定制属性,该属性会触发数据库服务器以从 WebSphere Application
Server 连接中抽取客户机信息。(请参阅数据库文档,以了解该产品是否支持此功能以及该产品需要哪个属性。)但是,请注意,这些属性在应用程序服务器中引入的功能很受限制。因此,应用程序服务器连接管理器会导致下列不安全的行为,这些行为可将错误的客户机信息传送给数据库。
- 连接管理器不能动态地更改数据源或者从该数据源获取的连接上的客户机信息。
- 连接管理器必须在从该数据源获取的所有连接上设置相同的客户机信息。例如,如果将 ApplicationName 设置为数据源 clientInformation 属性的一部分,那么来自该数据源的所有连接都具有同一应用程序名。
应用程序服务器提供了两种方法来传递客户机信息,这些方法使连接管理有了必需的灵活性。通过使用其中的任何一种方法,都可以在某些连接(并且不在其他连接)上设置客户机信息以及在来自同一数据源的不同数据库连接上设置不同客户机信息。
过程
示例:使用 setClientInformation(Properties) API 设置客户机信息
借助此 API,设置有关连接的 WebSphere Application Server 客户机信息,以将该信息传递至数据库。
以下示例代码对 com.ibm.websphere.rsadapter.WSConnection 对象调用 setClientInformation(Properties)。
import com.ibm.websphere.rsadapter.WSConnection;
.....
try {
InitialContext ctx = new InitialContext();
//Perform a naming service lookup to get the DataSource object.
DataSource ds = (javax.sql.DataSource)ctx.lookup("java:comp/jdbc/myDS");
}catch (Exception e) {System.out.println("got an exception during lookup: " + e);}
WSConnection conn = (WSConnection) ds.getConnection();
Properties props = new properties();
props.setProperty(WSConnection.CLIENT_ID, "user123");
props.setProperty(WSConnection.CLIENT_LOCATION, "127.0.0.1");
props.setProperty(WSConnection.CLIENT_ACCOUNTING_INFO, "accounting");
props.setProperty(WSConnection.CLIENT_APPLICATION_NAME, "appname");
props.setProperty(WSConnection.CLIENT_OTHER_INFO, "cool stuff");
conn.setClientInformation(props);
conn.close()
参数
props 包含要传递的客户机信息。可能的值是:
- WSConnection.CLIENT_ACCOUNTING_INFO
- WSConnection.CLIENT_LOCATION
- WSConnection.CLIENT_ID
- WSConnection.CLIENT_APPLICATION_NAME
- WSConnection.CLIENT_OTHER_INFO
- WSConnection.OTHER_CLIENT_TYPE
异常
如果在设置数据时数据库发生异常,那么此 API 会创建 SQL 异常。