[Java, WLS] Concurrency Utilities support in WebLogic Server 12.2.1, Part Four: ContextService

原文はこちら。
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を拡張しています。
public class SomeTask implements Runnable {
    public void run() {
        // do some work
    }
}
Step2)
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:

詳細は、ドキュメントの以下の項をご覧下さい。
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 件のコメント:

コメントを投稿