|
2006년 11월 18일의 테크팁 모델 파사드 사용하기에서는 Java Persistence API를 사용하여 Java EE 5 애플리케이션의 도메인 모델에서 지속성을 유지할 때 복잡성을 야기할 수 있는 몇 가지 요소에 대해 논의했다. 해당 팁에서는 모델 파사드(또는 간단히 "파사드")가 어떻게 해당 복잡성을 줄일 수 있는지에 대해 설명했다. 또한 웹 계층 구성요소로 구현된 파사드와 상호 작용하는 서블릿을 예제로 제공했다. 이 팁에서는 파사드가 EJB(Enterprise JavaBeans) 기술의 세션 빈으로 어떻게 구현될 수 있는지 살펴보자. 세션 빈을 모델 파사드로 사용하는 이유는 무엇인가? 웹 전용 아키텍처를 원하고 EJB 컨테이너를 사용하지 않으려는 경우 파사드를 웹 구성요소로 구현하는 것은 좋은 접근 방법이다. 하지만 EJB 컨테이너를 사용하면 명확한 몇 가지 이점이 있다. 예를 들어, EJB 컨테이너는 컨테이너 관리 트랜잭션에 대한 지원과 같은 서비스를 제공한다. 파사드를 세션 빈으로 구현하면 이러한 지원을 활용할 수 있다. 이 경우 EJB 컨테이너가 트랜잭션을 관리하므로 트랜잭션을 관리하는 코드를 따로 삽입할 필요가 없다. 예제 파사드 다음은 예제의 파사드에 대한 비즈니스 인터페이스가 어떠한지 보여 준다. 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 패키지별 클래스를 가져올 필요가 없다. 이러한 단순성이 파사드를 사용하는 주요 이점이다. 모델 계층 개체에 액세스해야 하는 모든 클라이언트 웹 구성요소는 파사드를 통과한다. 파사드는 지속성 개체 관리에 관련될 수 있는 Java Persistence API 또는 Java Transaction API에 대한 세부 정보를 캡슐화한다. 이제 파사드를 살펴보자. @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; } }파사드에는 유의해야 할 요소가 몇 가지 있다.
파사드 사용하기 이제 파사드 예제를 사용하는 서블릿을 살펴보자. 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); ... } ... }서블릿은 파사드를 사용하면 서블릿이 엔터티의 세부사항 및 엔터티 액세스에 필요한 지속성 작업으로부터 보호된다. Java Server Faces 기술로 세션 빈 파사드 사용하기 이 팁과 함께 제공된 샘플 코드에서 서블릿은 파사드를 통해 모델 계층에서 Java Persistence 개체에 액세스한다. 하지만 JavaServer Faces(또는 JSF) 기술 구성요소를 웹 구성요소로 사용할 수도 있다. 이 접근 방법에서는 각 JSF 페이지가 일반적으로 JSF 관리 빈(또는 Backing Bean)에 액세스한다. 그리고 관리 빈은 세션 빈의 인터페이스를 사용하여 세션 빈 파사드에 액세스한다. 이것은 JSF 및 EJB 3.0을 사용하는 Java EE 5 애플리케이션에 대한 예상 프로그래밍 모델이다. 다음 다이어그램은 이 접근 방법을 보여 준다.
샘플 코드 실행하기 이 팁과 함께 제공된 샘플 패키지에는 세션 빈으로 구현된 모델 파사드가 포함된다. 샘플을 설치하고 실행하려면 다음 단계를 수행한다.
표시된 페이지에 있는 링크를 클릭하여 카탈로그에서 항목을 검색하거나 추가한다. 애플리케이션에 대한 소스를 살펴보면 EJB 세션 빈이 카탈로그에서 지속적 엔터티에 대한 작업의 모델 파사드로 사용된다는 것을 알 수 있다. 애플리케이션에 대한 작업이 끝나면 다음 명령을 입력하여 이를 제거할 수 있다. ant clean - 애플리케이션 작업 공간을 정리한다. ant undeploy - application server에서 애플리케이션을 배포 해제한다. ant unsetup - application server에서 데이터베이스 자원을 정리한다.요약 Java Persistence API를 사용하는 Java EE 5 웹 애플리케이션을 빌드할 경우, 모델 파사드를 도입하여 코드의 리팩터링을 고려하십시오. 파사드 및 Java Persistence API에 대한 자세한 내용은 다음을 참조하십시오.
Sean Brydon은 Sun Microsystems에서 Java BluePrints 프로그램에 대한 기술 팀장을 맡고 있는 엔지니어입니다. 그는 Java BluePrints의 시초부터 관련 업무를 맡아 왔습니다. 그는 Addison-Wesley Java 시리즈 도서인 "Designing Enterprise Applications with the Java 2 Platform, Enterprise Edition" 및 "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" 카테고리의 다른 글
- Attach API (댓글 18개 / 트랙백 1개) 2007/09/03
- JSP 2.0 EXPRESSION LANGUAGE (댓글 1개 / 트랙백 0개) 2004/02/05
- 환경 엔트리를 이용해서 배포의 사용자 정의하기 (댓글 2개 / 트랙백 0개) 2003/12/24
- JAX-WS를 이용한 웹 서비스 개발 (댓글 1개 / 트랙백 0개) 2006/01/18
- EJB 2.1로 메시지 구동 빈 이용하기 (댓글 1개 / 트랙백 0개) 2005/05/18
- EclipseLink를 사용하여 JPA에서 반복 불가능한 읽기 방지 (댓글 0개 / 트랙백 1개) 2008/07/09
- 컴포넌트 시스템과 클래스 로더 경계 (댓글 1개 / 트랙백 0개) 2004/10/05
- JAX-WS Dispatch 및 Provider API를 이용한 문서 처리 (댓글 4개 / 트랙백 0개) 2006/09/15
- POJO를 Persistent Entity로 변환하기 (댓글 1개 / 트랙백 0개) 2005/12/27
- SAAJ 소개 (댓글 1개 / 트랙백 0개) 2005/06/08
댓글을 달아 주세요
자바는 알면 알수록 재미가 있어지네요. 좋은 자료 잘 활용하겠습니다.
2007/09/13 22:41좋은 글 감사합니다
2007/09/17 21:57좋은 정보 감사해요~
2007/09/19 03:47좋은 정보 많이 배우고 가요 ^^
2007/09/19 23:06