java - supported - redhat jboss eap support




與Jboss一起使用DBMS_APPLICATION_INFO (2)

-ds.xml中 ,可以設置一個名為v $ session.program的連接屬性,該屬性的值將填充為源自連接池的連接創建的V $ SESSION視圖中的每個會話的PROGRAM列。 我通常將其設置為jboss.server.name屬性。

這裡的例子。

有沒有人有與JBOSS使用DBMS_APPLICATION_INFO包的例子?

我們有在JBOSS和共享數據庫池中運行的各種應用程序。 我希望在每個會話開始時使用DBMS_APPLICATION_INFO將這些應用程序標識為數據庫,這樣我可以更輕鬆地跟踪應用程序的哪些部分導致數據庫問題。

我對JBOSS中的會話生命週期並不太熟悉,但在一天結束時,需要在事務的開始和結束時發生,這個包需要被調用。

有沒有人做過這個?


如果你使用的是JBoss,你可以使用“valid-connection-checker”。 這個類通常用於檢查Connection的有效性。 但是,每當連接池為用戶提供連接時,都會調用它,您可以使用它來設置DBMS_ APPLICATION _INFO。

你在oracle-ds.xml中聲明這樣一個類:

<local-tx-datasource>
    <jndi-name>jdbc/myDS</jndi-name>
    <connection-url>jdbc:oracle:thin:@10.10.1.15:1521:SID</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <security-domain>MyEncryptDBPassword</security-domain>
    <valid-connection-checker-class-name>test.MyValidConn</valid-connection-checker-class-name>
    <metadata>
        <type-mapping>Oracle9i</type-mapping>
    </metadata>
</local-tx-datasource>

你的類必須實現org.jboss.resource.adapter.jdbc.ValidConnectionChecker接口。 如果您使用Maven,則可以使用以下依賴項來包含此接口:

<dependency>
    <groupId>jboss</groupId>
    <artifactId>jboss-common-jdbc-wrapper</artifactId>
    <version>3.2.3</version>
    <scope>provided</scope>
</dependency>

這個接口只有一個方法:isValidConnection。 我複制我的實現:

public SQLException isValidConnection(Connection arg0) {
    CallableStatement statement;
    try {
        statement = arg0.prepareCall("call dbms_application_info.set_client_info('"+getInfos()+"')");
        statement.execute();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

希望能幫助到你 !

伯努瓦





jboss