アノテーション型 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 StringSEAPPLICATIONJakarta EE 名前空間 (java:comp/env/など) およびスレッドコンテキストクラスローダーを含む、アプリケーションコンポーネントまたはモジュールに関連するコンテキスト。static StringSESECURITYスレッドに関連付けられている資格情報を制御するコンテキスト (呼び出し元サブジェクトと呼び出し /RunAs サブジェクトを含む)。static StringSETRANSACTIONスレッドに関連付けられたトランザクションを制御するコンテキスト。
必須定数のサマリー
必須要素 修飾子と型 必須要素 説明 StringSEname定義されているContextServiceインスタンスの JNDI 名。
フィールドの詳細
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: グローバル
- 戻り値:
ContextServiceJNDI 名。
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 仕様で定義されているコンテキスト型用の定数が用意されています。
- 戻り値:
- 変更しないコンテキスト型。
- デフォルト:
- {}