原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic4
Weblogic Serverではデフォルトの事前構成済みコンテキスト・サービスを提供しているため、アプリケーションは設定せずにWebコンポーネントやEJBコンポーネントで簡単に利用できます。ではデフォルトのコンテキスト・サービスを使う簡単な例から始めましょう。
タスクを作成します。この例ではタスクはRunnableを拡張しています。
SomeServlet.javaはデフォルトのコンテキスト・サービスを注入し、そのコンテキスト・サービスを使って新しいコンテキスト・オブジェクト・プロキシをSomeTaskのために作成した上で、コンテキスト・オブジェクト・プロキシをJava SEのExecutorServiceに対して発行します。run()メソッドの各呼び出しはコンテキスト・オブジェクト・プロキシを作成したServletのコンテキストを有しています。
WebLogic Serverはデフォルトのコンテキスト・サービス・インスタンスを各アプリケーションのために提供するだけで、コンテキスト・サービスの設定方法は提供しません。
以下の4種類のアプリケーション・コンテキストが伝播されます。
伝播されるコンテキストの種類は同時管理対象オブジェクトの4種類と同じです。
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic4
Overview
ContextService(コンテキスト・サービス)はコンテキストのプロキシオブジェクトを生成するためにあり、プロキシオブジェクトを作成するためのcreateContextualProxyメソッドを提供しています。このプロキシオブジェクトメソッドは後に取得したコンテキスト内で動作します。Weblogic Serverではデフォルトの事前構成済みコンテキスト・サービスを提供しているため、アプリケーションは設定せずにWebコンポーネントやEJBコンポーネントで簡単に利用できます。ではデフォルトのコンテキスト・サービスを使う簡単な例から始めましょう。
Example-1: Execute a task with the creator's context using a ExecutorService
Step1)タスクを作成します。この例ではタスクはRunnableを拡張しています。
Step2)public class SomeTask implements Runnable {
public void run() {
// do some work
}
}
SomeServlet.javaはデフォルトのコンテキスト・サービスを注入し、そのコンテキスト・サービスを使って新しいコンテキスト・オブジェクト・プロキシをSomeTaskのために作成した上で、コンテキスト・オブジェクト・プロキシをJava SEのExecutorServiceに対して発行します。run()メソッドの各呼び出しはコンテキスト・オブジェクト・プロキシを作成したServletのコンテキストを有しています。
@WebServlet("/SomeServlet")
public class SomeServlet extends HttpServlet {
@Resource ContextService cs;
@Resource ManagedThreadFactory mtf;
ExecutorService exSvc = Executors.newThreadPool(10, mtf);
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
SomeTask taskInstance = new SomeTask();
Runnable rProxy = cs.createContextualProxy(taskInstance, Runnable.class);
Future f = = exSvc.submit(rProxy);
// Process the result and reply to the user
}
}
Runtime Behavior
Application Scoped Instance
コンテキスト・サービスはアプリケーション・スコープで、各アプリケーションには自身でデフォルトのコンテキスト・サービス・インスタンスを持っており、コンテキスト・サービス・インスタンスのライフサイクルはアプリケーションにバインドされています。コンテキスト・サービスが作成するプロキシ・オブジェクトもまたアプリケーション・スコープゆえ、アプリケーションが停止すると、インターフェースへのプロキシメソッドの呼び出しはIllegalStateExceptionをスローして失敗しますし、createContextualProxy()の呼び出しもまたIllegalArgumentExceptionをスローします。WebLogic Serverはデフォルトのコンテキスト・サービス・インスタンスを各アプリケーションのために提供するだけで、コンテキスト・サービスの設定方法は提供しません。
Context Propagation
コンテキスト・サービスはコンテキスト・プロキシ・オブジェクト作成時にアプリケーション・コンテキストを取得し、コンテキスト・プロキシ・オブジェクトのメソッドを呼び出す前にその取得したアプリケーションコンテキストを伝播します。そのため、プロキシ・オブジェクト・メソッドもまた、アプリケーション・コンテキストを有して実行することができます。以下の4種類のアプリケーション・コンテキストが伝播されます。
- JNDI
- クラスローダ(ClassLoader)
- セキュリティ(Security)
- ワークエリア(WorkArea)
伝播されるコンテキストの種類は同時管理対象オブジェクトの4種類と同じです。
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 Two: ManagedScheduledExecutorService
https://blogs.oracle.com/WebLogicServer/entry/concurrency_utilities_support_in_weblogic2
http://orablogs-jp.blogspot.jp/2015/12/concurrency-utilities-support-in_14.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 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