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