| Interstage Application 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”になりますが、SQL ServerおよびPostgreSQLを使用する場合は、以下が発行されます。
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との連携を参照してください。
			目次
			索引
			![]()  
		 |