アノテーション型 ContextServiceDefinition


  • @RepeatableSE(List.class)
    @RetentionSE(RUNTIMESE)
    @TargetSE(TYPESE)
    public @interface ContextServiceDefinition

    name() 属性で指定された JNDI 名でコンテナーによって JNDI に登録される ContextService を定義します。

    アプリケーションコンポーネントは、Resource アノテーションの lookup 属性でこの JNDI 名を参照できます。

    @ContextServiceDefinition(
         name = "java:app/concurrent/MyContext",
         propagated = APPLICATION,
         unchanged = TRANSACTION,
         cleared = ALL_REMAINING)
     public class MyServlet extends HttpServlet {
        @Resource(lookup = "java:app/concurrent/MyContext",
                   name = "java:app/concurrent/env/MyContextRef")
         ContextService appContextSvc;
     

    デプロイ記述子のリソース環境参照は、同様に lookup-name を指定できます。

     <resource-env-ref>
        <resource-env-ref-name>java:app/env/concurrent/MyContextRef</resource-env-ref-name>
        <resource-env-ref-type>jakarta.enterprise.concurrent.ContextService</resource-env-ref-type>
        <lookup-name>java:app/concurrent/MyContext</lookup-name>
     </resource-env-ref>
     

    cleared()propagated()unchanged() 属性を使用すると、アプリケーションは、ContextService によってコンテキスト化されたタスクおよびアクションにスレッドコンテキストを適用する方法を構成できます。このクラスには、Jakarta EE Concurrency 仕様で定義されているコンテキスト型用の定数が用意されています。これらの定数に加えて、Jakarta EE 製品プロバイダーは、追加のベンダー固有のコンテキスト型を受け入れることを選択できます。ベンダー固有の型を使用すると、アプリケーションが移植できなくなります。

    複数のリストで同じコンテキスト型が重複するとエラーになり、ContextService インスタンスを作成できなくなります。ALL_REMAINING がどのリストにも存在しない場合、cleared() コンテキスト型に暗黙的に追加されます。

    <context-service> デプロイ記述子要素を使用して ContextService を定義することもできます。元:
     <context-service>
        <name>java:app/concurrent/MyContext</name>
        <cleared>Security</cleared>
        <cleared>Transaction</cleared>
        <propagated>Application</propagated>
        <unchanged>Remaining</unchanged>
     </context-service>
     
    context-service と ContextServiceDefinition が同じ名前の場合、それらの属性がマージされて単一の ContextService 定義が定義され、context-service デプロイ記述子エントリで指定された各属性が、対応するアノテーションの属性よりも優先されます。
    導入:
    3.0
    • フィールドサマリー

      フィールド  
      修飾子と型 フィールド 説明
      static StringSEALL_REMAINING
      他の場所で指定されていない、使用可能なすべてのスレッドコンテキスト型。
      static StringSEAPPLICATION
      Jakarta EE 名前空間 ( java:comp/env/ など) およびスレッドコンテキストクラスローダーを含む、アプリケーションコンポーネントまたはモジュールに関連するコンテキスト。
      static StringSESECURITY
      スレッドに関連付けられている資格情報を制御するコンテキスト (呼び出し元サブジェクトと呼び出し /RunAs サブジェクトを含む)。
      static StringSETRANSACTION
      スレッドに関連付けられたトランザクションを制御するコンテキスト。
    • 必須定数のサマリー

      必須要素  
      修飾子と型 必須要素 説明
      StringSEname
      定義されている ContextService インスタンスの JNDI 名。
    • オプション要素のサマリー

      オプション要素  
      修飾子と型 オプションの要素 説明
      StringSE[]cleared
      スレッドがコンテキストタスクまたはアクションを実行するたびにクリアするコンテキストの型。
      StringSE[]propagated
      リクエスト元のスレッドから取得し、コンテキストタスクまたはアクションを実行するスレッドに伝達するコンテキストの種類。
      StringSE[]unchanged
      スレッドがコンテキストタスクまたはアクションを実行するときに放置されるコンテキストの型。
    • フィールドの詳細

      • ALL_REMAINING

        static final StringSE ALL_REMAINING

        他の場所で指定されていない、使用可能なすべてのスレッドコンテキスト型。これには、他の場所で指定されていないカスタム ThreadContextProviders のスレッドコンテキスト型が含まれます。

        例: SECURITY コンテキストを伝播し、TRANSACTION コンテキストをそのままにし、他のすべてのコンテキスト型をクリアする ContextService を定義するには:

        @ContextServiceDefinition(
             name = "java:module/concurrent/SecurityContext",
             propagated = SECURITY,
             unchanged = TRANSACTION,
             cleared = ALL_REMAINING)
         public class MyServlet extends HttpServlet ...
         
      • APPLICATION

        static final StringSE APPLICATION

        Jakarta EE 名前空間 ( java:comp/env/ など) およびスレッドコンテキストクラスローダーを含む、アプリケーションコンポーネントまたはモジュールに関連するコンテキスト。

        クリアされたアプリケーションコンテキストは、スレッドがどのアプリケーションコンポーネントにも関連付けられておらず、アプリケーションの Jakarta EE 名前空間およびスレッドコンテキストクラスローダーへのアクセスがないことを意味します。

      • SECURITY

        static final StringSE SECURITY

        スレッドに関連付けられている資格情報を制御するコンテキスト (呼び出し元サブジェクトと呼び出し /RunAs サブジェクトを含む)。

        クリアされたセキュリティコンテキストは、スレッドに認証されていないサブジェクトを与えます。

      • TRANSACTION

        static final StringSE TRANSACTION

        スレッドに関連付けられたトランザクションを制御するコンテキスト。

        クリアされたトランザクションコンテキストがスレッドに適用されると、以前にそこに存在していたグローバルトランザクションが最初に一時停止され、コンテキストタスクまたはアクションがコンテナーの許可に従って独自の新しい UserTransaction を開始および管理できるようになります。コンテキストタスクまたはアクションが完了すると、前のトランザクションがスレッド上で再開されます。これは、値が ManagedTask.SUSPEND の実行プロパティ ManagedTask.TRANSACTION と同等です。

        実行プロパティ ManagedTask.TRANSACTION が指定されている場合、リソース定義アノテーションで指定されているトランザクションコンテキストの動作よりも優先されます。

        Jakarta EE プロバイダーは、他のスレッドへのトランザクションの伝搬をサポートする必要はなく、伝搬されたコンテキストとしてトランザクションを含むリソース定義アノテーションを拒否できます。

    • 要素の詳細

      • name

        StringSE name

        定義されている ContextService インスタンスの JNDI 名。JNDI 名は、次のような有効な Jakarta EE 名前空間にある必要があります。

        • java: コンプ
        • java: モジュール
        • java: アプリ
        • java: グローバル
        戻り値:
        ContextService JNDI 名。
      • cleared

        StringSE[] cleared

        スレッドがコンテキストタスクまたはアクションを実行するたびにクリアするコンテキストの型。その後、スレッドの以前のコンテキストが復元されます。

        このクラスには、Jakarta EE Concurrency 仕様で定義されているコンテキスト型用の定数が用意されています。

        戻り値:
        クリアするコンテキスト型。
        デフォルト:
        {"Transaction"}
      • propagated

        StringSE[] propagated

        リクエスト元のスレッドから取得し、コンテキストタスクまたはアクションを実行するスレッドに伝達するコンテキストの種類。キャプチャーされたコンテキストは、スレッドがコンテキストタスクまたはアクションを実行するときに再確立され、その後、それぞれのスレッドの以前のコンテキストが復元されます。

        このクラスには、Jakarta EE Concurrency 仕様で定義されているコンテキスト型用の定数が用意されています。

        戻り値:
        キャプチャーして伝播するコンテキスト型。
        デフォルト:
        {"Remaining"}
      • unchanged

        StringSE[] unchanged

        スレッドがコンテキストタスクまたはアクションを実行するときに放置されるコンテキストの型。

        例:  unchanged = TRANSACTION を使用すると、関数がコンテキスト化された後、関数が同じスレッドで実行される前にトランザクションが開始された場合、トランザクションはコンテキスト関数でアクティブになります。

        Consumer<String, Integer> updateDB = contextService.contextualConsumer(fn);
        
        // later, on another thread
        tx.begin();
        updateDB.accept("java:comp/env/jdbc/ds1");
        //...additional transactional work
        tx.commit();

        このクラスには、Jakarta EE Concurrency 仕様で定義されているコンテキスト型用の定数が用意されています。

        戻り値:
        変更しないコンテキスト型。
        デフォルト:
        {}