클래스, 메소드 및 필드 레벨에서 소스 코드에 어노테이션을 추가할 수 있습니다.
어노테이션 사용
EJB 3.1 및 Java™ Persistence API는 J2SE 5.0에 소개된 기능인
메타데이터 어노테이션을 사용합니다. 어노테이션은 어노테이션 유형 앞에 @ 부호로 구성되며 경우에 따라 어노테이션 다음에
요소-값 쌍의 설명적 목록으로 구성됩니다. EJB 3.1 스펙은 다음과 같이 다양한 어노테이션 유형을 정의합니다.
- Bean 유형을 지정하는 @Stateless와 같은
컴포넌트 정의 어노테이션
- Bean에 원격 또는 로컬로 액세스할 수 있는지 여부를 지정하는 @Remote 및 @Local
- 트랜잭션 속성을 지정하는 @TransactionAttribute
- 보안 및 메소드 권한을 지정하는 @MethodPermissions, @Unchecked,
및 @SecurityRoles
Java Persistence API는
다음과 같이 엔티티 작성에 고유한 어노테이션을 추가합니다.
- 클래스가 엔티티인지 지정하는 컴포넌트 정의 어노테이션인 @Entity
- 클래스에서 사용되는 데이터 소스를 지정하는 @Table
참고: JPA 맵핑
어노테이션(예: @Id, @Column)은 필드와 메소드에 모두 적용할 수 있지만
임의의 하나의 엔티티 클래스에 대해서는 둘 중 하나에만 어노테이션을 적용할 수 있습니다.
즉, 모든 어노테이션을 필드에 적용하거나 모든 어노테이션을 메소드에 적용해야 합니다.
필드에는 개인용, 보호 또는 패키지 가시성만 있을 수 있으며
엔티티의 클라이언트에서 필드에 직접 액세스할 수 없으므로
공용 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;