この章の内容は次のとおりです。
Java EE 1.0の同時実行性ユーティリティ(Java Specification Request (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では、非同期タスク管理は表19-1にまとめられている4つのタイプのCMOで提供されます。
表19-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にバインドされたアプリケーション・コンポーネント環境から参照できます。
グローバルCMOテンプレート: WebLogic Server管理コンソールおよび構成MBeanを使用して、ドメイン、サーバーおよびパーティション・レベルの構成でテンプレートとしてグローバルに定義できます。
注意:
このドキュメントでは、グローバルCMOテンプレートがドメイン・パーティションに適用されるため、このテンプレートについてのみ説明します。構成ファイル内のデフォルトJava EE CMOおよびカスタマイズ済CMOに関する概念の詳細は、『Oracle WebLogic Serverサーバー環境の管理』の同時管理対象オブジェクトの構成に関する項を参照してください。
ワーク・マネージャと同様に、グローバルCMOテンプレートは、WebLogic Server管理コンソールまたは構成MBeanを使用して、ドメイン、サーバーおよびパーティション・レベルで定義できます。パーティション・レベルでのCMOの構成の詳細は、「パーティションCMOテンプレートの構成: 主な手順」を参照してください。
表19-2に、パーティション・レベルのMESテンプレートの構成要素を定義します。
表19-2 管理対象エグゼキュータ・サービスの構成要素
名前 | 説明 | 必須 | デフォルト値 | 範囲 |
---|---|---|---|---|
name |
MESの名前。
|
はい |
該当せず |
任意の空でない文字列。 |
dispatch-policy |
ワーク・マネージャの名前。パーティション・レベルのワーク・マネージャは、この名前で選択されます。ワーク・マネージャが存在しない場合、パーティション・レベルのデフォルトのワーク・マネージャが使用されます。 |
いいえ |
デフォルトのワーク・マネージャ |
該当せず |
max-concurrent-long-running-requests |
同時長時間実行タスクの最大数。 |
いいえ |
10 |
[0-65534]. 範囲外の場合、デフォルト値が使用されます。 |
long-running-priority |
長時間実行デーモン・スレッドの優先度を指定する整数。指定すると、すべての長時間実行スレッドが影響を受けます。 |
いいえ |
|
1-10
|
表19-3に、パーティション・レベルのMESテンプレートに類似した、パーティション・レベルのMSESテンプレートの構成要素を定義します。
表19-3 管理対象スケジュール済エグゼキュータ・サービスの構成要素
名前 | 説明 | 必須 | デフォルト値 | 範囲 |
---|---|---|---|---|
name |
MSESの名前。 ネーミング規則については、表19-2を参照してください。 |
はい |
該当せず |
任意の空でない文字列。 |
dispatch-policy |
ワーク・マネージャの名前。 ワーク・マネージャの使用方法の規則については、表19-2を参照してください。 |
いいえ |
デフォルトのワーク・マネージャ |
該当せず |
max-concurrent-long-running-requests |
同時長時間実行タスクの最大数。 |
いいえ |
10 |
[0-65534]. 範囲外の場合、デフォルト値が使用されます。 |
long-running-priority |
長時間実行デーモン・スレッドの優先度を指定する整数。指定すると、すべての長時間実行スレッドが影響を受けます。 |
いいえ |
5 |
1-1
|
表19-4に、パーティション・レベルのMTFテンプレートの構成要素を定義します。
表19-4 管理対象スレッド・ファクトリの構成要素
名前 | 説明 | 必須 | デフォルト値 | 範囲 |
---|---|---|---|---|
name |
MTFの名前。 ネーミング規則については、表19-2を参照してください。 |
はい |
該当せず |
任意の空でない文字列。 |
priority |
スレッドに割り当てる優先度。(数が大きいほど、高い優先度を示します。) |
いいえ |
5 |
1-10 |
max-concurrent-new-threads |
MTFによって作成され、タスクの |
いいえ |
10 |
[0-65534] 範囲外の場合、デフォルト値が使用されます。 |
表19-5に、パーティション・レベルのMTFの構成要素を定義します。
表19-5 管理対象スレッド・ファクトリの構成要素
名前 | 説明 | 必須 | デフォルト値 | 範囲 |
---|---|---|---|---|
name |
MTFの名前。 ネーミング規則については、表19-2を参照してください。 |
はい |
該当せず |
任意の空でない文字列。 |
priority |
スレッドに割り当てる優先度。(数が大きいほど、高い優先度を示します。) |
いいえ |
5 |
1-10 |
max-concurrent-new-threads |
MTFによって作成され、タスクの |
いいえ |
10 |
[0-65534] 範囲外の場合、デフォルト値が使用されます。 |
MESおよびMSESに発行された長時間実行タスクと、MTFのnewThread()
メソッドの呼出しでは、自己チューニング・スレッド・プールの一部として管理されない新しいスレッドを作成する必要があります。実行中のスレッドの数が過大になると、サーバーのパフォーマンスと安定性に悪影響を与える可能性があるため、同時実行性ユーティリティAPIによって作成される実行中のスレッドの最大数を指定する構成が用意されています。
MESおよびMSESに発行される同時長時間実行リクエストの制限は、パーティションで指定できます。すべての構成レベルは独立しており、最大同時長時間実行リクエストはそれらのいずれも超えることはできません。
表19-6は、デプロイメント・ディスクリプタで定義できるmax-concurrent-long-running-requests
要素を含む同時長時間実行リクエストの制限をまとめたものです。
表19-6 パーティションでの同時長時間実行リクエストの制限
スコープ | デプロイメント・ディスクリプタ | 説明 | <max-concurrent-long-running-requests>要素の詳細 |
---|---|---|---|
パーティション |
一般的なパーティションでは、 |
そのサーバーのそのパーティションに指定された同時長時間実行リクエストの制限。 |
オプション 範囲: [0-65534]。範囲外の場合、デフォルト値が使用されます。 デフォルト値: 50 |
指定された制限を超えた場合、MESまたはMSESは、発行された新しい長時間実行タスクに対して次のアクションを実行します。
タスク発行APIを呼び出すときにjava.util.concurrent.RejectedExecutionException
がスローされます。
ユーザーがManagedTaskListener
を使用してタスクを登録している場合、発行メソッドが失敗しているためこのリスナーには通知されません。
前述の規則は、invokeAll()
メソッドとinvokeAny()
メソッドには適用されないことに注意してください。これらのメソッドによって発行されたいずれかのタスクが指定された制限によって拒否された場合、次のイベントが発生します。
ユーザーが登録した管理対象タスク・リスナーのtaskSubmitted()
メソッドが呼び出されます。
ユーザーが登録した管理対象タスク・リスナーのtaskDone()
メソッドが呼び出され、throwableParam
がjavax.enterprise.concurrent.AbortedException
になります。
その他の発行済タスクは影響を受けません。
メソッドは、例外RejectedExecutionException
をスローしません。
次の例に、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件作成できます。
place 3
: mypartitionで定義されているMESとMSESにのみ影響します。パーティションmypartitionで実行されているすべてのMESとMSESは、長時間実行リクエストを合計で最大5件作成できます。
place 4
: テンプレートmytemplateに適用されるサーバー・インスタンスで定義されているMESとMSESに影響します。そのサーバー・インスタンスで実行されているすべてのMESとMSESは、長時間実行リクエストを合計で最大50件のみ作成できます。
次の例に、config.xml
ファイル内のmax-concurrent-long-running-requests
要素に指定された値が長時間実行リクエストの最大数にどのように影響する可能性があるかを示します。
次の場合は、いずれの制限も超過しておらず、前述のアクションは実行されません。
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
の制限を超過します。
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)
MTFのnewThread()
メソッドを呼び出して作成された同時新規実行スレッドの制限は、管理対象オブジェクト、ドメインおよびサーバー・レベルで指定できます。すべての構成レベルは独立しており、最大同時新規実行スレッドはそれらのいずれも超えることはできません。
実行スレッドとは、MTFによって作成され、そのrun()
メソッドがまだ完了していないスレッドであることに注意してください。
表19-7は、デプロイメント・ディスクリプタで定義できる要素<max-concurrent-new-threads>
を含む同時新規実行スレッドの制限をまとめたものです。
表19-7 同時新規実行スレッドの制限
スコープ | デプロイメント・ディスクリプタ | 説明 | <max-concurrent-long-running-requests>要素の詳細 |
---|---|---|---|
パーティション |
一般的なパーティションでは、 |
そのサーバーのそのパーティションに指定された同時新規実行スレッドの制限。 |
オプション 範囲: [0-65534]。範囲外の場合、デフォルト値が使用されます。 デフォルト値: 50 |
指定された制限を超えた場合、MTFのnewThread()
メソッドへの呼出しでは、ThreadFactory.newThread
Javadocに一致するようにnull
を返します。
max-concurrent-new-threads
の使用方法のサンプルは、例19-*を参照してください。
WebLogic Server管理コンソールおよび構成MBeanを使用して、パーティションの構成でグローバルCMOをテンプレートとして定義できます。CMOテンプレートは、パーティション内の任意のアプリケーションまたはアプリケーション・コンポーネントに割り当てることができます。
注意:
マルチテナントのパーティション化されたドメインは、WebLogic Server Premium Editionでのみ使用できます。詳細は、LINK TO INTRO TO WEBLOGIC SERVER MTを参照してください。
パーティション内で次の3つのタイプのCMOテンプレートを定義できます。
管理対象エグゼキュータ・サービス
管理対象スケジュール済エグゼキュータ・サービス
管理対象スレッド・ファクトリ
たとえば、managed-executor-service-template
を定義している場合、パーティションにデプロイされた各アプリケーションに対して一意のMESインスタンスが作成されます。
CMOテンプレートは、WebLogic Server管理コンソールを使用してパーティションに構成およびスコープ指定することができます。
ドメインおよびサーバー・スコープのCMOテンプレートの構成の詳細は、『Oracle WebLogic Serverサーバー環境の管理』のグローバルCMOテンプレートに関する項を参照してください。
CMOテンプレートは、PartitionMBean
で次の構成MBeanを使用して構成できます。
詳細は、Oracle WebLogic Server MBeanリファレンスのPartitionMBeanに関する項を参照してください。
制約についても、WebLogic Server管理コンソールおよび構成MBeanを使用してパーティション・スコープに対して定義できます。詳細は、次を参照してください。
同時制約は、PartitionMBean
で次のメソッドを使用して、パーティションごとに構成できます。
maxConcurrentLongRunningRequests()
- パーティション・スコープですべての管理対象エグゼキュータ・サービスまたは管理対象スケジュール済エグゼキュータ・サービスに発行できる同時長時間実行リクエストの最大数。
「最大同時長時間実行リクエストの制限の設定」を参照してください。
maxConcurrentNewThreads()
- パーティション・スコープですべての管理対象スレッド・ファクトリによって作成可能な同時新規スレッドの最大数。
「最大同時新規スレッドの制限の設定」を参照してください。
WebLogic Server MBeanの使用の詳細は、『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』のJMXを使用したWebLogic Server MBeanへのアクセスに関する項を参照してください。
同時制約は、次の管理ツールを使用して問い合せることができます。
CMOテンプレートは、管理コンソールを使用してモニターできます。
CMOで作成されたスレッドをパーティションでモニターするには、次のようにします。
「ドメイン構造」ツリーで、「ドメイン・パーティション」をクリックします。
「ドメイン・パーティションのサマリー」表で、モニターするパーティションを選択します。
「partition-nameの設定」ページで、「モニタリング」→「同時テンプレート」タブを選択します。
表では、パーティションにターゲット指定されているCMOテンプレートの構成情報を示します。
パーティションのCMOテンプレートは、次のMBean属性からアクセスできるConcurrentManagedObjectsRuntimeMBean
を使用してモニターできます。
PartitionRuntimeMBean.ConcurrentManagedObjectsRuntime
- パーティションにターゲット指定されているCMOテンプレートの構成情報を示します。
『Oracle WebLogic Server MBeanリファレンス』のConcurrentManagedObjectsRuntimeMBeanに関する項を参照してください。
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
)