|
以下の節では、EJB 3.0 メタデータ アノテーションに関するリファレンス情報を提供します。
新しい EJB 3.0 プログラミング モデルでは、JDK 5.0 メタデータ アノテーション機能を使用して、アノテーション付き EJB 3.0 Bean ファイルを作成します。次に、WebLogic コンパイル ツール weblogic.appc
(またはこれと同等の Ant タスク wlappc
) を使用して Bean ファイルを Java クラス ファイルにコンパイルし、必要となる EJB インタフェースやデプロイメント記述子など、関連する EJB アーティファクトを生成します。
以降の節では、EJB Bean ファイルで指定できるメタデータ アノテーションのリファレンス情報を提供します。一部のアノテーションは javax.ejb
パッケージに含まれています。つまり、EJB に固有のアノテーションです。それ以外のアノテーションは、より一般的で他の Java Platform, Enterprise Edition (Java EE) バージョン 5 コンポーネントでも使用するアノテーションです。したがって、javax.annotation
などの一般的なパッケージに含まれています。
この節では、以下のアノテーションのリファレンス情報を提供します。
操作環境でメッセージ駆動型 Bean をコンフィグレーションするために使用するプロパティを指定します。確認応答モード、メッセージ セレクタ、想定される送り先やエンドポイントのタイプなどの情報を含めることができます。
このアノテーションは、@
javax.ejb.MessageDriven
アノテーションの activationConfig
属性の値としてのみ使用します。
その例外がアプリケーション例外で、クライアント アプリケーションに直接 (ラップせずに) 報告することを指定します。
このアノテーションは、検査済みの例外と未検査の例外の両方に適用できます。
EJB ビジネス インタフェースまはたホーム インタフェースへの依存性 (参照) を指定します。
他の EJB への依存性を指定するには、Bean のインスタンス変数に @EJB
アノテーションを付けます。WebLogic Server では、アノテーションを付けた変数が、依存先の EJB への参照に基づいて自動的に初期化されます。これを「依存性注入」と呼びます。この初期化は、Bean の EJBContext
が設定された後、Bean のビジネス メソッドが呼び出される前に発生します。
このアノテーションを Bean クラス内のセッター メソッドに付けることもできます。その場合、WebLogic Server はセッター メソッド自体を使用して依存性注入を実行します。この方法でインスタンス変数に依存性を注入することもできます。
このアノテーションをクラスに適用すると、Bean が実行時にルックアップする EJB が宣言されます。
変数またはセッター メソッドへの注入を使用する場合、WebLogic Server では、アノテーションを付けたインスタンス変数またはセッター メソッドのパラメータの名前またはデータ型に基づいて参照先の EJB の名前が判別されます。少しでも不明確な場合は、@EJB
アノテーションの beanName
属性または mappedName
属性を使用して、依存先の EJB の名前を明示的に指定する必要があります。
@javax.ejb.EJB
アノテーションの配列を指定します。
Bean クラス内のメソッドと、適合する EJB 2.1 EJBHome
または EJBLocalHome
クライアント ビューの createMETHOD
メソッドとの対応関係を指定します。
このアノテーションは、ステートフル セッション Bean (クラス レベルの @javax.ejb.Stateful
アノテーションを付けた Bean) でのみ使用します。
@javax.ejb.Init
アノテーションを付けたメソッドの戻り値の型は void
でなければなりません。また、パラメータの型は、参照する createMETHOD
メソッドのパラメータの型とまったく同じである必要があります。
@Init アノテーションが必要になるのは、Remote-Home または LocalHome インタフェースを提供するステートフル セッション Bean のみです。少しでも不明確な場合は、value
属性を使用して、Home または LocalHome インタフェースの適合する create メソッドの名前を指定する必要があります。
セッション Bean のローカル インタフェースを指定します。ローカル インタフェースは、ビジネス ロジックをローカル クライアント (EJB と同じアプリケーションで動作しているクライアント) にエクスポーズします。ローカル クライアントから呼び出せるビジネス メソッドを定義する。
Bean クラスに複数のインタフェース (ただし以下のインタフェースを除く) が実装されている場合は、このアノテーションを指定する必要があります。
このアノテーションは、ステートレスまたはステートフル セッション Bean にのみ適用されます。
Bean クラスのローカル ホーム インタフェースを指定します。
ローカル ホーム インタフェースは、ローカル クライアント (EJB と同じアプリケーションで動作するクライアント) から使用して、Bean のインスタンスを作成、削除、および (エンティティ Bean の場合は) 検索することができるメソッドを提供します。ローカル ホーム インタフェースには、特定の Bean インスタンスに固有ではないビジネス ロジックである「ホーム メソッド」もあります。
この属性は、ステートレスおよびステートフル セッション Bean にのみ適用されます。
通常、この属性は、EJB 3.0 Bean の適合する EJB 2.1 コンポーネント ビューを提供する予定がある場合にのみ指定します。このアノテーションは、EJB 2.1 API に記述されている Bean クラスにも使用できます。
エンタープライズ JavaBean がメッセージ駆動型 Bean であることを指定します。
|
|||||
EJB コンテナが Bean インスタンスを再アクティブ化した直後に通知を受信するライフサイクル コールバック メソッドを指定します。
このアノテーションは、ステートフル セッション Bean にのみ適用されます。ステートフル セッション Bean インスタンスがパッシベーションされたときの会話状態は EJB コンテナによって自動的に保持されるため、ほとんどのステートフル セッション Bean ではこのアノテーションを指定する必要はありません。このアノテーション (およびこれと対をなす @PrePassivate
) を使用する必要があるのは、ステートフル セッション Bean で開いておきたいリソースがあり、そのリソースを Bean インスタンスのパッシベーションの前に閉じ、Bean インスタンスのアクティブ化中に開きなおす必要がある場合のみです。
このアノテーションは、Bean クラス内の 1 つのメソッドにのみ付けることができます。このアノテーションを複数のメソッドに付けた場合、その EJB はデプロイされません。
@PostActivate
アノテーションを付けるメソッドは、以下の要件を満たす必要があります。
EJB コンテナが Bean インスタンスをパッシベーションする直前に通知を受信するライフサイクル コールバック メソッドを指定します。
このアノテーションは、ステートフル セッション Bean にのみ適用されます。ステートフル セッション Bean インスタンスがパッシベーションされたときの会話状態は EJB コンテナによって自動的に保持されるため、ほとんどのステートフル セッション Bean ではこのアノテーションを指定する必要はありません。このアノテーション (およびこれと対をなす @PostActivate
) を使用する必要があるのは、ステートフル セッション Bean で開いておきたいリソースがあり、そのリソースを Bean インスタンスのパッシベーションの前に閉じ、Bean インスタンスのアクティブ化中に開きなおす必要がある場合のみです。
このアノテーションは、Bean クラス内の 1 つのメソッドにのみ付けることができます。このアノテーションを複数のメソッドに付けた場合、その EJB はデプロイされません。
@PrePassivate
アノテーションを付けるメソッドは、以下の要件を満たす必要があります。
セッション Bean のリモート インタフェースを指定します。リモート インタフェースはビジネス ロジックをリモート クライアント (EJB とは別のアプリケーションで動作するクライアント) にエクスポーズします。リモート クライアントから呼び出せるビジネス メソッドを定義する。
このアノテーションは、ステートレスまたはステートフル セッション Bean にのみ適用されます。
Bean クラスのリモート ホーム インタフェースを指定します。
リモート ホーム インタフェースは、リモート クライアント (EJB とは別のアプリケーションで動作するクライアント) で Bean のインスタンスを作成、削除、および検索するためのメソッドを提供します。
この属性は、ステートレスおよびステートフル セッション Bean にのみ適用されます。
通常、この属性は、EJB 3.0 Bean の適合する EJB 2.1 コンポーネント ビューを提供する予定がある場合にのみ指定します。このアノテーションは、EJB 2.1 API に記述されている Bean クラスにも使用できます。
@javax.ejb.Remove
アノテーションは、ステートフル セッション Bean の remove メソッドを指定するために使用します。
EJB コンテナは、そのメソッドが完了したときに、@
javax.annotation.PreDestroy
アノテーションが付いているメソッドがあればそれを呼び出してからステートフル セッション Bean を破棄します。
エンタープライズ JavaBean がステートフル セッション Bean であることを指定します。
エンタープライズ JavaBean がステートレス セッション Bean であることを指定します。
mappedName 属性の値を使用する。具体的には、JNDI 名は次のようになる。
com.CheckingAccount である場合に mappedName="bank" と指定すると、このビジネス インタフェースの JNDI 名は bank#com.CheckingAccount となる。
|
|||||
このアノテーションは、Bean クラス内で EJB タイマー サービスを簡単にプログラミングするためのアノテーションです。EJB タイマー サービスは EJB コンテナによって提供されるサービスです。このサービスを使用すると、タイマー オブジェクトが期限切れになったときに発生するコールバックをスケジューリングするタイマーを作成できます。
EJB 3.0 より前のバージョンでタイマー サービスをプログラミングするには、Bean クラスに javax.ejb.TimedObject
オブジェクトを実装する必要がありました。また、Bean クラスに ejbTimeout
という名前のメソッドを含める必要もありました。EJB のバージョン 3.0 では、これらの要件が緩和されました。javax.ejb.TimedObject
インタフェースを実装する必要はなくなり、@Timeout
アノテーションを付けている限り、タイムアウト メソッドに任意の名前を付けることができるようになりました。ただし、必要であれば、3.0 より前の方法でタイマー サービスをプログラミングすることもできます。
詳細については、「EJB タイマー サービスのプログラミング」を参照してください。
EJB コンテナが EJB ビジネス メソッドをトランザクション コンテキスト内で呼び出すかどうかを指定します。
警告 : | このアノテーションを指定した場合は、@TransactionManagement アノテーションを使用して、コンテナ管理によるトランザクションの境界設定を指定する必要があります。 |
このアノテーションは、Bean クラスに指定することも、クラスの特定のメソッド (ビジネス インタフェースのメソッド) に指定することもできます。Bean クラスに指定した場合、アノテーションはそのクラスの該当するすべてのビジネス インタフェース メソッドに適用されます。特定のメソッドに指定した場合は、そのメソッドにのみ適用されます。このアノテーションをクラス レベルとメソッド レベルの両方で指定し、それらの値が食い違っている場合は、メソッド レベルの値が優先されます。
Bean クラスで @TransactionAttribute
アノテーションを指定しない場合は、コンテナ管理によるトランザクションの境界設定が使用されます。トランザクション属性のセマンティクスは REQUIRED と見なされます。
|
セッション Bean またはメッセージ駆動型 Bean のトランザクションの境界設定管理の種類を指定します。
トランザクションとは、ディスク上、メモリ内、またはデータベース内にあるアプリケーションの状態を変更する作業の 1 単位であり、一度開始されると最後まで完了するか、あるいは一切何も行われません。トランザクションは、EJB コンテナ、Bean のコード、またはクライアント コードによって境界設定 (開始され、コミットまたはロールバックで終わる) できます。このアノテーションは、トランザクションの境界設定を、EJB コンテナで管理するか、ユーザが記述した Bean コードで管理するかを指定します。
Bean クラスにこのアノテーションを指定しない場合、その Bean ではトランザクションの境界設定をコンテナで管理するものと見なされます。
トランザクションの詳細については、「トランザクションの設計と管理のオプション」を参照してください。
この節では、以下のアノテーションのリファレンス情報を提供します。
Bean クラスまたはインターセプタ クラスのビジネス メソッド インターセプタを指定します。
@AroundInvoke
アノテーションは、Bean クラスまたはインターセプタ クラス内の「1 つ」のメソッドにのみ付けることができます。なお、Bean クラスのビジネス メソッドに付けることはできません。
このアノテーションを付けたメソッドに対して、クラス レベルのインターセプタを呼び出さないことを指定します。このアノテーションでは、デフォルト インターセプタは除外されません。デフォルト インターセプタの呼び出しは、@ExcludeDefaultInterceptors
アノテーションでのみ除外できます。
定義されているどのデフォルト インターセプタも呼び出さないことを指定します (デフォルト インターセプタは、EJB デプロイメント記述子でのみ指定できます。アノテーションでは指定できません)。
クラス レベルで定義した場合、デフォルト インターセプタは Bean のどのビジネス メソッドに対しても呼び出されません。メソッド レベルで定義した場合は、その特定のビジネス メソッドに対しては呼び出されませんが、それ以外の @ExludeDefaultInterceptors
アノテーションが付いていないすべてのビジネス メソッドに対しては呼び出されます。
Bean クラスまたはメソッドに関連付けるインターセプタ クラスを指定します。インターセプタ クラスは、Bean クラスとはまったく別のクラスです。インターセプタ クラスのメソッドは、Bean のビジネス メソッド呼び出しまたはライフサイクル イベントに呼応する形で呼び出されます。
インターセプタ クラスには、ビジネス インターセプタ メソッド (@javax.interceptor.AroundInvoke
アノテーションを付けたメソッド) と、ライフサイクル コールバック メソッド (@javax.annotation.PostConstruct
、@javax.annotation.PreDestroy
、@javax.ejb.PostActivate
、または @javax.ejb.PrePassivate
アノテーションを付けたメソッド) の両方を含めることができます。
Bean クラスに対して定義できるインターセプタ クラスの数に制限はありません。複数のインターセプタ クラスを定義した場合は、そのアノテーション内に指定した順序で呼び出されます。
アノテーションをクラス レベルで指定した場合、インターセプタは EJB のすべてのビジネス メソッドに適用されます。メソッド レベルで指定した場合は、そのメソッドにのみ適用されます。同じインターセプタ クラスを、Bean クラスの複数のメソッドに指定することもできます。メソッド レベルのインターセプタは、デフォルトでは、適用されるすべてのインターセプタ (デフォルト インターセプタ、クラス レベルのインターセプタなど) の後に呼び出されます。
この節では、以下のアノテーションのリファレンス情報を提供します。
コンテナ管理の EntityManager
永続性コンテキストへの依存性を指定します。
このアノテーションは、3.0 エンティティ Bean と対話するために使用します。通常は EntityManager
インスタンスへの依存性注入を実行します。
EntityManager
インタフェースには、永続性コンテキストとの対話に使用するメソッドが定義されています。永続性コンテキストとは、エンティティ インスタンスのセットです。エンティティとは、軽量の永続ドメイン オブジェクトです。EntityManager
API を使用すると、永続エンティティ インスタンスの作成や削除、主キーに基づくエンティティの検索、およびエンティティに対するクエリを実行できます。
persistence.xml ファイル内の永続性ユニットと同じ名前を指定すると、EJB コンテナによって永続性ユニットが自動的にデプロイされ、その JNDI 名としてその永続性ユニット名が設定される。同様に、この属性を指定しない場合でも、永続性コンテキスト情報を注入する変数の名前を persistence.xml ファイル内の永続性ユニットの名前と同じにすれば、EJB コンテナによって永続性ユニットが自動的にデプロイされ、その JNDI 名が永続性ユニット名と同じになるように設定される。
|
|||||
@javax.persistence.PersistencContext
アノテーションの配列を指定します。
EntityManagerFactory
オブジェクトへの依存性を指定します。
このアノテーションは、3.0 エンティティ Bean と対話するために使用します。通常は、EntityManagerFactory
への依存性注入を実行します。この EntityManagerFactory
を使用して、1 つまたは複数の EntityManager
インスタンスを作成できます。このアノテーションは @PersistenceContext
アノテーションに似ていますが、EntityManager
の作成や破棄を EJB コンテナに任せずユーザ自身が行うため、その存続期間をより細かく制御できる点が異なります。
EntityManager
インタフェースには、永続性コンテキストとの対話に使用するメソッドが定義されています。永続性コンテキストとは、エンティティ インスタンスのセットです。エンティティとは、軽量の永続ドメイン オブジェクトです。EntityManager
API を使用すると、永続エンティティ インスタンスの作成や削除、主キーに基づくエンティティの検索、およびエンティティに対するクエリを実行できます。
persistence.xml ファイルに定義されている永続性ユニットの名前を参照する。このファイルは、EJB JAR ファイルの META-INF ディレクトリに格納されている XML ファイルで、エンティティ Bean で使用するデータベースと、EntityManager のデフォルトの動作を指定する。
|
@javax.persistence.PersistenceUnit
アノテーションの配列を指定します。
この節では、以下のアノテーションのリファレンス情報を提供します。
依存性注入が完了した後、1 番目のビジネス メソッドを呼び出す前に、初期化を実行するために EJB コンテナから呼び出す必要のあるライフサイクル コールバック メソッドを指定します。
依存性注入を含むすべての Bean クラスには、@PostConstruct
メソッドを指定できます。
このアノテーションは、Bean クラス内の 1 つのメソッドにのみ付けることができます。このアノテーションを複数のメソッドに付けた場合、その EJB はデプロイされません。
@PostConstruct
アノテーションを付けるメソッドは、以下の要件を満たす必要があります。
EJB コンテナが Bean クラス インスタンスを破棄する直前に通知を受信するライフサイクル コールバック メソッドを指定します。通常、このアノテーションは、Bean クラスが保持しているリソースを解放するメソッドに適用します。
このアノテーションは、Bean クラス内の 1 つのメソッドにのみ付けることができます。このアノテーションを複数のメソッドに付けた場合、その EJB はデプロイされません。
@PreDestroy
アノテーションを付けるメソッドは、以下の要件を満たす必要があります。
外部リソース (JDBC データ ソース、JMS 送り先、接続ファクトリなど) への依存性を指定します。
このアノテーションをフィールドまたはメソッドに指定すると、Bean の初期化時に、要求されたリソースのインスタンスが Bean に注入されます。このアノテーションをクラスに適用すると、Bean が実行時にルックアップするリソースが宣言されます。
この節では、以下のアノテーションのリファレンス情報を提供します。
通常、このアノテーションは、アノテーションを付けたクラスのメソッド内から (たとえば isUserInRole
メソッドを使用して) テストできるロールを定義するために使用します。また、クラスまたはクラスのメソッドで @RolesAllowed
アノテーションを使用している場合はロールが暗黙的に宣言されますが、このアノテーションを使用することでそれらのロールを明示的に宣言できます。
セキュリティ ロールは、WebLogic Server で Administration Console を使用して作成できます。詳細については、「セキュリティ ロールの管理」を参照してください。
このアノテーションを付けたメソッドへのアクセスを、どのセキュリティ ロールにも許可しないことを指定します。つまり、このメソッドは、EJB コンテナでの実行から除外されます。
このアノテーションを付けたメソッドへのアクセスを、WebLogic Server に定義されているすべてのセキュリティ ロールに許可することを指定します。
EJB 内のメソッドにアクセスできるセキュリティ ロールのリストを指定します。
クラス レベルで指定した場合は、Bean クラス内のすべてのメソッドに適用されます。メソッド レベルで指定した場合は、そのメソッドにのみ適用されます。このアノテーションをクラス レベルとメソッド レベルの両方で指定した場合は、クラス レベルの値がメソッド レベルの値によってオーバーライドされます。
セキュリティ ロールは、WebLogic Server で Administration Console を使用して作成できます。詳細については、「セキュリティ ロールの管理」を参照してください。
EJB コンテナ内で実際に EJB を実行するセキュリティ ロールを指定します。
指定するセキュリティ ロールは、WebLogic Server のセキュリティ レルム内に存在し、ユーザまたはグループにマッピングされている必要があります。詳細については、「セキュリティ ロールの管理」を参照してください。