アノテーションインターフェース 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アノテーションを有効にします。必須定数のサマリー
必須要素オプション要素の概要
オプション要素修飾子と型オプションの要素説明StringSE[]スレッドがコンテキストタスクまたはアクションを実行するたびにクリアするコンテキストの型。StringSE[]リクエスト元のスレッドから取得し、コンテキストタスクまたはアクションを実行するスレッドに伝達するコンテキストの種類。ClassSE<?>[]必要なqualifier annotationsのリスト。StringSE[]スレッドがコンテキストタスクまたはアクションを実行するときに放置されるコンテキストの型。フィールドのサマリー
フィールド修飾子と型フィールド説明static final StringSE他の場所で指定されていない、使用可能なすべてのスレッドコンテキスト型。static final StringSEJakarta EE 名前空間 (java:comp/env/など) およびスレッドコンテキストクラスローダーを含む、アプリケーションコンポーネントまたはモジュールに関連するコンテキスト。static final StringSEスレッドに関連付けられている資格情報を制御するコンテキスト (呼び出し元サブジェクトと呼び出し /RunAs サブジェクトを含む)。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
Jakarta EE 名前空間 (
java:comp/env/など) およびスレッドコンテキストクラスローダーを含む、アプリケーションコンポーネントまたはモジュールに関連するコンテキスト。クリアされたアプリケーションコンテキストは、スレッドがどのアプリケーションコンポーネントにも関連付けられておらず、アプリケーションの Jakarta EE 名前空間およびスレッドコンテキストクラスローダーへのアクセスがないことを意味します。
- 関連事項:
SECURITY
スレッドに関連付けられている資格情報を制御するコンテキスト (呼び出し元サブジェクトと呼び出し /RunAs サブジェクトを含む)。
クリアされたセキュリティコンテキストは、スレッドに認証されていないサブジェクトを与えます。
- 関連事項:
TRANSACTION
スレッドに関連付けられたトランザクションを制御するコンテキスト。
クリアされたトランザクションコンテキストがスレッドに適用されると、以前にそこに存在していたグローバルトランザクションが最初に一時停止され、コンテキストタスクまたはアクションがコンテナーの許可に従って独自の新しい
jakarta.transaction.UserTransactionを開始および管理できるようになります。コンテキストタスクまたはアクションが完了すると、前のトランザクションがスレッド上で再開されます。これは、値がManagedTask.SUSPENDの実行プロパティManagedTask.TRANSACTIONと同等です。実行プロパティ
ManagedTask.TRANSACTIONが指定されている場合、リソース定義アノテーションで指定されているトランザクションコンテキストの動作よりも優先されます。Jakarta EE プロバイダーは、他のスレッドへのトランザクションの伝搬をサポートする必要はなく、伝搬されたコンテキストとしてトランザクションを含むリソース定義アノテーションを拒否できます。
- 関連事項:
要素の詳細
name
StringSE name定義されている
ContextServiceインスタンスの JNDI 名。JNDI 名は、次のような有効な Jakarta EE 名前空間にある必要があります。- java: コンプ
- java: モジュール
- java: アプリ
- java: グローバル
- 戻り値:
ContextServiceJNDI 名。
qualifiers
ClassSE<?>[] qualifiers必要な
qualifier annotationsのリスト。これらの修飾子アノテーションを持つ
ContextServiceインジェクションポイントは、このContextServiceDefinitionによって生成される Bean を注入します。デフォルト値は空のリストで、この
ContextServiceDefinitionがインジェクションポイントに対して Bean インスタンスを自動的に生成しないことを示します。修飾子リストが空でない場合、コンテナーは
ContextServiceインスタンスを作成し、指定された必須修飾子と必須型のContextServiceを使用して、そのインスタンスのApplicationScopedBean を登録します。Bean のライフサイクルはアプリケーションのライフサイクルと一致し、Bean はアプリケーションの外部からアクセスできません。空でない修飾子リストも構成する場合、アプリケーションはjava:globalnameを構成してはなりません。アプリケーションは、プロデューサーの修飾子のアノテーションが
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 仕様で定義されているコンテキスト型用の定数が用意されています。
- 戻り値:
- 変更しないコンテキスト型。
- デフォルト:
- {}