Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド
目次 索引 前ページ次ページ

第1部 J2EE共通編> 第4章 JNDI> 4.4 JDBC(データベース)のコネクション

4.4.2 自動再接続機能

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

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

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

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

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

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

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

◆ 再接続のタイミング

 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と連携する場合は、Oracle Real Application Clustersとの連携を参照してください。


目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED