パッケージ jakarta.enterprise.context
スコープとコンテキストに関連するアノテーションとインターフェース。
スコープ型は、@Scope
または @NormalScope
アノテーションが付けられた Java アノテーションです。Bean のスコープは、インスタンスのライフサイクルと可視性を決定します。特に、スコープは以下を決定します。
- Bean の新しいインスタンスが作成されたとき
- Bean の既存のインスタンスが破棄されたとき
- どの注入された参照が Bean のインスタンスを参照しているか
組み込みスコープ
次の組み込みスコープが提供されています: @Dependent
、@RequestScoped
、@ConversationScoped
、@SessionScoped
、@ApplicationScoped
、@Singleton
。
コンテナーは、組み込みスコープごとに Context
インターフェースの実装を提供します。組み込みのリクエスト、セッション、アプリケーションコンテキストは、サーブレット、Web サービス、EJB の呼び出しをサポートします。組み込みの会話コンテキストは JSF リクエストをサポートします。
他の種類の呼び出しの場合、ポータブル拡張機能は、組み込みスコープのいずれかまたはすべてのカスタムコンテキストオブジェクトを定義できます。例: サードパーティの Web アプリケーションフレームワークは、組み込みの会話スコープの会話コンテキストオブジェクトを提供する場合があります。
組み込みスコープに関連付けられたコンテキストは、EJB ローカルビジネスメソッドの呼び出しを含む、ローカルの同期 Java メソッド呼び出し全体に伝播します。コンテキストは、リモートメソッドの呼び出し間、または JMS メッセージリスナーや EJB タイマーサービスのタイムアウトなどの非同期プロセスには伝播しません。
通常のスコープと疑似スコープ
ほとんどのスコープは通常のスコープです。通常のスコープは @NormalScope
を使用して宣言されます。Bean に通常のスコープがある場合、特定のスレッドで実行されるすべてのクライアントは、Bean の同じコンテキストインスタンスを参照します。このインスタンスは、Bean の現在のインスタンスと呼ばれます。通常のスコープ型のコンテキストオブジェクトの操作 Context.get(Contextual)
は、常に指定された Bean の現在のインスタンスを返します。
通常のスコープではないスコープは、疑似スコープと呼ばれます。疑似スコープは @Scope
を使用して宣言されます。疑似スコープの場合、現在のインスタンスの概念は明確に定義されていません。同じスレッドで実行されている異なるクライアントは、Bean の異なるインスタンスを参照する場合があります。@Dependent
疑似スコープの極端なケースでは、すべてのクライアントが Bean の独自のプライベートインスタンスを持っています。
@Dependent
および @Singleton
疑似スコープを除いて、すべての組み込みスコープは通常のスコープです。
コンテキストに基づいた、注入された参照の有効性
プログラムによるルックアップを介してコンテナーから取得された Bean への参照は、コンテキスト参照と呼ばれます。通常のスコープを持つ Bean のコンテキスト参照は、Bean の現在のインスタンスを参照します。Bean のコンテキスト参照は、特定の期間のみ有効です。アプリケーションは、無効な参照のメソッドを呼び出さないでください。
Bean のコンテキスト参照の有効性は、Bean のスコープが通常のスコープか疑似スコープかによって異なります。
- 通常のスコープを持つ Bean への参照は、アプリケーションがハード参照を維持している限り有効です。ただし、通常のスコープに関連付けられたコンテキストがアクティブな場合にのみ呼び出すことができます。コンテキストが非アクティブのときに呼び出された場合、
ContextNotActiveException
がコンテナーによってスローされます。 - 疑似スコープを持つ Bean への参照は、それが参照する Bean インスタンスが破棄されるまで有効です。疑似スコープに関連付けられたコンテキストがアクティブでない場合でも呼び出されることがあります。アプリケーションが、すでに破棄されているインスタンスへの参照のメソッドを呼び出す場合、動作は未定義です。
依存性注入を介してコンテナーから取得された Bean への参照は、注入された参照と呼ばれる特別な種類のコンテキスト参照です。挿入された参照の有効性には、追加の制限が適用されます。
- フィールドに注入された Bean、Bean コンストラクター、初期化メソッドへの参照は、それが注入されたオブジェクトが破棄されるまでのみ有効です。
- プロデューサーメソッドに挿入された Bean への参照は、プロデュースされているプロデューサーメソッドの Bean インスタンスが破棄されるまでのみ有効です。
- ディスポーザメソッドまたはオブザーバメソッドに挿入された Bean への参照は、メソッドの呼び出しが完了するまでのみ有効です。
インターフェースのサマリー インターフェース 説明 Conversation アプリケーションが、現在の会話を一時的または長時間実行としてマークするか、会話識別子を指定するか、会話タイムアウトを設定することにより、会話コンテキストを管理できるようにします。クラスのサマリー クラス 説明 ApplicationScoped.Literal ApplicationScoped
アノテーションのインラインインスタンス化をサポートします。BeforeDestroyed.Literal BeforeDestroyed
修飾子のインラインインスタンス化をサポートします。ConversationScoped.Literal ConversationScoped
アノテーションのインラインインスタンス化をサポートします。Dependent.Literal Dependent
アノテーションのインラインインスタンス化をサポートします。Destroyed.Literal Destroyed
修飾子のインラインインスタンス化をサポートします。Initialized.Literal Initialized
修飾子のインラインインスタンス化をサポートします。RequestScoped.Literal RequestScoped
アノテーションのインラインインスタンス化をサポートします。SessionScoped.Literal SessionScoped
アノテーションのインラインインスタンス化をサポートします。例外のサマリー 例外 説明 BusyConversationException 同時リクエストが同じ会話コンテキストに関連付けられているため、コンテナーがリクエストを拒否したことを示します。ContextException コンテキスト管理に関する問題を示します。ContextNotActiveException コンテキストがアクティブでないことを示します。NonexistentConversationException 会話コンテキストを復元できなかったことを示します。アノテーション型のサマリー アノテーション型 説明 ApplicationScoped Bean がアプリケーションスコープであることを指定します。BeforeDestroyed この修飾子を持つイベントは、コンテキストが破棄されようとしているとき、つまりConversationScoped Bean が会話スコープであることを指定します。Dependent Bean が従属疑似スコープに属することを指定します。Destroyed この修飾子を持つイベントは、コンテキストが破棄されると発生します。Initialized この修飾子を持つイベントは、コンテキストが初期化されたとき、つまりNormalScope アノテーション型が通常のスコープ型であることを指定します。RequestScoped Bean がリクエストスコープであることを指定します。SessionScoped Bean がセッションスコープであることを指定します。