ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド

4.4.2 自動再接続機能

自動再接続機能とは、データベースサーバのダウンおよび通信回線の異常発生時に、無効となったプーリングされたコネクションを破棄したあとに、再度接続することで、データベースサーバ復旧後に、継続してデータベースアクセスを可能とする機能です。

自動再接続機能を使用することで、IJServerを再起動することなく、自動的にデータベースとの再接続を確立します。

自動再接続機能を利用すると有効な例

以下のようなシステムで運用している場合を例にして、説明します。

アプリケーションサーバ(以降、IJServer)は、データベース接続したコネクションをプーリングし、以降のgetConnection呼び出し時にプーリングされたコネクションを返却しています。
正常時に接続する「現行サーバ」に異常が発生した場合、「待機サーバ」への切り替えが自動的に行われます。その際、IJServerでプーリングしていたコネクションは「現行サーバ」がダウンした時点で無効となるため、「待機サーバ」への切り替え後にアプリケーションからのデータベースアクセス時にエラーとなり、アプリケーションの運用ができなくなります。
そのため、IJServer側で自動的に無効となった、コネクションプール上のコネクションを開放するようなシステムに変更します。



自動再接続を使用する場合

IJServerは、以下の処理を行うことによりデータベースサーバがダウンした時のリカバリ(再接続)を行います。

SQL()文発行による接続確認

IJServerは、アプリケーションよりgetConnection呼び出しが来た場合、プールから取得したコネクションに対してSQL()文を発行し、接続確認を行います。
正常終了した場合は、取得したオブジェクトは有効なものであると判断して返却します。
例外が発生した場合は、プールから取得したコネクションを破棄してデータベースに直接getConnection呼び出しを行います。

データベース接続エラー時のリカバリ機構

SQL()文の発行で例外が発生した場合、またはアプリケーションからのgetConnection呼び出し時にプールがなく、直接データベースにgetConnection呼び出しをして例外が返却された場合、接続が正常に終了するまで指定された回数分、一定間隔でデータベース接続処理を繰り返します。
接続が正常に終了した時点で、アプリケーションへ接続したコネクションを返却します。
指定された回数実行しても接続に失敗する場合は、SQLExceptionを返却します。

注)

SQL:Oracleが推奨している、以下のSQL文を発行します。

select sysdate from dual

本章の例では、データベースにOracleを使用しているため発行されるSQL文は“select sysdate from dual”になりますが、Symfoware、PostgreSQL、SQL Serverを使用する場合は、以下が発行されます。Symfowareの場合には、以下のSQL文は構文エラーとなりますが、エラー発生時のエラーコードでデータベースに正常に接続できたか確認しています。

select 1



再接続のタイミング

DBMS異常が発生した場合のDBMSへの再接続は、プールからコネクションを取得した時、またはプールにコネクションがない場合にDBMSから直接コネクションを取得した時に行います(DBMSへの接続を確認した時点で、トランザクションが開始し、SQL発行が可能な状態となります)。

トランザクション中、およびコネクションを取得した後にDBMSがダウンした場合、そのトランザクション内でDBアクセス、またはEntity Bean(CMP)にアクセス(SQL発行)を行うと、例外が発生します(この際、DBMSへの再接続は行われません)。
この場合、JDBCコネクションをクローズしてトランザクションをロールバックしてから、再度処理を継続してください(トランザクション管理種別がContainerの場合は、コンテナがロールバックを行います)。


以下に、Entity Bean(CMP)で無効なコネクションを使用した場合に発生する例外を示します。

メソッド

返却される例外

create

java.rmi.RemoteException
または
javax.transaction.TransactionRolledbackException

findByPrimaryKey

find<METHOD>

remove

find<METHOD>の返却値Enumerationに対するnextElementメソッド

java.lang.RuntimeException

find<METHOD>の返却値CollectionのIteratorに対するnextメソッド

以下に、トランザクション完了時に発生する例外を示します。

メソッド

返却される例外

commit

javax.transaction.HeuristicMixedException
または
javax.transaction.HeuristicRollbackException(トランザクションがロールバックにマークされている場合)

rollback

JDBCコネクションの自動再接続機能の設定について詳細は、“チューニングガイド”の“IJServerのチューニング”を参照してください。

Oracle RACと連携する場合は、付録B Oracle Real Application Clustersとの連携を参照してください。