EJB 3.0과 EJB 2.1 간의 차이점

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의 예제는 기능면에서 같습니다.

표 1. EJB 2.1 및 EJB 3.0의 비교
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>
 
Java EE 5의 다음 네 개 패싯이 EJB 2.1부터 EJB 3.0의 변경사항에까지 가장 많이 도움이 됩니다.