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 件のコメント:
コメントを投稿