![]() ![]() ![]() ![]() |
以下の節では、WebLogic Server でのプログラミングに関連する追加情報を示します。
WebLogic Server は高度なマルチスレッド アプリケーション サーバであり、ホストしているモジュールのリソースの割り当て、同時実行性、およびスレッドの同期化を慎重に管理します。WebLogic Server のアーキテクチャを最大限に活用するには、標準 Java EE API を使用して作成したアプリケーション モジュールを構築する必要があります。
通常、サーバサイド モジュールで新たなスレッドの作成が必要にならないアプリケーション設計をします。
このような警告にもかかわらず、スレッドの作成が適切な状況もあります。たとえば、複数のリポジトリを検索して、結合された結果セットを返すアプリケーションの場合、メイン クライアント スレッドを同期的に使用する代わりに、各リポジトリの新しいスレッドを非同期的に使用して検索を実行すると、より速く結果が返されることがあります。
アプリケーション コードでのスレッドの使用を決定したら、アプリケーションが作成するスレッドの数を制限できるようにスレッド プールを作成します。JDBC 接続プールのように、指定した数のスレッドをプールに割り当て、実行可能なクラスのプールから利用できるスレッドを取得します。プール内のすべてのスレッドが使用中の場合は、スレッドが戻されるまで待機します。スレッド プールを使用すると、パフォーマンスの問題を回避し、WebLogic Server の実行スレッドとアプリケーションの間のスレッドの割り当ても最適化できます。
スレッドでデッドロックが発生しそうな場所を把握しておき、デッドロックが発生したら確実に処理します。設計を慎重に見直して、スレッドがセキュリティ システムを危険にさらすことのないようにしておきます。
WebLogic Server スレッドとの望ましくない対話を避けるには、WebLogic Server モジュールの中でスレッドの呼び出しを使用しないようにします。たとえば、作成するスレッドからは、エンタープライズ Bean やサーブレットを使用しないでください。アプリケーション スレッドは、TCP/IP 接続による外部サービス、またはファイルの適切なロックや読み書きを行う外部サービスとの対話のような、独立していて分離されたタスクに使用するのが最適です。存続期間が短く、1 つの目的を実行して終了する (スレッドをプールに返す) スレッドの方が、他のスレッドと競合しません。
WebLogic Server 上にデプロイされているアプリケーションにパッケージ化されるモジュール内に、デーモン スレッドを作成しないようにしてください。サーブレットなどのアプリケーション モジュール内にデーモン スレッドを作成すると、元のデプロイメント内に作成されたデーモンが実行中のままになるので、アプリケーションを再デプロイできなくなります。
障害のポイントにクライアントを追加して、負荷が次第に大きくなるような状況でマルチスレッドのコードをテストします。アプリケーションのパフォーマンスと WebLogic Server の動作を監視し、プロダクション環境で障害が発生しないことを確認しておきます。
ワーク マネージャは、作業項目を同時に実行するための簡単な API を提供します。この API を使用することで、Java EE ベースのアプリケーション (サーブレットや EJB を含む) において作業項目の同時実行をスケジューリングでき、スループットと応答時間を向上させることができます。アプリケーションでは、同時実行する作業項目をワーク マネージャに送信し、後でその結果を収集できます。ワーク マネージャが提供する一般的な「結合」演算によって、いずれかの作業項目が完了するのを待機したり、すべての作業項目が完了するのを待機したりできます。アプリケーション サーバ仕様のワーク マネージャでは、アプリケーション サーバでサポートされる低レベル スレッド化 API を使用することもできますが、ほとんどのアプリケーションでは使用が難しく、サーブレットや EJB のような管理対象の環境での使用は適切ではありません。
詳細については、「ワーク マネージャを使用したスケジューリング済み作業の最適化」を参照を参照してください。
WebLogic Server のクラスタにデプロイされる JSP およびサーブレットは、セッション データを保持するために特定の要件に従う必要があります。詳細については、『クラスタの使用』の「HTTP セッション ステートのレプリケーションに関する必要条件」を参照してください。
WebLogic Server クラスタでデプロイされる EJB には、EJB のタイプに基づく制約があります。クラスタ内の複数の EJB の種類の機能については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「エンタープライズ JavaBean について」を参照してください。EJB は、EJB デプロイメント記述子でプロパティを設定することでクラスタにデプロイできます。
クラスタ内でデプロイメント用に EJB またはカスタム RMI オブジェクトを開発する場合は、『WebLogic JNDI プログラマーズ ガイド』の「クラスタ環境での WebLogic JNDI の使い方」を参照して、クラスタ化されたオブジェクトを JNDI ツリーにバインドする影響について理解してください。
![]() ![]() ![]() |