Oracle® Fusion Middleware Oracle WebLogic Server パフォーマンス チューニング ガイド 11g リリース 1 (10.3.1) B55570-01 |
|
![]() 戻る |
![]() 次へ |
この付録では、リソース アダプタ開発者向けのベスト プラクティスについて説明します。
リソース アダプタ クラスを 1 つまたは複数の JAR ファイルにパッケージ化してから、その JAR ファイルを RAR ファイル内に配置することができます。これをネストされた JAR と呼びます。JAR ファイルを RAR ファイル内にネストしていて、クラスがクラスローダによってロードされる必要がある場合、RAR ファイル内の JAR は、ロードする必要のある各クラスごとに、開いて閉じて繰り返し処理されることになります。
RAR ファイル内の JAR の数が少なく、JAR のサイズが比較的小さい場合は、パフォーマンスに大きな影響は与えません。一方、多数の JAR があり、JAR のサイズが大きい場合は、パフォーマンスへの影響が大きくなります。
そのようなパフォーマンスの問題を避けるには、以下のいずれかを行います。
リソース アダプタを展開形式でデプロイします。この場合、JAR のネストは不要になるため、クラスの検索に関わるパフォーマンスの影響は小さくなります。
リソース アダプタを展開形式でデプロイできない場合は、RAR ファイルの内部で JAR を展開することができます。この場合も JAR のネストは不要になるため、クラスロードのパフォーマンスが大幅に向上します。
リソース アダプタで、J2CA 1.5 仕様 (http://java.sun.com/j2ee/connector/download.html
) のセクション 7.14.1 および 7.14.2 で述べられているオプションの機能を実装することをお勧めします。これらの機能を実装すると、WebLogic Server では、通常は利用できない機能を提供できます。
怠惰な接続の関連付け (セクション 7.14.1 に記載) を利用すると、サーバは未使用の接続を自動的にクリーンアップして、アプリケーションによるリソースの占有を防ぐことができます。怠惰なトランザクション登録 (セクション 7.14.2 に記載) を利用すると、アプリケーションは、接続がすでに開かれた後で、トランザクションを開始できます。
リソース アダプタの実装で WorkManager
を使用して (http://java.sun.com/j2ee/connector/download.html
にある J2CA 1.5 仕様の第 10 章「Work Management」に記載)、新しいスレッドで実行する必要がある処理を、新しいスレッドを直接作成しないで起動するようにしてください。WebLogic Server はこれらのスレッドの管理やモニタを行えるようになります。
J2CA 1.5 仕様 (http://java.sun.com/j2ee/connector/
) の第 15 章「Common Client Interface」に従って、WebLogic Server は EIS のアクセスで Common Client Interface (CCI) をサポートしています。CCI では、アプリケーション コンポーネント用の標準クライアント API を定義しています。アプリケーション コンポーネントおよび EAI フレームワークは、CCI を使用することにより、異種 EIS 間の対話を制御できます。
ベスト プラクティスとしては、CCI リソース アダプタを RAR ファイル内に実装しなければならない InteractionSpec
クラスは格納しないでください。代わりに、RAR ファイルの外部にある別の JAR ファイルにパッケージ化してください。そうすると、一般的な CLASSPATH に InteractionSpec
インタフェース クラスを入れないでも、クライアントがアクセスできるようになります。
InteractionSpec
インタフェースについては、すべてのアプリケーション コンポーネント (EJB、リソース アダプタ、Web アプリケーション) が EAR ファイルにパッケージ化されている場合、すべての共通クラスを APP-INF/lib ディレクトリに配置できることに留意してください。これが最も簡単なシナリオです。
このことは、スタンドアロンのリソース アダプタ (RAR ファイルにパッケージ化) には当てはまりません。(InteractionSpec
と同様に) インタフェースがシリアル化可能である場合、クライアントとリソース アダプタの両方が、実装クラスだけでなく InteractionSpec
インタフェースにアクセスする必要があります。ただし、インタフェースが java.io.Remote
を拡張している場合、クライアントはインタフェース クラスにのみアクセスすればよくなります。