この章では、WebLogic Server Multitenant (MT)でパーティション・レベルの同時管理対象オブジェクト・テンプレートおよび同時制約を構成する方法について説明します。この章の説明に従い、WebLogic Server管理コンソールを使用して、パーティションCMOを構成できます。
この章の内容は次のとおりです。
Concurrency Utilities for Java EE 1.0 (JSR 236)は、サーブレットやEJBなどのJava EEアプリケーション・コンポーネントに非同期実行機能を提供する標準APIを実装しています。WebLogic Serverでは、同時管理対象オブジェクト(CMO)がJava EEアプリケーションに対して同時実行機能を提供しています。同時管理対象オブジェクトを構成してから、それをアプリケーション・コンポーネントが使用できるようにすることができます。
ドメインおよびサーバー・レベルのCMOに対するサポートの提供に加えて、WebLogic Serverでは、パーティション・スコープのタスクを実行するためのパーティション・レベルのCMOテンプレートも提供されます。このドキュメントでは、パーティションに適用される場合のCMOテンプレートについてのみ説明します。
同時実行性ユーティリティのプライマリ・コンポーネントは次のとおりです。
ManagedExecutorService (MES) - 発行されたタスクを非同期的に実行するためにアプリケーションによって使用されます。タスクは、コンテナによって開始および管理されるスレッドで実行されます。コンテナのコンテキストは、タスクを実行するスレッドに伝播されます。
ManagedScheduledExecutorService (MSES) - 発行されたタスクを特定の時点で非同期的に実行するためにアプリケーションによって使用されます。タスクは、コンテナによって開始および管理されるスレッドで実行されます。コンテナのコンテキストは、タスクを実行するスレッドに伝播されます。
ManagedThreadFactory (MTF) - 管理対象スレッドを作成するためにアプリケーションによって使用されます。スレッドは、コンテナによって開始および管理されます。コンテナのコンテキストは、タスクを実行するスレッドに伝播されます。
ContextService - コンテナのコンテキストを取得する動的プロキシ・オブジェクトを作成して、アプリケーションがそのコンテキスト内で後で実行されるようにするか、管理対象エグゼキュータ・サービスに発行されるようにするために使用されます。コンテナのコンテキストは、タスクを実行するスレッドに伝播されます。
詳細は、Java EE 7チュートリアルのJava EEの同時実行性ユーティリティに関する項を参照してください。「Java Specification Request 236: Concurrency Utilities for Java EE 1.0」(http://jcp.org/en/jsr/detail?id=236)も参照してください。
WebLogic Serverでは、非同期タスク管理は表20-1にまとめられている4つのタイプのCMOで提供されます。
表20-1 非同期タスク管理を行うCMO
管理対象オブジェクト | コンテキストの伝播 | 自己チューニング | 停止時のスレッド中断 | 同時長時間実行新規スレッドの制限 |
---|---|---|---|---|
管理対象エグゼキュータ・サービス(MES) |
コンテキストは構成に基づいて伝播されます。 |
短時間実行タスクのみが、指定されたワーク・マネージャによって単一の自己チューニング・スレッド・プールにディスパッチされます。 |
ワーク・マネージャの停止中に、すべての未完了タスクが取り消されます。 |
過剰な数のスレッドによってサーバーが悪影響を受けないように、MESやMSESによって作成される長時間実行スレッドの最大数を構成できます。 |
管理対象スケジュール済エグゼキュータ・サービス(MSES) |
コンテキストは構成に基づいて伝播されます。 |
MESと同じ動作。 |
MESと同じ動作。 |
MESと同じ動作。 |
コンテキスト・サービス |
コンテキストは構成に基づいて伝播されます。 |
なし |
なし |
なし |
管理対象スレッド・ファクトリ(MTF) |
コンテキストは構成に基づいて伝播されます。 |
|
|
過剰な数のスレッドによってサーバーが悪影響を受けないように、MTFによって作成される新規スレッドの最大数を構成できます。 |
WebLogic Serverには3つのタイプのJSR236 CMOがあり、各CMOは、そのスコープ、およびその定義方法や使用方法で特徴付けられます。
デフォルトJava EE CMO - デフォルト・リソースがアプリケーションで使用できるようになるJava EE標準で必要とされ、それらのデフォルト・リソースに固有のJNDI名が定義されます。
構成ファイル内のカスタマイズ済CMO - アプリケーションおよびモジュール・レベルで定義するか、JNDIにバインドされたアプリケーション・コンポーネント環境(ENC)から参照できます。
グローバルCMOテンプレート - WLS管理コンソールおよび構成MBeanを使用して、ドメイン、サーバーおよびパーティション・レベルの構成でテンプレートとしてグローバルに定義できます。
注意: このドキュメントでは、グローバルCMOテンプレートがドメイン・パーティションに適用されるため、このテンプレートについてのみ説明しています。構成ファイル内のデフォルトJava EE CMOおよびカスタマイズ済CMOに関する概要の詳細は、『Oracle WebLogic Serverサーバー環境の管理』の同時管理対象オブジェクトの構成に関する項を参照してください。 |
ワーク・マネージャと同様に、グローバルCMOテンプレートは、WLS管理コンソールまたは構成MBeanを使用して、ドメイン、サーバーおよびパーティション・レベルで定義できます。パーティション・レベルでのCMOの構成の詳細は、「パーティションCMOテンプレートの構成: 主な手順」を参照してください。
この項では、パーティション・レベルのMESテンプレートの構成要素を定義します。
表20-2 管理対象エグゼキュータ・サービスの構成要素
名前 | 説明 | 必須 | デフォルト値 | 範囲 |
---|---|---|---|---|
name |
MESの名前。
|
はい |
なし |
任意の空でない文字列。 |
dispatch-policy |
ワーク・マネージャの名前。パーティション・レベルのワーク・マネージャは、この名前で選択されます。ワーク・マネージャが存在しない場合、パーティション・レベルのデフォルトのワーク・マネージャが使用されます。 |
いいえ |
デフォルトのワーク・マネージャ |
なし |
max-concurrent-long-running-requests |
同時長時間実行タスクの最大数。 |
いいえ |
10 |
[0-65534]. 範囲外の場合、デフォルト値が使用されます。 |
long-running-priority |
長時間実行デーモン・スレッドの優先度を指定する整数。指定すると、すべての長時間実行スレッドが影響を受けます。 |
いいえ |
|
1-10
|
この項では、パーティション・レベルのMESテンプレートに類似した、パーティション・レベルのMSESテンプレートの構成要素を定義します。
表20-3 管理対象スケジュール済エグゼキュータ・サービスの構成要素
名前 | 説明 | 必須 | デフォルト値 | 範囲 |
---|---|---|---|---|
name |
MSESの名前。 命名規則については、表20-2を参照してください。 |
はい |
なし |
任意の空でない文字列。 |
dispatch-policy |
ワーク・マネージャの名前。 ワーク・マネージャの使用方法の規則については、表20-2を参照してください。 |
いいえ |
デフォルトのワーク・マネージャ |
なし |
max-concurrent-long-running-requests |
同時長時間実行タスクの最大数。 |
いいえ |
10 |
[0-65534]. 範囲外の場合、デフォルト値が使用されます。 |
long-running-priority |
長時間実行デーモン・スレッドの優先度を指定する整数。指定すると、すべての長時間実行スレッドが影響を受けます。 |
いいえ |
5 |
1-1
|
この項では、パーティション・レベルのMTFテンプレートの構成要素を定義します。
表20-4 管理対象スレッド・ファクトリの構成要素
名前 | 説明 | 必須 | デフォルト値 | 範囲 |
---|---|---|---|---|
name |
MTFの名前。 命名規則については、表20-2を参照してください。 |
はい |
なし |
任意の空でない文字列。 |
priority |
スレッドに割り当てる優先度。(数が大きいほど、高い優先度を示します。) |
いいえ |
5 |
1-10 |
max-concurrent-new-threads |
MTFによって作成され、タスクの |
いいえ |
10 |
[0-65534] 範囲外の場合、デフォルト値が使用されます。 |
この項では、パーティション・レベルMTFの構成要素を定義します。
表20-5 管理対象スレッド・ファクトリの構成要素
名前 | 説明 | 必須 | デフォルト値 | 範囲 |
---|---|---|---|---|
name |
MTFの名前。 命名規則については、表20-2を参照してください。 |
はい |
なし |
任意の空でない文字列。 |
priority |
スレッドに割り当てる優先度。(数が大きいほど、高い優先度を示します。) |
いいえ |
5 |
1-10 |
max-concurrent-new-threads |
MTFによって作成され、タスクの |
いいえ |
10 |
[0-65534] 範囲外の場合、デフォルト値が使用されます。 |
MESおよびMSESに発行された長時間実行タスクと、MTFのnewThread()
メソッドの呼出しでは、自己チューニング・スレッド・プールの一部として管理されない新しいスレッドを作成する必要があります。実行中のスレッドの数が過大になると、サーバーのパフォーマンスと安定性に悪影響を与える可能性があるため、同時実行性ユーティリティAPIによって作成される実行中のスレッドの最大数を指定する構成が用意されています。
MESおよびMSESに発行される同時長時間実行リクエストの制限は、パーティションで指定できます。すべての構成レベルは独立しており、最大同時長時間実行リクエストはそれらのいずれも超えることはできません。
表20-6は、デプロイメント・ディスクリプタで定義できるmax-concurrent-long-running-requests要素を含む同時長時間実行リクエストの制限をまとめたものです。
表20-6 パーティションでの同時長時間実行リクエストの制限
スコープ | デプロイメント・ディスクリプタ | 説明 | <max-concurrent-long-running-requests>要素の詳細 |
---|---|---|---|
パーティション |
一般的なパーティションでは、 |
そのサーバーのそのパーティションに指定された同時長時間実行リクエストの制限。 |
オプション 範囲: [0-65534]。範囲外の場合、デフォルト値が使用されます デフォルト値: 50 |
指定された制限を超えた場合、MESまたはMSESは、発行された新しい長時間実行タスクに対して次のアクションを実行します。
タスク発行APIを呼び出すときにjava.util.concurrent.RejectedExecutionException
がスローされます。
ユーザーがManagedTaskListenerを使用してタスクを登録している場合、発行メソッドが失敗しているためこのリスナーには通知されません。
前述の規則は、invokeAll()
メソッドとinvokeAny()
メソッドには適用されないことに注意してください。これらのメソッドによって発行されたすべてのタスクは、指定済の制限によって拒否され、次のイベントが発生します。
ユーザーが登録したManagedTaskListenerのtaskSubmitted()
メソッドが呼び出されます。
ユーザーが登録したManagedTaskListenerのtaskDone()
メソッドが呼び出され、throwableParam
がjavax.enterprise.concurrent.AbortedException
になります。
その他の発行済タスクは影響を受けません。
メソッドは、RejectedExecutionException
をスローしません。
例20-1に、config.xml
内のmax-concurrent-long-running-requests
要素に指定された値が長時間実行リクエストの最大数にどのように影響する可能性があるかを示します。
例20-1 config.xml内のmax-concurrent-long-running-requestsの配置例
<domain> <server> <name>myserver</server> <max-concurrent-long-running-requests>50</max-concurrent-long-running-requests> (place 1) </server> <max-concurrent-long-running-requests>10</max-concurrent-long-running-requests> (place 2) <partition> <name>mypartition</name> <max-concurrent-long-running-requests>5</max-concurrent-long-running-requests> (place 3) </partition> <server-template> <name>mytemplate</name> <max-concurrent-long-running-requests>50</max-concurrent-long-running-requests> (place 4) </server-template> </domain>
place 1
- サーバー・インスタンスmyserverで定義されているMESとMSESに影響します。そのサーバー・インスタンスで実行されているすべてのMESとMSESは、長時間実行リクエストを合計で最大50だけ作成できます。
place 2
- ドメインで定義されているMESとMSESにのみ影響します。パーティション・レベルのMESとMSESには影響しません。ドメインで実行中のすべてのMESとMSESは、合計で最大10個のlong-running-requestsを作成できます。
place 3
- mypartitionで定義されているMESとMSESにのみ影響します。パーティションmypartitionで実行されているすべてのMESとMSESは、合計で最大5つの長時間実行リクエストを作成できます。
place 4
- テンプレートmytemplateに適用されるサーバー・インスタンスで定義されているMESとMSESに影響します。そのサーバー・インスタンスで実行されているすべてのMESとMSESは、長時間実行リクエストを合計で最大50だけ作成できます。
例20-2に、config.xml
内のmax-concurrent-long-running-requests
要素に指定された値が長時間実行リクエストの最大数にどのように影響する可能性があるかを示します。
例20-2 max-concurrent-long-running-requestsの構成のサンプル
server1(100) |---partition1(50) |---application1 |---managed-scheduled-executor-service1(not specified) |---module1 |---managed-executor-service1(20) |---managed-scheduled-executor-service2(not specified) |---application2 |---partition2(70)
次の場合は、いずれの制限も超過しておらず、前述のアクションは実行されません。
120の長時間実行タスクがmanaged-executor-service1
に発行され、それらのうち115は完了し、5つが実行中であると仮定すると、1つの長時間実行タスクがmanaged-executor-service1
に追加で発行された場合、制限は超えていないため実行されます。
次の場合は、1つの制限が超過しているため、前述のアクションが実行されます。
10の長時間実行タスクがmanaged-scheduled-executor-service1
によって実行されていると仮定すると、1つの長時間実行タスクがmanaged-scheduled-executor-service1
に追加で発行された場合、managed-scheduled-executor-service1
の制限を超過します。
10の長時間実行タスクがapplication1
によって実行され、40がapplication2
によって実行されていると仮定すると、1つの長時間実行タスクがapplication1
またはapplication2
に追加で発行された場合、partition1
の制限を超過します。
10の長時間実行タスクがapplication1
によって実行され、30がapplication2
によって実行され、60がpartition2
によって実行されていると仮定すると、1つの長時間実行タスクがapplication1
、application2
またはpartition2
に追加で発行された場合、server1
の制限が超過します。
MTFのnewThread()
メソッドを呼び出して作成された同時新規実行スレッドの制限は、管理対象オブジェクト、ドメインおよびサーバー・レベルで指定できます。すべての構成レベルは独立しており、最大同時新規実行スレッドはそれらのいずれも超えることはできません。
実行スレッドとは、MTFによって作成され、そのrun()
メソッドがまだ完了していないスレッドであることに注意してください。
表20-7は、デプロイメント・ディスクリプタで定義できる要素<max-concurrent-new-threads>
を含む同時新規実行スレッドの制限をまとめたものです。
表20-7 同時新規実行スレッドの制限
スコープ | デプロイメント・ディスクリプタ | 説明 | <max-concurrent-long-running-requests>要素の詳細 |
---|---|---|---|
パーティション |
一般的なパーティションでは、 |
そのサーバーのそのパーティションに指定された同時新規実行スレッドの制限。 |
オプション 範囲は[0-65534]で、範囲外の場合はデフォルト値が使用されます デフォルト値: 50 |
指定された制限を超えた場合、MTFのnewThread()
メソッドへの呼出しでは、ThreadFactory.newThread
Javadocに一致するようにnull
を返します。
max-concurrent-new-threads
を使用するサンプル・スニペットを表示するには、「max-concurrent-long-running-requestsの構成のサンプル」を参照してください。
WLS管理コンソールおよび構成MBeanを使用して、パーティションの構成でグローバルCMOをテンプレートとして定義できます。CMOテンプレートは、パーティション内の任意のアプリケーションまたはアプリケーション・コンポーネントに割り当てることができます。
パーティション内で次の3つのタイプのCMOテンプレートを定義できます。
管理対象エグゼキュータ・サービス・テンプレート
管理対象スケジュール済エグゼキュータ・サービス・テンプレート
管理対象スレッド・ファクトリ・テンプレート
たとえば、managed-executor-service-template
を定義している場合、パーティションにデプロイされた各アプリケーションに対して一意のMESインスタンスが作成されます。
CMOテンプレートは、WLS管理コンソールを使用して、構成し、パーティションを対象とすることができます。
「ドメイン構造」ツリーで、「環境」を展開し、「同時テンプレート」をクリックします。
「新規」をクリックし、次のいずれかのテンプレート・オプションを選択します。
管理対象エグゼキュータ・サービス・テンプレート
管理対象スケジュール済エグゼキュータ・サービス・テンプレート
管理対象スレッド・ファクトリ・テンプレート
新規テンプレートの作成ページで、必要に応じてテンプレートのプロパティを入力します。プロパティは、作成する同時テンプレートのタイプによって異なります。
「パーティション・レベルのMESテンプレート構成要素」を参照してください。
「パーティション・レベルのMSESテンプレート構成要素」を参照してください
「パーティション・レベルのMTFテンプレート構成要素」を参照してください。
「次」をクリックします。
同時テンプレートのターゲットとするパーティションを選択します。
選択したパーティションにデプロイされたアプリケーションのみがこの同時テンプレートを使用できます。
「終了」をクリックします。「同時テンプレートのサマリー」ページが表示され、新しいパーティション・スコープの同時テンプレートがリストされます。
必要に応じてその他の同時テンプレートを作成するには、これらの手順を繰り返します。
ドメインおよびサーバー・スコープのCMOテンプレートの構成の詳細は、『Oracle WebLogic Serverサーバー環境の管理』のグローバルCMOテンプレートに関する項を参照してください。
CMOテンプレートは、PartitionMBean
で次の構成MBeanを使用して構成できます。
詳細は、Oracle WebLogic Server MBeanリファレンスのPartitionMBeanに関する項を参照してください。
制約は、WLS管理コンソールおよび構成MBeanを使用して、パーティション・スコープに対して定義することもできます。
同時制約は、WLS管理コンソールを使用してパーティションごとに構成できます。
「ドメイン構造」ツリーで、「ドメイン・パーティション」をクリックします。
「ドメイン・パーティションのサマリー」表で、構成するパーティションを選択します。
「partition-nameの設定」ページで、パーティションの「構成」→「同時実行性」ページを開きます
次の同時制約オプションのいずれかまたはすべての値を指定します。
最大同時長時間実行リクエスト - パーティション・スコープですべての管理対象エグゼキュータ・サービスまたは管理対象スケジュール済エグゼキュータ・サービスに発行できる同時長時間実行リクエストの最大数。
「最大同時長時間実行リクエストの制限の設定」を参照してください。
最大同時新規スレッド - パーティション・スコープですべての管理対象スレッド・ファクトリによって作成可能な同時新規スレッドの最大数。
「最大同時新規スレッドの制限の設定」を参照してください。
「保存」をクリックします。
同時制約は、PartitionMBean
で次のメソッドを使用して、パーティションごとに構成できます。
maxConcurrentLongRunningRequests()
- パーティション・スコープですべての管理対象エグゼキュータ・サービスまたは管理対象スケジュール済エグゼキュータ・サービスに発行できる同時長時間実行リクエストの最大数。
「最大同時長時間実行リクエストの制限の設定」を参照してください。
maxConcurrentNewThreads()
- パーティション・スコープですべての管理対象スレッド・ファクトリによって作成可能な同時新規スレッドの最大数。
「最大同時新規スレッドの制限の設定」を参照してください。
WebLogic Server MBeanの使用の詳細は、『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』のJMXを使用したWebLogic Server MBeanへのアクセスに関する項を参照してください。
詳細については、以下の各節を参照してください。
『Oracle WebLogic Serverサーバー環境の管理』の同時管理対象オブジェクトの構成に関する項。
CMO関連の構成およびランタイムMBeanの詳細は、『Oracle WebLogic Server MBeanリファレンス』のManagedExecutorServiceTemplateMBeanに関する項、ManagedScheduledExecutorServiceTemplateMBeanに関する項、ManagedThreadFactoryTemplateMBeanに関する項およびPartitionMBeanに関する項を参照してください。
WLSTコマンドの使用の詳細は、『WebLogic Server WLSTコマンド・リファレンス』のオンラインおよびオフラインのWebLogic Server WLSTコマンド・リファレンスに関する項を参照してください。
『Oracle WebLogic Serverの理解』のサンプル・アプリケーションとコード例に関する項
Java EE 7チュートリアルのJava EEの同時実行性ユーティリティに関する項
「Java Specification Request 236: Concurrency Utilities for Java EE 1.0」(http://jcp.org/en/jsr/detail?id=236)。