|
Oracle Complex Event Processing (略称 Oracle CEP) では、HTTP サーブレットおよび静的リソースをデプロイする Java Web サーバとして Jetty がサポートされています。
Oracle CEP での Jetty サポートは、バージョン 1.2 の OSGi HTTP サービスに基づいています。この API では、実行時リソースと静的リソースに javax.servlet.Servlet オブジェクトを動的に登録および登録解除する機能が提供されます。この仕様には、Java Servlet API バージョン 2.1 以上が必須です。
Oracle CEP では、Jetty の以下の機能をサポートします。
Jetty のコンフィグレーションの詳細については、「Jetty サーバ インスタンスのコンフィグレーション」を参照してください。
Oracle CEP では、一般的な (同期) Java サーブレットをサポートするだけでなく、非同期サーブレットもサポートします。非同期サーブレットは要求を受信し、スレッドを取得して作業を実行します。また、最終的には、アクションの完了を待機している間に (別のスレッドを再取得するよりも前に) スレッドを解放し、応答を送信します。
Oracle CEP では、ネットワーク I/O (NetIO) を使用して Jetty サービスのポートとリスン アドレスをコンフィグレーションします。
| 注意 : | Jetty は多重化されたネットワーク I/O に対応した組み込み機能を備えています。ただし、同一ポート上での複数のプロトコルはサポートされません。 |
Oracle CEP Jetty サービスは Oracle CEP ワーク マネージャを使用して、スケーラブルなスレッド プールを提供します。「Jetty コンフィグレーションの例」を参照してください。
| 注意 : | Jetty には Jetty 独自のスレッド プール機能が用意されています。ただし、処理コストおよびコンフィグレーションの複雑さを最小限に抑えるために、Oracle CEP の自動チューニング スレッド プールを使用することをお勧めします。 |
Oracle CEP では、アプリケーションがどのような優先順位で作業を実行するかをコンフィグレーションできます。ユーザが定義したルールと実際の実行時パフォーマンスのモニタ結果に基づいて、アプリケーションのパフォーマンスが最適化され、サービス レベル アグリーメントが維持されます。ワーク マネージャを定義して、アプリケーションに対してルールや制約を定義します。
Oracle CEP では、1 つのスレッド プールですべてのタイプの作業を実行します。作業の優先順位は、ユーザが定義するルールと実行時のメトリックに基づいて決定されます。メトリックとしては、実際に要求を実行するのにかかった時間、要求をプールに出し入れする割合などがあります。
共通スレッド プールのサイズは、スループットが最大になるように自動的に変更されます。キューは、スループットを長期間にわたってモニタし、その履歴に基づいてスレッド数を調整するかどうかを決定します。たとえば、スループットの統計値の履歴に基づき、スレッド数を増やすことでスループットが向上すると判断されると、スレッド数が自動的に増やされます。同様に、統計値に基づいてスレッドを減らしてもスループットが悪化しないと判断されると、スレッド数が自動的に減らされます。
Oracle CEP では、定義済みのパラメータと実行時のパフォーマンスおよびスループットを考慮に入れた実行モデルに基づいて、作業の優先順位が決定されてスレッドが割り当てられます。
ユーザは、一連のスケジューリング ガイドラインをコンフィグレーションし、それらを 1 つまたは複数のアプリケーションに関連付けたり、特定のアプリケーション コンポーネントに関連付けたりできます。たとえば、スケジューリング ガイドラインのセットを 1 つのアプリケーションに関連付け、別のガイドラインのセットを別のアプリケーションに関連付けることができます。実行時には、これらのガイドラインに基づいて、保留中の作業やキューに入っている要求が実行スレッドに割り当てられます。
アプリケーション内の作業を管理するには、以下のうち 1 つまたは複数のワーク マネージャ コンポーネントを定義します。
| 注意 : | フェア シェア要求クラスの値は、割合ではなく相対値で指定します。したがって、上の例で要求クラスを 400 と 100 に設定しても相対値としては同じです。 |
max-threads-constraint—この制約は、制約対象の作業セットからの要求を実行する同時スレッドの数を制限します。デフォルトは無制限です。たとえば、最大スレッド数が 10 に定義された制約を 3 つのエントリ ポイントで共有するとします。このスケジューリング ロジックでは、3 つのエントリ ポイントからの要求を 10 個以下のスレッドで実行します。
max-threads-constraint は、要求が依存するリソース (たとえば接続プール) の可用性の観点から定義できます。
max-threads-constraint は、要求クラスによるスレッドのフェア シェアの実現や応答時間の目標値の達成を妨げることがあります。いったん制約条件が満たされると、同時実行の数が制限値を下回るまで、このタイプの要求はスケジューリングされません。制限値を下回ると、フェア シェアまたは応答時間の目標値に基づいて作業がスケジューリングされます。
min-threads-constraint—この制約は、制約対象の要求に割り当てられるスレッドの数を保証することでデッドロックを回避します。デフォルトはゼロです。min-threads-constraint の値を 1 に設定すると、ピアから同期的に呼び出されるレプリケーション更新要求などの場合に便利です。
min-threads-constraint によってフェア シェアが向上するとは限りません。このタイプの制約は、主に Oracle CEP インスタンスがデッドロック状態に近づいたときに効果を発揮します。このような場合は、最近サービス クラス内の要求がフェア シェアを超えていた場合でも、この制約によって要求がスケジューリングされます。
Oracle CEP ドメインを記述する config.xml ファイル内に Jetty HTTP サーバのインスタンスをコンフィグレーションするには、以下のコンフィグレーション オブジェクトを使用します。
<jetty> : 詳細については、「jetty コンフィグレーション オブジェクト」を参照してください。<netio> : 詳細については、「netio コンフィグレーション オブジェクト」を参照してください。<work-manager> : 詳細については、「work-manager コンフィグレーション オブジェクト」を参照してください。
Jetty インスタンスに Web アプリケーションを定義するには、<jetty-web-app> コンフィグレーション オブジェクトを使用します。詳細については、「jetty-web-app コンフィグレーション オブジェクト」を参照してください。
上記の各コンフィグレーション オブジェクトを使用したサンプルについては、「Jetty コンフィグレーションの例」を参照してください。
次の表に示すパラメータを使用して、config.xml ファイルに <jetty> コンフィグレーション オブジェクトを定義します。
|
|
||
|
|
||
次の表に示すパラメータを使用して、config.xml ファイルに <netio> コンフィグレーション オブジェクトを定義します。
次の表に示すパラメータを使用して、config.xml ファイルに <work-manager> コンフィグレーション オブジェクトを定義します。
以下のコンフィグレーション オブジェクトを使用して、Jetty が使用する Web アプリケーションを定義します。
Oracle CEP では、Jetty にデプロイするサーブレットの開発をサポートしています。標準の J2EE Web アプリケーションを作成し、jetty-web-app コンフィグレーション オブジェクトを使用してアプリケーションをコンフィグレーションします。
Oracle CEP では、Java Servlet バージョン 2.4 仕様に規定されているように、WAR ファイルまたは展開された WAR ファイルのどちらでもパッケージのデプロイメントをサポートしています。
事前にコンフィグレーションされた Web アプリケーションをサーバのコンフィグレーションに組み込むことによって、展開されたディレクトリまたは WAR ファイルからアプリケーションをデプロイできます。
標準の web.xml ファイルに指定されたセキュリティ制約は Common Security Services のセキュリティ プロバイダにマップされます。Servlet API では、宣言型のロールベース セキュリティを指定します。つまり、特定の URL パターンをセキュリティ ロールにマップできます。
config.xml ファイルから抜粋した以下のコードは、Jetty コンフィグレーションの例を示しています。ここでは、Jetty 関連のコンフィグレーション情報のみを示しています。
<config>
<netio>
<name>JettyNetIO</name>
<port>9002</port>
</netio>
<work-manager>
<name>WM</name>
<max-threads-constraint>64</max-threads-constraint>
<min-threads-constraint>3</min-threads-constraint>
</work-manager>
<jetty>
<name>TestJetty</name>
<work-manager-name>WM</work-manager-name>
<network-io-name>JettyNetIO</network-io-name>
<debug-enabled>false</debug-enabled>
<scratch-directory>JettyWork</scratch-directory>
</jetty>
<jetty-web-app>
<name>test</name>
<context-path>/test</context-path>
<path>testWebApp.war</path>
<jetty-name>TestJetty</jetty-name>
</jetty-web-app>
</config>
|