ナビゲーションをスキップ.

WebLogic J2EE コネクタ アーキテクチャ

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

トラブルシューティング

 


ManagedConnectionFactory をマップできない

BEA WebLogic Server は以下のメッセージをサーバ ログ ファイルに書き込みます。

コード リスト B-1 ManagedConnectionFactory をマップできない

Cannot map a ManagedConnectionFactory to a Connection pool.Ensure that the MCF's hashcode() and equals() methods are implemented properly.

 


原因と回避策

この例外はアプリケーション コンポーネントからリソース アダプタへの getConnection() メソッド呼び出しの際に発生し、以下の理由が考えられます。

リモート JVM

現行仕様では、J2EE コネクタ アーキテクチャはリモート アクセスをサポートしていません。定義されているインタフェースはいずれもリモートではなく、構築されたシステム規約でも ManagedConnectionFactory と ConnectionManager とのローカル関係が仮定されています。

そのため、アプリケーション コンポーネントがリソース アダプタと同じ Java 仮想マシンにホストされるようにアプリケーションをデプロイする必要があります。

ManagedConnectionFactory の実装が不適切

WebLogic Server はリソース アダプタとの接続を管理している時は、リソース アダプタの ManagerConnectionFactory の hashCode() メソッドおよび equals() メソッドに依存します。サーバはこれら 2 つのメソッドを使用して ManagedConnectionFactory のユニークなインスタンスを示します。したがって、これらのメソッドを ManagedConnectionFactory に実装する場合、いくつかのことを念頭に置く必要があります。

ManagedConnectionFactory のインスタンスごとに、その hashCode() メソッドは ManagedConnectionFactory の有効期間全体で同じ値を返す必要があります。これは関連付けられたリソース アダプタがデプロイされる時に始まり、アンデプロイされる時に終わります。

ManagedConnectionFactory equals() のメソッドは慎重に記述し、managedConnectionFactory の異なるインスタンスを区別する必要があります。リソース アダプタの equals() メソッドで、有効期間中に変化が可能なクラスまたはインスタンスのデータを自由に使用することができます。変更が可能なデータを equals() メソッドで自由に使用できる点が WebLogic Server 7.0 の新機能です。リリース 7.0 の前は、この操作ができませんでした。BEA は WebLogic Server が、ManagedConnectionFactory オブジェクトなどのオブジェクトを JNDI ツリーに格納する方法を変更しました。

リリース 7.0 の前は、WebLogic Server はオブジェクトのシリアライズされたコピーを JNDI ツリーに格納していました。たとえば、リソース アダプタがデプロイされる時に、ManagedConnectionFactory オブジェクトのコピー全体がシリアライズされ、WebLogic Server JNDI ツリーに格納されていました。データ メンバーのすべての値を含め、そのオブジェクトのその時の状態全体がコピーされ、格納されていました。その後、そのリソース アダプタに接続リクエストが送られると、WebLogic Server は接続リクエストで一緒に渡される ManagedConnectionFactory を使用して、以前にデプロイ済みの ManagedConnectionFactory の割り当て先である接続プールを見つけようとしていました。ManagedConnectionFactory オブジェクトの状態がデプロイ時から接続リクエスト時までの間に変化し、その状態が equals() メソッドの動作に反映されると、2 つのオブジェクト (デプロイ時に JNDI ツリーにコピーされたオブジェクトと、接続リクエストと共に渡されるオブジェクト) は実際には異なるオブジェクトであったため、WebLogic では接続リクエストが許可されませんでした。

WebLogic Server がオブジェクトのコピーの代わりに JNDI ツリーでオブジェクトの参照を格納するため、この問題は解消しました。今後は、リソース アダプタがデプロイされると、その ManagedConnectionFactory オブジェクトに対する参照だけが JNDI に格納されます。後に、接続リクエストが送られ、WebLogicServer がデプロイ済みの ManagedConnectionFactory オブジェクトに対する格納済みの参照を使用するときに、接続リクエストと共に現在渡されているものと同じオブジェクトが発見されます。オブジェクトの equals() メソッドの呼び出しはオブジェクトの現在のステートを前提として処理し、オブジェクトの状態がデプロイ時から変化しているかどうかは問われません。

 

ページの先頭 前 次