アノテーションインターフェース ContextServiceDefinition


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

qualifiers() によって指定され、name() 属性で指定された JNDI 名でコンテナーによって JNDI に登録された必要な Qualifier アノテーションを含む、ContextService インジェクションポイントに注入される ContextService を定義します。

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

@ContextServiceDefinition(
     name = "java:app/concurrent/MyContext",
     qualifiers = MyQualifier.class,
     propagated = APPLICATION,
     unchanged = TRANSACTION,
     cleared = ALL_REMAINING)
 public class MyServlet extends HttpServlet {
     @Inject
     @MyQualifier
     ConetxtService appContextSvc1;

     @Resource(lookup = "java:app/concurrent/MyContext",
               name = "java:app/concurrent/env/MyContextRef")
     ContextService appContextSvc2;
     ...

 @Qualifier
 @Retention(RetentionPolicy.RUNTIME)
 @Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE })
 public @interface MyQualifier {}
 

デプロイ記述子のリソース環境参照は、同様に 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 @interface
    同じ型で複数の ContextServiceDefinition アノテーションを有効にします。
  • 必須定数のサマリー

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

    オプション要素
    修飾子と型
    オプションの要素
    説明
    スレッドがコンテキストタスクまたはアクションを実行するたびにクリアするコンテキストの型。
    リクエスト元のスレッドから取得し、コンテキストタスクまたはアクションを実行するスレッドに伝達するコンテキストの種類。
    ClassSE<?>[]
    必要な qualifier annotations のリスト。
    スレッドがコンテキストタスクまたはアクションを実行するときに放置されるコンテキストの型。
  • フィールドのサマリー

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

    • 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

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

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

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

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

      関連事項:
  • 要素の詳細

    • name

      StringSE name

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

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

      ClassSE<?>[] qualifiers

      必要な qualifier annotations のリスト。

      これらの修飾子アノテーションを持つ ContextService インジェクションポイントは、この ContextServiceDefinition によって生成される Bean を注入します。

      デフォルト値は空のリストで、この ContextServiceDefinition がインジェクションポイントに対して Bean インスタンスを自動的に生成しないことを示します。

      修飾子リストが空でない場合、コンテナーは ContextService インスタンスを作成し、指定された必須修飾子と必須型の ContextService を使用して、そのインスタンスの ApplicationScoped Bean を登録します。Bean のライフサイクルはアプリケーションのライフサイクルと一致し、Bean はアプリケーションの外部からアクセスできません。空でない修飾子リストも構成する場合、アプリケーションは java:global name を構成してはなりません。

      アプリケーションは、プロデューサーの修飾子のアノテーションが ContextServiceDefinition の空でない qualifiers() リストと競合しない限り、ContextService インジェクションポイントに対して独自の Producers を定義できます。

      戻り値:
      修飾子のリスト。
      導入:
      3.1
      デフォルト:
      {}
    • 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 仕様で定義されているコンテキスト型用の定数が用意されています。

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