クラス、メソッド、およびフィールドのレベルでソース・コードに注釈を追加することができます。
注釈の使用
EJB 3.1 および Java™ Persistence API はメタデータ注釈を使用します。これは、J2SE 5.0 で導入されたフィーチャーです。注釈は、注釈タイプの前に付けられる @ 記号から構成され、その後に、要素と値が対になった括弧付きのリストが続くものもあります。
EJB 3.1 の仕様では、各種の注釈型が定義されます。例:
- コンポーネント定義の注釈。例: @Stateless。Bean タイプを指定します。
- @Remote および @Local は、Bean がリモートにアクセス可能なのか、ローカルにアクセス可能なのかを指定します。
- @TransactionAttribute は、トランザクション属性を指定します。
- @MethodPermissions、@Unchecked、および @SecurityRoles は、セキュリティーとメソッド・アクセス権を指定します。
Java Persistence API は、エンティティーの作成に固有の注釈を追加します。例:
- @Entity は、クラスがエンティティーであると指定する、コンポーネント定義の注釈です。
- @Table は、クラスで使用するデータ・ソースを指定します。
注: JPA マッピング注釈 (例えば @Id、@Column など) は、フィールドとメソッドの両方に適用できますが、エンティティー・クラスの場合は、いずれか一方にしか適用できません。つまり、すべての注釈をフィールドに適用するか、すべてをメソッドに適用するかのいずれかです。
フィールドは private な可視性、保護された可視性、パッケージの可視性のいずれかしか持てず、エンティティーのクライアントは、このフィールドに直接アクセスすることは許可されません。このため、public の getter および setter を定義する必要があります。
- @MethodPermissions、@Unchecked、および @SecurityRoles は、セキュリティーとメソッド・アクセス権を指定します。
注釈の有効範囲と配置
注釈は、クラス、インターフェース、メソッド、またはインターフェースで、メソッドまたはフィールドのレベルで作動します。
例えば、コンポーネント定義の注釈 (
@Stateless や
@Entity など) はクラス・レベルの注釈で、次のようにクラス宣言の前のコメント・セクションに挿入されます。
package com.ibm.websphere.ejb3sample.counter;
import javax.ejb.Stateless;
import javax.interceptor.Interceptors;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
@Interceptors ( Audit.class )
public class StatelessCounterBean implements LocalCounter, RemoteCounter {
これらの注釈の順序には重要性がありません。コンポーネント定義の注釈が他の注釈の前に置かれますが、これが必須というわけではありません。メソッド・レベルとフィールド・レベルの注釈は、次のように、クラスまたはメソッドの内部に置かれます。
public class JPACounterEntity {
@Id
private String primarykey = "PRIMARYKEY";
private int value = 0;