https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic2
Overview
ManagedScheduledExecutorService(管理対象スケジュール済エグゼキュータ・サービス)はManagedExecutorService(管理対象エグゼキュータ・サービス)を拡張したもので、管理対象エグゼキュータ・サービス由来の全てのメソッドは管理対象スケジュール済エグゼキュータ・サービスでサポートされています。それゆえ、この記事の前に是非Part 1をお読み下さい。Concurrency Utilities support in WebLogic Server 12.2.1, Part One: ManagedExecutorService管理対象スケジュール済エグゼキュータ・サービスはjava.util.concurrent.ScheduledExecutorServiceを拡張したものゆえ、特定の遅延後もしくは定期的に実行するタスクのスケジュールのためのScheduledExecutorService由来のメソッド(schedule、scheduleAtFixedRate、scheduleAtFixedDelay)を提供します。それ以外に、管理対象スケジュール済エグゼキュータ・サービスは、トリガーベースのカスタムスケジュールでタスクを動作するための新たなメソッドを提供します。こうした全てのタスクはWebLogic Serverが提供するスレッド上で動作します。
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic1
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_66.html
Weblogic Serverはデフォルトの事前構成済み管理対象スケジュール済エグゼキュータ・サービスを各アプリケーションのために提供しているので、これを設定せずにWebコンポーネントやEJBコンポーネントで簡単に利用できます。デフォルトの管理対象スケジュール済エグゼキュータ・サービスをServletContextListenerで使うという簡単な例から始めましょう。
Example-1: Use Default ManagedScheduledExecutorService to Submit a Periodical Task
Step1)データをログ出力するタスクを作成します。
Step2)
public
class
LoggerTask
implements
Runnable {
@Override
public
void
run() {
// collect data and write them to database or file system
}
}
SomeListener.javaがデフォルトの管理対象スケジュール済エグゼキュータ・サービスを注入します。このコードはcontextInitializedでタスクを定期的にスケジューリングし、contextDestroyedでタスクをキャンセルします。
@WebListener
public
class
SomeListener
implements
ServletContextListener {
Future loggerHandle =
null
;
@Resource
ManagedScheduledExecutorService mses;
public
void
contextInitialized(ServletContextEvent scEvent) {
// Creates and executes LoggerTask every 5 seconds, beginning at 1 second later
loggerHandle = mses.scheduleAtFixedRate(
new
LoggerTask(),
1
,
5
, TimeUnit.SECONDS);
}
public
void
contextDestroyed(ServletContextEvent scEvent) {
// Cancel and interrupt our logger task
if
(loggerHandle !=
null
) {
loggerHandle.cancel(
true
);
}
}
}
Runtime Behavior
管理対象スケジュール済エグゼキュータ・サービスはPart 1のRuntime Behaviorで説明したすべての機能を提供します。Concurrency Utilities support in WebLogic Server 12.2.1, Part One: ManagedExecutorService前述の通り、管理対象スケジュール済エグゼキュータ・サービスはタスクを定期的もしくはカスタムスケジュールで実行することができるので、タスクは複数回実行される可能性があります。長時間実行タスクの場合、タスクが1回以上実行されるとしても、WebLogic Serverは最初の実行時にこの長時間実行タスクのために1スレッドのみ作成します。
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic1
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_66.html
Configuration
Configure ManagedScheduledExecutorService
管理対象スケジュール済エグゼキュータ・サービスには管理対象エグゼキュータ・サービスと同じ構成(名前、ディスパッチ・ポリシー、最大同時長時間リクエスト、長時間実行の優先度)があります。カスタマイズされた管理対象スケジュール済エグゼキュータ・サービスを取得、利用する方法もまた管理対象エグゼキュータ・サービスに似ています。Example-2: Configure a ManagedScheduledExecutorService in weblogic.xml
Step1)管理対象スケジュール済エグゼキュータ・サービスを定義します。
Step2)
<!-- weblogic.xml -->
<
work-manager
>
<
name
>customizedWM</
name
>
<
max-threads-constraint
>
<
name
>max</
name
>
<
count
>1</
count
>
</
max-threads-constraint
>
</
work-manager
>
<
managed-scheduled-executor-service
>
<
name
>customizedMSES</
name
>
<
dispatch-policy
>customizedWM</
dispatch-policy
>
<
long-running-priority
>10</
long-running-priority
>
<
max-concurrent-long-running-requests
>20</
max-concurrent-long-running-requests
>
</
managed-scheduled-executor-service
>
管理対象スケジュール済エグゼキュータ・サービス・インスタンスを取得して利用します。
@WebServlet
(
"/SomeServlet"
)
public
class
SomeServlet
extends
HttpServlet {
@Resource
(mappedName=
"customizedMSES"
)
ManagedScheduledExecutorService mses;
protected
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
Runnable aTask =
new
Runnable() {
...
};
mses.schedule(aTask,
5
, TimeUnit.SECONDS);
...
}
}
Example-3: Configure a ManagedScheduledExecutorService template using WebLogic Administration Console
Step1)WebLogic Server管理コンソールで、[同時管理対象オブジェクト・テンプレートのサマリ]ページで[新規]ボタンをクリックすると、管理対象スケジュール済エグゼキュータ・サービス・テンプレートを作成することができます。[新規管理対象スケジュール済エグゼキュータ・サービス・テンプレートの作成]ページで、新たな管理対象スケジュール済エグゼキュータ・サービス・テンプレートの名前やその他のパラメータを指定することができます。この例では、testMSESという管理対象スケジュール済エグゼキュータ・サービスを作成し、事前定義済みのワークマネージャtestWMにマッピングしています。

Step2)
管理対象スケジュール済エグゼキュータ・サービス・テンプレートを作成したら、WebLogic Serverの任意のアプリケーションが自身の管理対象スケジュール済エグゼキュータ・サービス・インスタンスを取得して利用することができます。
@WebServlet
(
"/SomeServlet"
)
public
class
SomeServlet
extends
HttpServlet {
@Resource
(mappedName=
"testMSES"
)
ManagedScheduledExecutorService mses;
protected
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
Runnable aTask =
new
Runnable() {
...
};
mses.schedule(aTask,
5
, TimeUnit.SECONDS);
...
}
}
Related Articles:
- Concurrency Utilities support in WebLogic Server 12.2.1
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in.html - Concurrency Utilities support in WebLogic Server 12.2.1, Part One: ManagedExecutorService
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic1
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_66.html - Concurrency Utilities support in WebLogic Server 12.2.1, Part Three: ManagedThreadFactory
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic3
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_68.html - Concurrency Utilities support in WebLogic Server 12.2.1, Part Four: ContextService
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic4
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_28.html - Concurrency Utilities support in WebLogic Server 12.2.1, Part Five: Multitenancy
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic5
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_41.html
Oracle® Fusion Middleware Administering Server Environments for Oracle WebLogic Server 12c (12.2.1)
Configuring Concurrent Managed Objects
https://docs.oracle.com/middleware/1221/wls/CNFGD/concurrent-utils.htm#CNFGD359
0 件のコメント:
コメントを投稿