原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic2
Weblogic Serverはデフォルトの事前構成済み管理対象スケジュール済エグゼキュータ・サービスを各アプリケーションのために提供しているので、これを設定せずにWebコンポーネントやEJBコンポーネントで簡単に利用できます。デフォルトの管理対象スケジュール済エグゼキュータ・サービスをServletContextListenerで使うという簡単な例から始めましょう。
データをログ出力するタスクを作成します。
SomeListener.javaがデフォルトの管理対象スケジュール済エグゼキュータ・サービスを注入します。このコードはcontextInitializedでタスクを定期的にスケジューリングし、contextDestroyedでタスクをキャンセルします。
管理対象スケジュール済エグゼキュータ・サービスを定義します。
管理対象スケジュール済エグゼキュータ・サービス・インスタンスを取得して利用します。
WebLogic Server管理コンソールで、[同時管理対象オブジェクト・テンプレートのサマリ]ページで[新規]ボタンをクリックすると、管理対象スケジュール済エグゼキュータ・サービス・テンプレートを作成することができます。[新規管理対象スケジュール済エグゼキュータ・サービス・テンプレートの作成]ページで、新たな管理対象スケジュール済エグゼキュータ・サービス・テンプレートの名前やその他のパラメータを指定することができます。この例では、testMSESという管理対象スケジュール済エグゼキュータ・サービスを作成し、事前定義済みのワークマネージャtestWMにマッピングしています。
Step2)
管理対象スケジュール済エグゼキュータ・サービス・テンプレートを作成したら、WebLogic Serverの任意のアプリケーションが自身の管理対象スケジュール済エグゼキュータ・サービス・インスタンスを取得して利用することができます。
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