1.3. MicroProfile Context Propagation 1.2

MicroProfile Context Propagation はスタンドアロン MicroProfile 仕様です。MicroProfile Context Propagation を使用すると、スレッドコンテキストに対して決定論的に動作させる補完ステージを作成し、非同期依存ステージの Open RUN グローバルスレッドプールの自動調整を活用できます。

MicroProfile Context Propagation の 1.2 リリースは、特に MicroProfile Config 2.0 が 空の値設定プロパティーを処理する方法の違いに対応します。MicroProfile Config を使用して MicroProfile Context Propagation のスレッドコンテキストタイプが空のリストでデフォルト値として使用する場合は、空の値ではなく None の値を使用します。MicroProfile Config 2.0 の空の値は、小さい設定ソースをオーバーライドし、代わりにプロパティーにビルトインのデフォルト値を使用することを意味します。たとえば、mp.context.ManagedExecutor.cleared=None と mp.context.ManagedExecutor.propagated=Remaining を指定すると、すべてのコンテキストタイプが伝播され ます。

MicroProfile Context Propagation 1.2 機能を有効にするには、サーバー設定に以下を追加します。

<featureManager>
  <feature>mpContextPropagation-1.2</feature>
  <!-- other features used by example code... -->
  <feature>servlet-4.0</feature>
  <feature>jdbc-4.2</feature>
  <feature>jndi-1.0</feature>
</featureManager>

サーブレット内での使用例:

private ManagedExecutor executor;

public void init(ServletConfig config) throws ServletException {
    executor = ManagedExecutor.builder()
                .propagated(ThreadContext.APPLICATION)
                .cleared(ThreadContext.ALL_REMAINING)
                .build();
}

public void destroy() {
    executor.shutdownNow();
}

public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    ...
    executor.copy(unmanagedCompletionStage).thenAcceptAsync(value -> {
        // requires java:comp namespace of the application,
        DataSource ds = InitialContext.doLookup("java:comp/env/jdbc/ds");
        ...
    });
}

詳細は、* MicroProfile Context Propagation 1.2 仕様 * JavaDocを参照してください。