https://blogs.oracle.com/WebLogicServer/entry/connection_initialization_callback_on_wls
WebLogic Server 12.2.1.1がダウンロードできるようになりました。一般提供の発表に関するエントリは以下をどうぞ。
Oracle WebLogic Server 12.2.1.1 is Now AvailableOne of the WebLogic Serverデータソースの機能の一つで、接続初期化中に呼び出されるコールバックを定義することができます。ただ、登場して長いにもかかわらずあまり取り上げられませんでした。コールバックの当初の目的は、Application Continuity (AC) 機能と共に使われるメカニズムを提供することでした。これを使うと、接続が予約されていたり、後ほど接続を再生する場合、アプリケーションにとって同じ接続初期化を保証することができる、というものです。後者の場合、元の接続に「リカバリ可能」なエラーがあって閉じられ、その陰で新規接続が予約され、元の接続に対してなされた操作の全てが新規接続で再生されます。コールバックを使うと、アプリケーションが必要とする任意の状態を使って再度接続を初期化することができます。
https://blogs.oracle.com/WebLogicServer/entry/oracle_weblogic_server_12_22https://orablogs-jp.blogspot.jp/2016/06/oracle-weblogic-server-12211-is-now.html
アプリケーションソフトウェア内でgetConnection()を呼び出した任意の箇所にこの処理を散乱させずに、コールバックを使って全ての接続を初期化することができるというこのコンセプトは、再生を使わなかったとしても非常に便利です。実際には、コールバックをデータソース記述子で構成することができるので(この方法をお薦めします)、コールバックを記述する以外にアプリケーションへの変更はありません。
以下でこの機能のサポートの歴史をまとめました。接続の初期化コールバックを設定している前提で、以下をサポートしていました。
WLS Version | Description |
---|---|
10.3.6 | リプレイドライバを使って実行する場合にActiv GridLinkデータソースでのみ呼び出される(リプレイはActive GridLink for RACでのみサポート) |
12.1.1/12.1.2/12.1.3 | リプレイドライバと任意のデータソースタイプを使っている場合に呼び出される(リプレイのサポートが汎用データソースにも追加されたため) |
12.2.1 | Oracleドライバと任意のデータソースタイプを使って呼び出される |
12.2.1.1 | 任意のドライバ、任意のデータソースタイプを使って呼び出される。Oracleドライバだけに制限する理由はないですね。 |
以下はコールバックのサンプルです。
以下は、できるだけデフォルトのものを使って登録しているコールバックを表示する、シンプルなJythonスクリプトです。
package
demo;
import
oracle.ucp.jdbc.ConnectionInitializationCallback;
public
class
MyConnectionInitializationCallback
implements
ConnectionInitializationCallback {
public
MyConnectionInitializationCallback() {
}
public
void
initialize(java.sql.Connection connection)
throws
java.sql.SQLException {
// Re-set the state for the connection, if necessary
}
}
ここではいくつか注目すべき点があります。まず、構成を使用してコールバックを登録するには、クラスがクラスパスになければなりません。とにかく、実行するには、サーバーのクラスパスにある必要がありますが、設定のために早く取得する必要があります。第二に、この機能の経緯から、接続パラメータではなくOracleのパラメータに設定が含まれています。そのため、我々は構成できることはそれほど多くありません。(Oracleタブに加えて)以下の図に示すように、WebLogic Server 12.2.1.1管理コンソールでは、[接続プール]の詳細パラメータでエントリを確認し、設定することができます。最後に、インタフェースはユニバーサル接続プール(UCP)インターフェイスであることにご注意ください。このコールバックをUCPアプリケーションで共有することができます(全てのドライバタイプをDatabase 12.1.0.2以降でサポートしています)。
import
sys, socket
hostname
=
socket.gethostname()
edit()
dsname
=
'myds'
jndiName
=
'myds'
server
=
'myserver'
cd(
'Servers/'
+
server)
target
=
cmo
cd(
'../..'
)
startEdit()
jdbcSR
=
create(dsname,
'JDBCSystemResource'
)
jdbcResource
=
jdbcSR.getJDBCResource()
jdbcResource.setName(dsname)
dsParams
=
jdbcResource.getJDBCDataSourceParams()
dsParams.addJNDIName(jndiName)
driverParams
=
jdbcResource.getJDBCDriverParams()
driverParams.setUrl(
'jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=otrade)))'
)
driverParams.setDriverName(
'oracle.jdbc.OracleDriver'
)
driverParams.setPassword(
'tiger'
)
driverProperties
=
driverParams.getProperties()
userprop
=
driverProperties.createProperty(
'user'
)
userprop.setValue(
'scott'
)
oracleParams
=
jdbcResource.getJDBCOracleParams()
<b>oracleParams.setConnectionInitializationCallback(
'demo.MyConnectionInitializationCallback'
)
# register the callback</b>
jdbcSR.addTarget(target)
save()
activate(block
=
'true'
)

この機能は管理ガイドのApplication Continuityの章に記載があります。
Oracle® Fusion Middleware Administering JDBC Data Sources for Oracle WebLogic Server 12c (12.2.1.1)このエントリでは、コールバックを使って実際に何もしなかったことに失望されているかもしれませんが、次回のエントリで、別の新しいWLS12.2.1.1の機能でどのように使われているかを示すために再びこのコールバックを使用する予定です。
Advanced Configurations for Oracle Drivers and Databases
Application Continuity > Configuring Application Continuity > Using a Connection Callback
http://docs.oracle.com/middleware/12211/wls/JDBCA/ds_oracledriver.htm#CCHFJDHF
0 件のコメント:
コメントを投稿