Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド |
目次 索引 |
第1部 J2EE共通編 | > 第4章 JNDI | > 4.4 JDBC(データベース)のコネクション |
自動再接続機能とは、データベースサーバのダウンおよび通信回線の異常発生時に、無効となったプーリングされたコネクションを破棄したあとに、再度接続することで、データベースサーバ復旧後に、継続してデータベースアクセスを可能とする機能です。
自動再接続機能を使用することで、IJServerを再起動することなく、自動的にデータベースとの再接続を確立します。
以下のようなシステムで運用している場合を例にして、説明します。
アプリケーションサーバ(以降、IJServer)は、データベース接続したコネクションをプーリングし、以降の接続要求時にプーリングされたコネクションを返却しています。
正常時に接続する「現行サーバ」に異常が発生した場合、「待機サーバ」への切り替えが自動的に行われます。その際、IJServerでプーリングしていたコネクションは「現行サーバ」がダウンした時点で無効となるため、「待機サーバ」への切り替え後にアプリケーションからのデータベースアクセス時にエラーとなり、アプリケーションの運用ができなくなります。
そのため、IJServer側で自動的に無効となった、コネクションプール上のコネクションを開放するようなシステムに変更します。
IJServerは、以下の処理を行うことによりデータベースサーバがダウンした時のリカバリ(再接続)を行います。
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 |
findByPrimaryKey |
|
find<METHOD> |
|
remove |
|
find<METHOD>の返却値Enumerationに対するnextElementメソッド |
java.lang.RuntimeException |
find<METHOD>の返却値CollectionのIteratorに対するnextメソッド |
以下に、トランザクション完了時に発生する例外を示します。
メソッド |
返却される例外 |
commit |
javax.transaction.HeuristicMixedException |
rollback |
− |
JDBCコネクションの自動再接続機能の設定について詳細は、“チューニングガイド”の“IJServerのチューニング”を参照してください。
Oracle RACと連携する場合は、Oracle Real Application Clustersとの連携を参照してください。
目次 索引 |