Java™ 또는 EJB 프로젝트를 작성한 후
세션 Bean, 엔티티 Bean 및 메시지 구동 Bean을 작성하여 프로젝트에 추가할 수 있습니다.
엔터프라이즈 Bean
엔터프라이즈 Bean은 기타 자원과 결합하여 Java 애플리케이션을
작성할 수 있는 Java 컴포넌트입니다. 엔터프라이즈 Bean에는
엔티티 Bean, 세션 Bean 및 메시지 구동 Bean과 같은 세 가지 유형이 있습니다.
모든 Bean은 Bean과 Bean이 있는 애플리케이션 서버 사이의 인터페이스를
제공하는 EJB(Enterprise Java Bean) 컨테이너에 있습니다.
EJB 3.1 스펙은 EJB 1.1 스타일의 엔티티 Bean을 더 이상 사용하지 않습니다.
JPA(Java Persistence API) 스펙이 더 이상
사용되지 않는 엔터프라이즈 Bean을 대체합니다.
JPA 대체가 엔티티 클래스로 불리지만, 이는
엔티티 엔터프라이즈 Bean과 혼동해서는 안 됩니다. JPA 엔티티는
엔터프라이즈 Bean이 아니며 EJB 컨테이너에서 실행될 필요가 없습니다.
또한 Web 3.0 프로젝트에서 EJB 3.0 및 3.1 Bean도 작성할 수 있습니다.
컴포넌트 정의 어노테이션
컴포넌트 정의 어노테이션을 사용하여
세션 Bean, 메시지 구동 Bean 및 JPA 엔티티와 같은 유형의 엔터프라이즈 Bean을
작성할 수 있습니다. @Stateful 및 @Stateless 컴포넌트 정의 어노테이션이
포함되어 있으면 클래스가 세션 Bean 클래스임을 나타내고, @Singleton 컴포넌트 정의
어노테이션이 포함되어 있으면 클래스가 싱글톤 클래스임을 나타내며, @MessageDriven 컴포넌트
정의 어노테이션이 포함되어 있으면 클래스가 메시지 구동 Bean 클래스임을 나타내며, @Entity
컴포넌트 정의 어노테이션이 포함되어 있으면 클래스가 JPA 엔티티임을 나타냅니다.
- 세션 Bean: EJB 3.1 스펙으로 개발된 세션 Bean에는 최소한
Bean 클래스가 있어야 합니다.
- Stateful: Stateful 세션 Bean은 클라이언트에 맞는
세션 정보 또는 복수 메소드 호출 및 트랜잭션에 걸친 대화 상태를
유지해야 합니다. Stateful 세션 Bean의 인스턴스는 작성 시 컨테이너가
지정하는 고유 ID를 가집니다.
- Stateless: Stateless 세션 Bean은
대화 상태를 유지하지 않습니다. Stateless 세션 Bean의 인스턴스는
대화 상태를 가지지 않습니다. Stateless 세션 EJB는 대화 상태를 유지하지
않으므로, 클라이언트와 EJB 사이에 교환된 모든 데이터는
EJB 비즈니스 메소드 인터페이스에 선언된 입력 매개변수 또는 리턴 값으로
전달되어야 합니다. Stateless 세션 Bean의 모든 인스턴스는 컨테이너가 지정한
동일한 오브젝트 ID를 가집니다.
- 싱글톤: EJB 3.1에 새로 도입된 싱글톤 세션 Bean은 특정
JVM(Java Virtual Machine)의 한 애플리케이션에 대해 한 번만 시작하도록 해주는
새로운 종류의 세션 Bean입니다. 싱글톤은
Stateless 세션 Bean과 유사한 기능을 제공하지만, 클라이언트 요청에 응답할 수 있는
Stateless 세션 Bean의 풀과 반대로 싱글톤에는 애플리케이션당 싱글톤 세션 Bean이
하나뿐이라는 점은 다릅니다. Stateless 세션 Bean과 마찬가지로 싱글톤 세션 Bean도
웹 서비스 엔드포인트를 구현할 수 있습니다. 싱글톤 세션 Bean은
클라이언트 호출 사이에 이들 상태를 유지보수하지만 서버 충돌 또는 종료 시에는
상태를 유지보수할 필요가 없습니다.
- 메시지 구동 Bean: 메시지 구동 Bean은
JMS(Java Message
Service)에서 비동기 메시지의 처리를 지원하기 위해 EJB 2.0에서
소개되었습니다.
EJB 2.1 스펙은 JMS뿐만 아니라 모든 메시지 전달 시스템을 지원할 수 있도록
메시지 구동 Bean의 정의를 확장합니다. 간단히 말하자면,
메시지 구동 Bean은 컨테이너가 호출할 수 있는 메시지
이용자입니다. 메시지가 도착할 때 컨테이너가 메시지 구동 Bean을 호출합니다. 메시지
Bean은 EJB 호출을 위한 다른 상호작용 메커니즘이지만, 세션 Bean과 다르게
메시지가 수신되면 클라이언트(또는 다른 Bean)가 아닌 컨테이너가
이들을 호출합니다.
- JPA(Java Persistence API)를 사용하는 엔티티: 엔티티는
Java EE 5 플랫폼의 일부인
새 JPA(Java Persistence API)를 사용합니다.
CMP(Container-Managed Persistence)를 사용하는 EJB 컴포넌트와 다르게
새 API를 사용하는 엔티티 오브젝트는 더 이상 컴포넌트가 아니며, 단지 Java 오브젝트입니다.
이로 인해 엔티티가 더 간단해지고 더 단순하게 프로그래밍 모델을 사용할 수 있습니다. JPA에 대한 자세한 정보는 JPA 문서를 참조하십시오.
EJB 개발 가이드라인
EJB 3.1은
유연하고 단순한 프로그래밍 모델을 제공하지만, EJB 개발에 다음과 같은 몇 가지 제안 규칙이 있습니다.
- 각 엔티티는 POJO여야 하고, 클래스는 구체적(따라서, abstract 및
final이 아니어야 함)이어야 합니다.
- 클래스는 인수가 없는 생성자를 가져야 하며, 없는 경우,
컴파일러가 기본 생성자를 추가합니다.
- POJO는 최소한 하나의 POJI(Plain Old Java interface)를 구현해야 합니다. 인터페이스를 포함할 필요는 없으며 로컬 및 원격 클라이언트에 대해 서로 다른
인터페이스를 포함할 수 있습니다.
- 비즈니스 인터페이스가 @Remote 어노테이션을 포함하는 경우, 인터페이스에 선언된
모든 매개변수는 java.io.Serializable을 구현해야 합니다.
- 세션 EJB는 POJO의 서브클래스일 수 있지만, 다른 세션 EJB의 서브클래스일 수는
없습니다.
다음 중 한 가지 방법으로 엔터프라이즈 Bean을 작성할 수 있습니다.
- 마법사를 사용하여 새 엔터프라이즈 Bean을 작성합니다.
- Java EE 어노테이션을 사용하여 새 엔터프라이즈
Bean을 작성합니다.
- EJB JAR 파일에서 엔터프라이즈 Bean을 가져옵니다.