EJB 2.1과 비교하여 EJB 3.0은 엔터프라이즈 자바 Bean 애플리케이션을 쉽게 작성할 수 있습니다.
EJB 3.0 스펙의 기본 개념은 Java 어노테이션을 사용하여 배치 디스크립터가 포함시키기 위해 사용한 정보를 캡처하는 일반 이전 Java™ 오브젝트(POJO) 프로그래밍 모델을 중심으로 합니다. 배치 디스크립터는 이제 대부분의 경우 선택사항입니다. 기본값 사용은 대체로 더 적은 지원 코드를 작성 및 유지보수해야 함도 의미합니다. 이는 EJB 3.0 컴포넌트 작성 및 사용의 프로그래밍 경험을 상당히 단순화시킵니다.
EJB 2.1에는 웹 서비스 지원, 세션 Bean 구현 변경, 엔터프라이즈 Bean 호출 방법 변경, ejb-jar.xml 배치 디스크립터를 정의한 DTD를 바꾸기 위한 새 XML 스키마가 추가된 반면 EJB 3.0은 여기서 한 단계 더 개선되었습니다. EJB 3.0에는 Java Persistence API를 통해 간단한 엔티티 Bean 지속성 메커니즘이 도입되었습니다. 이러한 엔티티는 POJO 기반이며 EJB 컨테이너의 외부에서 실행할 수 있고 내부에 인터페이스 또는 EJB 코드가 필요하지 않습니다. 이와 유사하게 세션 Bean에도 더 이상 EJB 특정 컴포넌트 인터페이스가 필요하지 않습니다.
EJB 2.1 클래스과 배치 디스크립터 파일을 동등한 EJB 3.0 클래스와 비교
표 1의 예제는 기능면에서 같습니다.
| EJB 2.1 | EJB 3.0 |
|---|---|
자바 클래스 public class AccountBean
implements javax.ejb.SessionBean {
SessionContext ctx;
DataSource accountDB;
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
public void ejbCreate() {
accountDB = (DataSource)ctx.lookup(
"jdbc/accountDB");
}
public void ejbActivate() { }
public void ejbPassivate() { }
public void ejbRemove() { }
public void setAccountDeposit(int empId,
double deposit) {
...
Connection conn = accountDB.getConnection();
...
}
...
}
|
자바 클래스 @Stateless
public class AccountBean implements Account
{
@Resource private DataSource accountDB;
public void setAccountDeposit(int customerId,
double deposit) {
...
Connection conn = accountDB.getConnection();
...
}
...
}
|
배치 디스크립터 <session>
<ejb-name>AccountBean</ejb-name>
<local-home>AccountHome</local-home>
<local>Account</local>
<ejb-class>com.example.AccountBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<resource-ref>
<res-ref-name>jdbc/accountDB</res-ref-name>
<res-ref-type>javax.sql.DataSource</res-ref-type>
<res-auth>Container</res-auth>
</resource-ref>
</session>
...
<assembly-descriptor>...</assembly-descriptor>
|