BigAdmin System Administration Portal
EJB 3.0 호환성 및 마이그레이션, EJB Session Bean을 Model Facade로 사용하기
Print-friendly VersionPrint-friendly Version
이번 호의 내용

2007년 2월 24일 Enterprise Java Technologies Tech Tips입니다. 여기서는 Java Platform Enterprise Edition(Java EE) 등에 있는 Enterprise Java 기술 및 API 사용에 대한 팁을 얻을 수 있습니다.

이번 호에서는 다음 사항을 다룹니다.

이 팁은 Java EE 5 SDK를 사용하여 개발되었습니다. Java EE 다운로드 페이지에서 SDK를 다운로드할 수 있습니다.

EJB 3.0과 EJB 2.x의 상호 운용성 팁에 관련된 예제 아카이브를 다운로드할 수 있습니다.

EJB Session Bean을 Model Facade로 사용하기 팁에 대한 예제 아카이브를 다운로드할 수 있습니다.

이 코드 및/또는 아래의 정보에 대한 모든 사용은 사용권 조항의 적용을 받습니다.

 
EJB 3.0 호환성 및 마이그레이션
저자 Ken Saks  

EJB(Enterprise JavaBeans) 3.0 사양에서는 Session Bean 구현 및 액세스에 필요한 새롭고 간편해진 API를 소개합니다. 수많은 개발자들은 이 새로운 API에 작성된 응용 프로그램이 레거시 EJB 응용 프로그램과 상호 작용할 수 있도록 하는 방법이나 레거시 응용 프로그램이 새로운 API와 상호 작용할 수 있도록 하는 방법에 대해 알고 싶어합니다.

새 기능을 활용하기 위해 기존의 모든 EJB 응용 프로그램을 완전히 다시 작성하도록 개발자에게 요구하는 것은 비실용적일 것입니다. 일부 경우 개발자가 응용 프로그램 업그레이드 계획은 있지만 단계적 방법을 통해 업그레이드하기를 원할 수도 있습니다. 다른 경우 개발자가 새 EJB 3.0 응용 프로그램 작성을 선호하지만 기존 응용 프로그램 서비스를 계속해서 활용하기를 원할 수도 있습니다. EJB 3.0 사양을 통해 이러한 두 가지 전략이 모두 가능할 수 있습니다. 이 팁에서는 그 방법에 대해 설명합니다.

예제 응용 프로그램 패키지는 팁과 함께 제공됩니다. 팁에 있는 코드 예제는 패키지에 포함된 예제의 소스 코드에서 가져온 것입니다. 예제는 Java EE 5 SDK를 사용합니다. Java EE 다운로드 페이지에서 Java EE 5 SDK를 다운로드할 수 있습니다.

EJB 3.0에서 EJB 2.x로의 호환성

먼저, 레거시 EJB 응용 프로그램을 호출하는 단순화된 EJB 3.0 API에 작성된 응용 프로그램의 예제를 살펴보도록 하겠습니다. 이 팁과 함께 제공되는 예제의 소스 코드에서 MigrationBean이라는 이름의 EJB 3.0 Stateless Session Bean을 찾을 수 있습니다. Bean은 EJB2xBean이라는 이름의 원격 EJB 2.x Stateless Session Bean을 호출합니다. MigrationBean은 완전히 새로운 Bean이거나 EJB 3.0 API를 사용하도록 다시 코드화된 기존 Bean일 수 있습니다. 이 예제에서는 단순성을 위해 두 Bean이 동일한 아카이브에 구성되어 있지만 이것이 필수 사항은 아닙니다. EJB2xBean에 대한 EJB 2.x 홈 및 원격 인터페이스는 다음과 같습니다.


   public interface EJB2xHome extends EJBHome {

       public EJB2xRemote create()
           throws CreateException, RemoteException;
   }

   public interface EJB2xRemote extends EJBObject {

       public void foo() throws RemoteException;

   }
   
MigrationBean 클래스의 첫 번째 부분은 다음과 같습니다.

   @Stateless
   public class MigrationBean implements MigrationRemote {

       // Inject a reference to the Home interface 
       // of the EJB 2.x bean.
       @EJB private EJB2xHome ejb2xHome;

       private EJB2xRemote ejb2x;   

MigrationBeanEJB2xHome에 대한 참조를 삽입하기 위해 @EJB 주석을 사용합니다. @EJB 주석은 EJB 3.0 사양의 일부로 도입되었습니다. 그러나 EJB 3.0 비즈니스 인터페이스 보기와 더불어 이전 스타일의 EJB 2.x 홈 보기와 함께 사용할 수 있도록 설계되었습니다. EJB 컨테이너가 MigrationBean을 인스턴트화할 때마다 EJB2xHome에 대한 참조가 ejb2xHome 데이터 구성원에 삽입됩니다.

@EJB 주석을 2.x 홈 인터페이스와 함께 사용하면 PortableRemoteObject.narrow()를 사용하지 않아도 되는 중요한 이점이 있습니다. PortableRemoteObject.narrow() 메소드는 홈 인터페이스 조회 시 올바른 유형의 Object가 반환되도록 유형 변환하는 데 사용됩니다. EJB 3.0에서 삽입된 홈 참조는 특별한 유형 변환 없이 사용할 수 있습니다.

MigrationBean 클래스는 EJB2xRemote 참조를 만드는 데 홈 참조를 사용하는 @PostConstruct 메소드를 정의합니다. 그런 다음 클래스는 결과를 다른 데이터 구성원에 저장합니다.

    @PostConstruct
    private void initialization() {
        try {
            ejb2x = ejb2xHome.create();
        } catch(Exception e) {
            throw new EJBException(e);
        }
    }
    
클래스의 마지막 부분에서 MigrationBean이 EJB2x 비즈니스 메소드를 자체 비즈니스 메소드 안에서 호출합니다.

    public void bar() {

      try {
          // Call operation on legacy EJB.
          ejb2x.foo();
      } catch(Exception e) {
          throw new EJBException(e);

      }
    }    

보안 및 트랜잭션 전달과 같은 모든 표준 EJB 서비스는 두 Bean 사이에서 예상대로 작동합니다.

@EJB 주석을 EJB 2.x Bean에 액세스하는 데 사용할 때 EJB 구성 요소에만 제한되지 않습니다. 동일한 접근방식을 Java EE 5 응용 프로그램의 서블릿 또는 응용 프로그램 클라이언트 등 다른 유형의 구성 요소로부터 레거시 Bean에 액세스하는 데 사용할 수 있습니다. 또한 이 예제에서는 원격 EJB 2.x Bean을 사용했지만 사용자는 로컬 EJB 2.x Bean에 액세스하는 접근방식도 사용할 수 있습니다.

EJB 2.x에서 EJB 3.0으로의 호환성

첫 번째 예제에서 새로운 EJB 3.0 API를 사용하여 작성된 EJB 구성 요소가 레거시 EJB 구성 요소의 클라이언트가 될 수 있는 방법을 살펴보았습니다. 이번에는 반대 경우를 살펴보도록 하겠습니다. 여기서는 EJB 2.x 클라이언트 API를 사용하여 코드화된 레거시 구성 요소가 단순화된 EJB 3.0 API를 사용하여 구현된 Session Bean에 액세스하는 방법을 확인할 수 있습니다. 이 아이디어는 기존 EJB 클라이언트 코드를 변경하지 않고 새로운 EJB를 사용하기 위한 것입니다.

두 번째 예제에서 단순화된 EJB 3.0 API를 사용하여 AdaptedBean이라는 이름의 Statefull Session Bean이 구현됩니다. Bean은 2.x 원격 홈 인터페이스를 독립 실행형 Java 클라이언트에 표시합니다. AdaptedBean에 대한 홈 및 원격 인터페이스는 다음과 같습니다.

   public interface AdaptedHome extends EJBHome {

       public AdaptedRemote create(String id)
           throws CreateException, RemoteException;
   }

   public interface AdaptedRemote extends EJBObject {

       public String getId() throws RemoteException;
   }
   
AdaptedBean 클래스는 다음과 같습니다.

   @Stateful
   @RemoteHome(AdaptedHome.class)
   public class AdaptedBean {

       private String myId = "unknown";

       @Init
       public void create(String id) {
           myId = id;
       }

       public String getId() {
           return myId;
       }

   }   

Bean 클래스는 POJO와 유사한 EJB 3.0의 단순화를 통해 구현됩니다. 그러나 EJB 2.x 스타일의 원격 홈 인터페이스를 표시하는 데는 @RemoteHome 주석을 사용합니다. 이 주석은 Bean에 이름이 AdaptedHome인 홈 인터페이스와 AdaptedRemote인 원격 인터페이스가 있음을 EJB 컨테이너에게 알립니다. AdaptedRemote 인터페이스를 지정하는 별도 주석은 필요하지 않습니다. 컨테이너가 AdaptedHomecreate() 메소드 서명으로부터 주석을 파생할 수 있기 때문입니다. Bean이 로컬 홈 인터페이스를 표시한 경우 @LocalHome 주석을 대신 사용할 수 있습니다.

클래스에 있는 또 다른 중요 주석은 @Init입니다. EJB 2.x 보기는 항상 create 메소드를 정의하므로 Bean 클래스에 메소드를 정의하여 만들기 작업을 처리하도록 해야 합니다. @Init 주석은 EJB 컨테이너에게 어떤 메소드인지 알립니다. 메소드의 이름에는 제한이 없지만 메소드 매개변수는 해당 홈 인터페이스 내의 create 메소드와 일치해야 합니다.

AdaptedBean 액세스에 대한 독립 실행형 클라이언트 코드는 다음과 같습니다.

   try {

        InitialContext ic = new InitialContext();
        Object o = ic.lookup(AdaptedHome.class.getName());

        AdaptedHome adaptedHome = (AdaptedHome)
            PortableRemoteObject.narrow(o, AdaptedHome.class);

        AdaptedRemote adapted = adaptedHome.create("duke");

        System.out.println("Adapted id = " + adapted.getId());

   } catch(Exception e) { ... }
   

클라이언트 코드는 표준 EJB 2.x 클라이언트 프로그래밍 모델을 사용합니다. 대상 Bean이 EJB 3.0으로 구현된다는 점을 알 필요는 없습니다.

예제 코드 실행

예제 패키지는 이 팁과 함께 제공됩니다. 예제를 설치하고 실행하려면 다음을 수행합니다.

  1. Java EE 5 SDK가 없는 경우 Java EE 다운로드 페이지에서 다운로드합니다. 또한 Java Platform Standard Edition(Java SE) 5 SDK 버전이 설치되어 있어야 합니다.

  2. 팁과 관련된 예제 패키지를 다운로드한 다음 컨텐트를 추출합니다. 이제 압축이 풀린 디렉토리가 <sample_install_dir>/ttfeb2007ejbmigration과 같이 나타납니다. 여기서 <sample_install_dir>은 예제 패키지를 설치한 디렉토리입니다. 예를 들어 Windows가 설치된 컴퓨터의 C:\ 드라이브에 컨텐트의 압축을 푼 경우 새로 만들어진 디렉토리는 C:\ttfeb2007ejbmigration입니다. 이 디렉토리 아래에는 두 개의 하위 폴더 Migration 폴더와 Adapted 폴더가 있어야 합니다.

  3. EJB 3.0에서 EJB 2.x로의 호환성 예제를 작성하고 실행하려면 Migration 디렉토리로 변경합니다. EJB 2.x에서 EJB 3.0으로의 호환성 예제를 작성하고 실행하려면 Adapted 디렉토리로 변경합니다. 그런 다음 선택한 디렉토리 내의 build.xml 파일에 있는 javaee.home 위치 속성을 Java EE 5 응용 프로그램 서버를 설치한 디렉토리로 설정합니다.

  4. 다음 명령을 입력하여 응용 프로그램 서버를 시작합니다.

       <appserv_install>/bin/asadmin start-domain domain1
          
    여기서 <appsrv_install>은 Java EE 5 응용 프로그램 서버를 설치한 위치입니다.

  5. 다음 명령을 입력합니다.

        ant all

    이 명령은 예제 응용 프로그램을 작성한 다음 배포하고 실행합니다.

    EJB 3.0에서 EJB 2.x로의 호환성 예제의 출력에서 다음을 볼 수 있어야 합니다.

            runappclient:
              [exec] Successfully called EJB 3.0 bean

    EJB 2.x에서 EJB 3.0으로의 호환성 예제의 출력에서 다음을 볼 수 있어야 합니다.

            runjavaclient:
              [java] Adapted id = duke

    그런 다음 응용 프로그램이 자동으로 배포 해제되고 빌드 자원이 지워집니다.

요약

EJB 3.0 사양에서는 Session Bean API가 매우 단순화됩니다. 그러나 이러한 단순화는 이 사양의 이전 버전을 사용하여 작성된 EJB 응용 프로그램에 대한 많은 투자를 조건으로 이루어집니다. 이러한 이유로 EJB 3.0의 목표는 새 응용 프로그램과 기존 응용 프로그램 간의 원활한 상호 운용성을 보장하는 것입니다. EJB 3.0을 사용하는 개발자라면 레거시 응용 프로그램을 새로운 API로 마이그레이션할 것인지, 아니면 새로운 구성 요소로부터 해당 레거시 응용 프로그램을 이용할 것인지에 대해 유연하게 판단할 수 있습니다.

저자 정보

Ken Saks는 Java EE 5 SDK의 EJB 3.0 컨테이너를 설계한 수석 설계자입니다. 1999년부터 Sun Microsystems의 Enterprise Java 그룹의 멤버로 활동하고 있습니다.

EJB Session Bean을 Model Facade로 사용하기
저자 Sean Brydon, Yutaka Yoshida  

2006년 11월 18일 테크 팁인 Model Facade 사용하기에서는 Java Persistence API를 사용하여 Java EE 5 응용 프로그램의 도메인 모델의 지속성을 관리할 때 복잡성을 유발할 수 있는 요소에 대해 논의했습니다. 또한 Model Facade(또는 줄여서 "Facade")를 통해 복잡성을 줄일 수 있는 방법에 대해서도 알아보았습니다.

이전 팁에서는 웹 계층 구성 요소로 구현되는 Facade와 상호 작용하는 서블릿이 예제로 사용되었습니다. 이번 팁에서는 Facade가 EJB(Enterprise JavaBeans) 기술 Session Bean으로 구현되는 방법을 살펴볼 수 있습니다.

Session Bean을 Model Facade로 사용하는 이유

웹 전용 아키텍처가 필요하고 EJB 컨테이너를 사용하지 않으려는 경우, Facade를 웹 구성 요소로 구현하는 것은 좋은 접근방식이 됩니다. 그러나 EJB 컨테이너를 사용하면 그와 다른 별개의 이점을 얻을 수 있습니다. 예를 들어 EJB 컨테이너는 컨테이너 관리 트랙잭션 지원과 같은 서비스를 제공합니다. Facade를 Session Bean으로 구현할 경우 이러한 지원을 활용할 수 있습니다. 그럴 경우 EJB 컨테이너가 트랜잭션을 관리하므로 사용자가 트랜잭션 관리를 위해 코드를 포함할 필요가 없습니다.

예제 Facade

이 예제에서는 Session Bean으로 구현되는 Facade가 서블릿과 상호 작용합니다. EJB 3.0 기술에 익숙할 경우, Session Bean에 Bean의 클라이언트 보기를 제공하는 비즈니스 인터페이스가 필요하다는 점을 알고 있을 것입니다. 서블릿은 이 비즈니스 인터페이스를 사용하여 Facade에 액세스합니다.

예제의 Facade에 대한 비즈니스 인터페이스는 다음과 같습니다.

   import java.util.List;

   import com.sun.javaee.blueprints.sessionfacade.InvalidItemException;
   import com.sun.javaee.blueprints.sessionfacade.model.Item;

   public interface CatalogFacade {
       public void addItem(Item item)throws InvalidItemException;
       public Item getItem(int itemID);
       public List<Item> getAllItems();
   }

팁과 함께 제공되는 예제 응용 프로그램 패키지에 있는 이 팁에서, 다른 코드 예제와 함께 비즈니스 인터페이스용 소스 코드를 찾을 수 있습니다.

이 인터페이스는 매우 단순합니다. 그러나 이러한 단순성에도 불구하고 클라이언트 서블릿이 이 웹 응용 프로그램 모델 계층에 액세스하는 데 필요한 모든 정보가 이 인터페이스에 포함되어 있습니다. 또한 모든 EJB 3.0 비즈니스 인터페이스와 마찬가지로, EJB 패키지에 대한 클래스를 가져올 필요가 없습니다. 이러한 단순함이 Facade를 사용할 때 얻을 수 있는 가장 큰 이점입니다. 모델 계층 객체에 액세스해야 하는 모든 클라이언트 웹 구성 요소는 Facade를 통과해야 합니다. Facade는 Persistence 객체 관리에 연관될 수 있는 모든 Java Persistence API 및 Java Transaction API 관련 세부 정보를 캡슐화합니다.

이제 Facade를 살펴보도록 하겠습니다.

   @Stateless
   public class CatalogFacadeBean implements CatalogFacade {  
   
     @PersistenceContext(unitName="CatalogPu")
     private EntityManager em;
   
     public void addItem(Item item) throws 
             InvalidItemException {
       if(item.getName().length() == 0)
         throw new InvalidItemException("The item" +
           " name cannot be empty." +
           " Please specify a name for the item. ");
       em.persist(item);
     }
   
     public Item getItem(int itemID) {
       Item item =  em.find(Item.class,itemID);
       return item;
     }
   
     public List<Item> getAllItems() {
       List<Item> items = em.createQuery(
               "SELECT OBJECT(i) FROM Item i").getResultList();  
       return items;
     }
   }

Facade에는 주의해야 할 사항이 몇 가지 있습니다.

  • Facade에는 상태가 없습니다. @Stateless 주석은 CatalogFacadeBean을 Stateless Session Bean으로 표시합니다. 클라이언트 웹 요청 사이의 세션 상태를 유지해야 할 경우 Facade에 대한 Stateful Session Bean을 사용하거나 웹 계층의 HttpSession과 같은 기타 위치에 상태를 저장합니다. Java EE 5 응용 프로그램에서 Facade를 구현할 때는 Stateless Session Bean이 보다 일반적으로 사용됩니다.

  • Facade는 로컬입니다. Stateless Session Bean은 로컬 또는 원격 객체가 될 수 있습니다. 이 예제에서는 원격 액세스 또는 RMI-IIOP 액세스가 필요하지 않으므로 Session Bean은 로컬입니다. Stateless Session Bean은 기본적으로 로컬이므로 로컬이라는 주석을 지정할 필요가 없습니다.

  • Facade는 컨테이너 관리 트랜잭션을 사용합니다. CatalogFacadeBean에는 트랜잭션을 구분하는 코드가 없습니다. Session Bean은 EJB 컨테이너의 컨테이너 관리 트랜잭션 서비스를 사용합니다. Session Bean이 컨테이너 관리 트랜잭션 서비스 대신 응용 프로그램 관리 트랜잭션을 사용할 경우 Java Transaction API 호출을 포함하여 각 트랜잭션의 경계를 표시해야 합니다.

  • Facade는 기본 트랜잭션 동작에 의존합니다. 기본적으로 Facade의 각 메소드는 컨테이너가 관리하는 트랜잭션에서 실행됩니다. 또한 @TransactionAttribute 주석을 "REQUIRED" 값으로 지정하여 이 동작을 얻거나 배포 설명자에 동작을 지정할 수도 있습니다.

  • Facade는 컨테이너 관리 엔티티 관리자를 활용합니다. 여기서 EJB 컨테이너는 엔티티 관리자의 라이프사이클을 관리합니다. @PersistenceContext 주석은 EntityManager 객체를 Session Bean에 삽입하도록 EJB 컨테이너에게 알립니다. Bean이 응용 프로그램 관리 엔티티 관리자를 사용할 경우 엔티티 관리자를 만들고 삭제하는 코드를 포함해야 합니다.

  • Facade는 Java Persistence 객체를 반환합니다. Facade는 데이터 전송 객체나 Java Persistence 객체의 복사본인 값 객체는 반환하지 않습니다. Java Persistence API의 기능 중 하나는 Java Persistence 객체가 컨테이너에 의해 관리될 수 있으며, POJO(Plain Old Java Object)로 사용될 수 있다는 점입니다. 실제로 이러한 객체는 Facade의 클라이언트에 의해 POJO로 사용됩니다. 웹 구성 요소 클라이언트가 도메인 모델로부터 좀 더 느슨하게 연결되어야 하는 경우도 있습니다. 그런 경우 POJO가 아닌, 모델 계층을 나타내는 다른 객체를 사용할 수 있습니다. 그러나 이 예제에서 Item POJO는 웹 계층에서 사용하기에 충분합니다. 따라서 프로그래밍 모델이 상대적으로 단순해집니다.

  • Facade는 응용 프로그램 예외를 발생시킵니다. 사용자가 항목 이름을 지정하지 않은 경우, Session Bean은 적절한 교정 조치 메시지와 함께 InvalidItemException을 발생시킵니다. InvalidItemException은 시스템 예외와는 다른 응용 프로그램 예외의 예입니다. EJB에서 응용 프로그램 예외는 응용 프로그램 개발자에 의해 정의되며 응용 프로그램 비즈니스 논리의 일부로 간주됩니다.

  • Facade는 제네릭을 사용합니다. 메소드 선언 public List<Item>getAllItems는 제네릭을 사용하여 ListItem 유형의 모음으로 지정합니다. 제네릭은 모음의 유형을 사용자에게 전달하여 Java 컴파일러가 이를 확인할 수 있도록 합니다. 또한 제네릭을 사용하면 메소드 선언의 읽기와 이해가 훨씬 쉬워 집니다.

Facade 사용하기

이제 예제 Facade를 사용하는 서블릿을 살펴보도록 하겠습니다.

   public class CatalogServlet extends HttpServlet {
     
     @EJB private CatalogFacade cf;  
     
     ...      
   
     public void doGet(HttpServletRequest request, 
         HttpServletResponse response) throws 
         ServletException, IOException {
       ...       
       
       if ("additem.do".equals(selectedURL))  {
             //get values from request and place 
             // them into new Item
             String desc = request.getParameter("item_desc");
             String name = request.getParameter("item_name");
             ...
             Item item = new Item();
             item.setName(name);
             item.setDescription(desc);
             ...
             //use facade to add new Item to database
             cf.addItem(item);
         ...         
       }
       ...
   }

서블릿은 @EJB 주석을 통해 종속성 삽입을 사용하여 Facade를 조회하고 가져옵니다. 또한 Facade는 다른 클라이언트 요청에 의해 공유 및 사용될 수 있도록 cf 필드로 저장됩니다.

Facade를 사용하면 서블릿이 엔티티의 세부 사항 및 엔티티 액세스에 필요한 지속성 작업으로부터 보호됩니다.

Java Server Faces 기술로 Session Bean Facade 사용하기

이 팁과 함께 제공된 예제 코드에서는 서블릿은 Facade를 통해 모델 계층에서 Java Persistence 객체에 액세스합니다. 그러나 JavaServer Faces 기술(또는 JSF) 구성 요소를 웹 구성 요소로 사용할 수도 있습니다. 이 접근방식에서는 각 JSF 페이지가 일반적으로 JSF 관리 Bean(또는 Backing Bean)에 액세스합니다. 그런 다음 관리 Bean은 Session Bean의 인터페이스를 사용하여 Session Bean Facade에 액세스합니다. 이는 JSF 및 EJB 3.0을 사용하는 Java EE 5 응용 프로그램에 대한 예상 프로그래밍 모델입니다.

다음 그림은 이 접근방식에 대해 보여 줍니다.

JSFwithFacade3

예제 코드 실행

이 팁과 함께 제공되는 예제 패키지에는 Session Bean으로 구현된 Model Facade가 포함됩니다. 예제를 설치하고 실행하려면 다음을 수행합니다.

  1. Java EE 5 SDK가 없는 경우 Java EE 다운로드 페이지에서 다운로드합니다. 또한 Java Platform Standard Edition(Java SE) 5 SDK 버전이 설치되어 있어야 합니다.

  2. 팁에 대한 예제 패키지를 다운로드한 다음 해당 컨텐트의 압축을 풉니다. 이제 압축이 풀린 디렉토리가 <sample_install_dir>/ttfeb2007beanfacade와 같이 나타납니다. 여기서 <sample_install_dir>은 예제 패키지를 설치한 디렉토리입니다. 예를 들어 WIndows가 설치된 컴퓨터의 C:\ 폴더에 컨텐트를 추출한 경우 새로 만들어진 디렉토리는 C:\ttfeb2007beanfacade입니다. ttfeb2007beanfacade 아래의 TechTipEJBSessionfacade 디렉토리에는 예제용 소스 파일 및 기타 지원 파일이 들어있습니다.

  3. TechTip-EJBsessionfacade 디렉토리 아래의 bp-project 디렉토리에 있는 build.properties 파일을 편집하고 등록 정보를 환경에 맞게 설정합니다. 예를 들어 사용자의 Java EE 5 설치 디렉토리를 가리키도록 javaee.home을 설정합니다.

  4. 다음 명령을 입력하여 더비 데이터베이스를 시작합니다.

       <appsrv_install>/bin/asadmin start-database

    여기서 <appsrv_install>은 Java EE 5 응용 프로그램 서버를 설치한 위치입니다.

  5. 다음 명령을 입력하여 응용 프로그램 서버를 시작합니다.

       <appsrv_install>/bin/asadmin start-domain domain1

  6. TechTip-EJBsessionfacade 디렉토리를 변경하고 다음 명령을 입력합니다.

       ant setup

    그러면 데이터베이스 자원이 설정됩니다.

  7. 다음 명령을 입력합니다.

       ant run

    이 명령은 예제 응용 프로그램을 작성한 다음 이를 http://localhost:8080/bp-sessionfacade에서 배포 및 시작합니다.

    이 응용 프로그램은Java BluePrints Solutions Catalog에서 가져온 Java Persistence 예제 응용 프로그램입니다.

EJBFacadePage

표시된 페이지에 있는 링크를 클릭하여 카탈로그에서 항목을 찾거나 추가합니다. 응용 프로그램 소스를 살펴보면 EJB Session Bean이 카탈로그에서 지속성 엔티티에 대한 작업의 Model Facade로 사용된다는 것을 확인할 수 있습니다.

응용 프로그램에 대한 작업을 완료했으면 다음 명령을 입력하여 이를 제거할 수 있습니다.

   ant clean - 응용 프로그램 작업 공간을 정리합니다.
   ant undeploy - 응용 프로그램 서버에서 응용 프로그램을 배포 해제합니다.
   ant unsetup - 응용 프로그램 서버에서 데이터베이스 자원을 정리합니다.

요약

Java Persistence API를 사용하는 Java EE 5 웹 응용 프로그램을 작성하는 경우, Model Facade를 도입하여 코드의 리팩터링을 고려하십시오.

Facade 및 Java Persistence API에 대한 추가 정보는 다음을 참조하십시오.

저자 정보

Sean Brydon은 Sun Microsystems에서 Java BluePrints 프로그램에 대한 기술 팀장을 맡고 있는 엔지니어입니다. Java BluePrints의 개발 초기부터 관련 업무를 맡아 왔습니다. 그는 Addison-Wesley Java 시리즈 도서인 "Java 2 Platform Enterprise Edition으로 엔터프라이즈 응용 프로그램 설계하기(Designing Enterprise Applications with the Java 2 Platform, Enterprise Edition)" 및 "J2EE 1.4 플랫폼으로 웹 서비스 설계하기(Designing Web Services with the J2EE 1.4 Platform)"의 저자이며 엔터프라이즈 응용 프로그램 설계에 대해 정기적으로 발표하고 있습니다. 또한 Sean은 Java Pet Store 2.0 참조 응용 프로그램 및 Java BluePrints Solutions Catalog의 설계 및 개발에 관여해 왔습니다.

Yutaka Yoshida는 Servlet 2.4 사양을 전담했으며 현재 Java BluePrints 프로젝트에 참여하고 있습니다. 그는 Java Adventure Builder 참조 응용 프로그램, Java BluePrints Solutions Catalog 및 Java Pet Store 2.0 참조 응용 프로그램의 설계 및 개발에 관여해 왔습니다.

개발자 지원

Java EE 프로그래밍 관련 조언이 필요하십니까? 개발자 전문가 지원을 참조하십시오.

 

Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin