통합(Integration) 티어 패턴 - Web Service Broker

2007/05/24 14:03
1. 고려해야 할 사항
  • 일부 비즈니스 로직은 평상시처럼 프리젠테이션 티어에게 서비스를 제공해야 하고 또한 다른 어플리케이션에서도 사용할 수 있도록 웹서비스 형태로도 서비스를 제공해야 함.
  • 일부 웹서비스는 추가적으로 모니터링, 감사, 로깅, 보안 코드가 필요.
  • 웹 서비스는 SOAP과 같은 표준 프로토콜을 이용한 커뮤니케이션이 가능해야 함.

2. 해결방안
  • Web Service Broker 패턴 구조
    사용자 삽입 이미지

  • Web Service Broker 패터 처리 순서
    사용자 삽입 이미지

3. 구현 전략
  • Custom XML Messaging
    개발자가 직접 EndPointProcessor 콤포넌트를 작성.
  • JAX-RPC
    JAX-RPC가 EndPointProcessor 콤포넌트를 제공.
  • Java Binder
    웹 서비스 요청에는 비즈니스 서비스에 전달될 파라메터가 포함되어 있음. JAXB(Java API for XML Binding)는 웹 서비스 요청시 받는 XML 문서를 처리해서 이를 토대로 Transfer Object를 생성하고자 할 때 사용. JAXB를 사용하는 대신 개발자가 직접 바인딩 코드를 작설할 수 있음.

4. 예제 및 코드
사용자 삽입 이미지


ReservationWebService.java (Language : java)
  1. package sl500;
  2.  
  3. import java.rmi.*;
  4.  
  5. public interface ReservationWebService extends Remote {
  6.    public boolean makeReservation(...) throws RemoteException;
  7.    public boolean cancelReservation(...) throws RemoteException;
  8.    public Reservation findReservation(...) throws RemoteException;
  9. }

ReservationWebServiceBean.java (Language : java)
  1. package sl500;
  2.  
  3. import javax.ejb.*;
  4.  
  5. public class ReservationWebServiceBean implements SessionBean {
  6.    public void ejbCreate() {
  7.       // ...
  8.    }
  9.  
  10.    public boolean makeReservation(...) {
  11.       // ...
  12.    }
  13.  
  14.    public boolean cancelReservation(...) {
  15.       // ...
  16.    }
  17.  
  18.    public Reservation findReservation(...) {
  19.       // ...
  20.    }
  21.  
  22.    public void ejbRemove() {}
  23.    public void ejbActivate() {}
  24.    public void ejbPassivate() {}
  25.    public void setSessionContext(SessionContext sc) {}
  26. }


5. 결과
  • 장점
    웹 서비스 관련 코드를 추가할 수 있는 레이어가 제공.
  • 단점
    웹 서비스는 SOAP 기반의 XML 메시지를 주고 받기 때문에 네트워크 오버헤드가 높음.
    프리젠테이션 티어가 보통 Session Facade 콤포넌트인 비즈니스 콤포넌트를 억세스할 때 리모드 인터페이스를 통해 억세스함. 이런 경우, Web Service Broker 콤포넌트는 비즈니스 서비스 콤포넌트와 같은 JVM 환경에서 동작하기 때문에 Web Service Broker 콤포넌트가 사용할 수 있는 로컬 인터페이스의 추가가 필요.

6. 관련 패턴
  • Application Service
  • Session Facade
이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/24 14:03 2007/05/24 14:03
[로그인][오픈아이디란?]

통합(Integration) 티어 패턴 - Domain Store

2007/05/24 13:40
1. 고려해야 할 사항
  • 퍼시스턴스 코드 또는 퍼시스턴스를 위해 필요한 메소드를 호출하는 동작을 비즈니스 오브젝트에 놓지 않도록 해야함.
  • 어떤 어플리케이션은 엔티티 빈을 사용할 수 없음.
  • 어떤 비즈니스 오브젝트 모델은 복잡한 관계를 맺고 있음.

2. 해결방안

  • Domain Store 패턴 구조
    Domain Store는 투명한 방법으로 비즈니스 오브젝트를 지속시켜 줄 퍼시스턴스 클래스 임. 직접 domain store를 구현할 수 있지만, 작업이 많으므로 자주 JDO(Java Data Object) 스펙을 토대로 하고 있는 퍼시스턴스 관련 제품 또는 벤더사 자체적으로 제공하고 있는 오브젝트 관계 매핑 제품을 사용.
    사용자 삽입 이미지
  • Domain Store 시퀀스
    사용자 삽입 이미지
  • Domain Store 쿼리 시퀀스
    사용자 삽입 이미지


3. 구현 전략
  • Custom Persistence
    Domain store 패턴을 직접 다 구현
  • Java Data Objects
    비즈니스 오브젝트, 쿼리, 어플리케이션 서비스를 작성하고, 중요한 퍼시스턴스 코드는 JDO 구현을 통해 제공받음.

4. 예저 및 코드

Payment.java (Language : java)
  1. package sl500;

  2. import java.util.Date;
  3.  
  4. public class Payment {
  5.    private double amount;
  6.    private Date datePaid;
  7.    private PaymentMethod payMehtod;
  8.  
  9.    private Payment() {}
  10.  
  11.    public Payment(double a, Date d, PaymentMethod p) {
  12.       amount = a;
  13.       datePaid = d;
  14.       payMethod = p;
  15.    }
  16.  
  17.    // ...
  18.  
  19. }

PaymentMethod.java (Language : java)
  1. package sl500;

  2. import java.util.Date;
  3.  
  4. public class PaymentMethod {
  5.    private String type;
  6.    private String number;
  7.    private Date expiration;
  8.  
  9.    private PaymentMethod() {}
  10.  
  11.    public PaymentMethod(String t, String n, Date e) {
  12.       type = t;
  13.       number = n;
  14.       expiration = e;
  15.    }
  16.  
  17.    // ...
  18.  
  19. }

JDO Descriptor (Language : xml)
  1. <?xml verstion="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.// DTD java Data Objects Metadata 1.0//EN" "http://java.sun.com/dtd/jdo_1_0.dtd">
  3.  
  4. <jdo>
  5.    <package name="sl500">
  6.       <class name="Panyment">
  7.          <field name="payMethod">
  8.             <collection element-type ="PaymentMethod"/>
  9.          </field>
  10.       </class>
  11.    </package>
  12. </jdo>

PaymentService.java (Language : java)
  1. package sl500;
  2.  
  3. import javax.jdo.*;
  4. import java.io.*;
  5. import java.util.*;
  6.  
  7. public class PaymentService {
  8.    private PersistenceManager pm;
  9.  
  10.    public PaymentService() throws IOExeption {
  11.       InputStream propertyStream = new FileInputStream("jdo.properties");
  12.       Properties jdoProps = new Properties();
  13.       jdoProps.load(propertyStram);
  14.       PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(jdoProps);
  15.       pm = pmf.getPersistenceMangeger();
  16.    }
  17.  
  18.    public void makePayment(double amount, String type, String number, Date expiration) {
  19.       Transaction tx = pm.currentTraction();
  20.       tx.begin();
  21.       PaymentMethod method = new PamymentMethod(type, number, expiration);
  22.       Payment thePayment = new Payment(amount, new Date(), method);
  23.       pm.makePersistence(thePayment);
  24.       tx.commit();
  25.    }
  26.  
  27.    public void queryPayments() {
  28.       Extent e pm.getExtent(Payment.class, true);
  29.       Iterator i = e.iterator();
  30.       while(i.hasNext()) {
  31.          Payment p = (Payment)i.next();
  32.          System.out.println(p.getAount() + "-" + p.getPayMethod().getType());
  33.       }
  34.       e.close();
  35.    }
  36. }


5. 결과
  • 장점
    엔티티 빈을 사용할 경우 증가하는 오버헤드 없이 엔티티 빈의 장점을 취할 수 있음.
    DAO 패턴보다 더 견고하고 투명한 퍼시스턴스 기능 제공.
    비즈니스 오브젝트에서 퍼시스턴스 관련 기능을 분리함으로써, 퍼시스턴스에 대한 부담없이 개발자는 비즈니스 로직과 데이터에만 전념할 수 있음.
  • 단점
    Domain Store 패턴을 직접 다 구현할 경우 작업 양이 너무 많아 다른 옵션들이 만족스럽지 못할 경우에만 직접구현 할 것을 권장.

6. 관련패턴
  • Data Access Object
이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/24 13:40 2007/05/24 13:40
[로그인][오픈아이디란?]

통합(Integration) 티어 패턴 - Data Acess Object

2007/05/24 01:22
1. 고려해야 할 사항
  • 데이터 스토어 벤더들은 자신들의 시스템에 억세스하기 위해서만 사용할 수 있는 API를 추가할 수 있음
  • 테이터 저장 장치 변경시 비즈니스 로직을 다시 작성하지 말아야 함
  • 데이터 억세스 코드를 헬퍼 클래스에 따로 분리해서 정의할 수 있음. 이때 헬퍼 오브젝트는 사용자가 쉽게 찾아서 생설할 수 있어야 함.
  • 퍼시스턴트 코드를 비즈니스 로직과 따로 분리하여 정의했을 때 퍼시스턴트 코드의 재사용성이 높아짐

2. 해결방안
  • DAO 패턴구조
    사용자 삽입 이미지
  • DAO 패턴 시퀀스
    사용자 삽입 이미지


3. 구현전략
  • Transfer Object Collection
    DAO finder 메소드는 레코드 하나당 하나의 Transfer Oject를 생성. 이때 여러 개의 레코드를 클라이언트에게 리턴해야 하는 경우에는 Transfer Object의 컬렉션을 리턴
  • Factory for the Data Access Object
    DAO 오브젝트를 생성하는 부분에서 GoF Factory Method와 Abatract Factory 패턴을 사용할 수 있음. 시스템이 자주 테이터 소스를 변경할 경우, 팩토리는 간단하게 DAO 클래스를 변경할 수 있도록 해줌

4. 예제 및 코드

ReservationDAO.java (Language : java)
  1. import java.sql.*;
  2. import java.util.*;
  3. import javax.sql.*;
  4. import javax.naming.*;
  5.  
  6. public class ReservationDAO {
  7.    private DataSource ds;
  8.  
  9.    public ReservationDAO() throws DAOException {
  10.       try {
  11.          InitialContext ic = new InitialContext();
  12.          ds = (DataSource)ic.lookup("java:comp/env/jdbc/hotel/DS");
  13.       } catch (NamingException e) {
  14.          throw new DAOException("Error obtaining DataSource", e);
  15.       }
  16.    }
  17.  
  18.    public ArrayList findReservationByDate(java.util.Date theDate) throws DAOException {
  19.       ArrayList data = new ArrayList();
  20.       Connection conn = null;
  21.       PreparedStatement stmt = null;
  22.       ResultSet results = null;
  23.  
  24.       try {
  25.          conn = ds.getConnection();
  26.          String query = "SELECT * FROM RESERVATION WHERE DATE = ?"
  27.          stmt = conn.prepareStatement(query);
  28.          stmt.setDate(1, new java.sql.Date(theDate.getTime()));
  29.          results = stmt.executeQuery();
  30.  
  31.          java.util.Date startDate, endDate;
  32.          while(results.next()) {
  33.             startDate = results.getDate("startDate");
  34.             endDate = results.getDate("endDate");
  35.             data.add(new ReservationTO(startDate, endDate);
  36.          }
  37.       } catch (SQLException e) {
  38.          throw new DAOException("Error finding reservation", e);
  39.       } finally {
  40.          try {
  41.             if (results != null) results.close();
  42.             if (stmt != null) stmt.close();
  43.             if (conn != null) conn.close();
  44.          } catch (SQLException) {
  45.             throw new DAOException("Error closing connection", e);
  46.          }
  47.       }
  48.  
  49.       return data;
  50.    }
  51.  
  52.    public int deleteReservation (String reservationID) throws DAOException {
  53.       Connection conn = null;
  54.       PreparedStatement stmt = null;
  55.       int count = 0;
  56.  
  57.       try {
  58.          conn = ds.getConnection();
  59.          String query = "DELETE FROM RESERVATION WHERE RESERVATIONID = ? ";
  60.          stmt = conn.prepareStatement(query);
  61.          stmt.setString(1, reservationID);
  62.          count = stmt.executeUpdate();
  63.       } catch (SQLException e) {
  64.          throw new DAOException("Error delete reservation", e);
  65.       }
  66.       
  67.       return count;
  68.    }
  69. }


5. 결과
  • 장점
    데이터 엑서스 로직과 비즈니스 로직을 나누어 별도로 정의
    앞으로 데이터 소스의 종류가 바뀔 경우, 유연하게 대처
    비즈니스 오브젝트 응집력이 높아짐
    통합 티어 내에서만 데이터 억세스 관련 코드가 정의
  • 단점
    DAO 패턴은 레이어 하나 더 추가하는 효과
    DAO 패턴은 CMP 엔티티 빈에서는 의미가 없음

6. 관련 패턴
  • Transfer Object
  • Abtract Factory
  • Factory Method

이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/24 01:22 2007/05/24 01:22
[로그인][오픈아이디란?]

통합(Integration) 티어 패턴 - Service Activator

2007/05/22 01:50
1. 고려해야 할 사항
  • 일부 EJB 기반의 클라이언트는 비동기 방식의 처리를 필요로 함.
  • 일부 어플리케이션은 publish/subscribe 프레임웍을 필요로 함.
  • 세션빈과 엔티티 빈은 비동기 메시지에 의해 호출될 수 없음. 세션 빈과 엔티티 빈은 동기방식으로 메시지를 주고 받는 작업만 가능.
메세징 시스템 모델
1. Point to Point 모델
사용자 삽입 이미지
PTP 방식을 구현하는 제품은 메시지를 저장하는 큐와 메시지 전송을 담당하는 송신자 그리고 수신하는 수신자로 구성. 각각의 메시지는 송신되는 시점에 지정된 큐로 보내지고 수신자는 해당 쿠에 연경을 생성하고 이 연결을 통해서 원하는 메시지를 가져가 처리하는 방식을 사용.

이런한 PTP 방식은 다음과 같은 특징을 가짐.
  • 각각의 메시지는 단 한명의 수신자만 갖음
  • 수신자 측은 메시지를 성곡적으로 수신한 경우 이에 대한 신호를 보냄

2. Publish and Subscribe 모델

사용자 삽입 이미지
Publish/Subscribe 방식을 구현하는 제품은 메시지를 출판(Publish)하는 출판자(Publisher)와 메시지 객체가 보관되는 계층 구조를 가지고 있는 토픽(Topic) 객체 그리고 이렇게 보관되어 있는 메시지 객체를 토필 객체의 계층 구조로부터 구독(Subscribe)하는 구독자(Subscriber)로 구성되며 실제로 토필 객체의 계층 구조에 메시지를 출판하고 또 구독하는 객체에 대당 메시지를 전달하는 기능은 JMS 프로바이더가 담당.

이러한 Publish/Subscribe 방식은 다음과 같은 특징을 가짐
  • 각각의 메시지는 다수의 수진자를 가질 수 있음.

2. 해결방안
  • Service Activator 패턴구조
    사용자 삽입 이미지
  • Service Activator 패턴 시퀀스
    사용자 삽입 이미지

3. 구현 전략
  • POPJ Service Activator
    POPJ Service Activator는 EJB 1.x 컨테이너 환경이나 EJB 컨네이너를 사용하지 않는 환경에서 주로 사용됨
  • Message-Driven Bean Service Activator
    EJB 2.x 컨테이너에서만 이 Activator로 구현될 수 있음. 일반적으로 POPJ 보다 더 간단하고, 효율적이고, 신뢰성이 높음
  • Command Request
    메시지가 GoF Command 패턴이 적용되어 있는 커맨드 오브젝트를 가지고 있음. 이 커맨드 오브젝트는 Service Activator에 의해 사용됨
  • Database, Email, JMS Message Response
    비동기 통신 방식에서 발생되는 문제점 중에 하나는 '응답 메시지를 클라이언트에게 어떻게 돌려 보낼 것인가'임. 가장 좋은 방법은 응답 메시지를 생성하지 않는 것. 하지만 응답 메시지가 있을 경우 다음과 같은 방법으로 처리할 수 있음.
    첫째, 데이터베이스에 갖다 놓고 클라이언트가 일정간격으로 데이터베이스에 응답메시지가 존재하는지 체크
    둘째, 클라이언트에게 이메일로 발송
    세째, 클라이언트가 수신할 수 있는 JMS message에 갖다 놓음

4. 예제 코드

사용자 삽입 이미지

ResConfirmServiceActivator.java (Language : java)
  1. import javax.jmx.*;
  2.  
  3. public class ResConfirmServiceActivator implements MessageListener {
  4.    private QueueSession qSession;
  5.    private QueueReceiver qReceiver;
  6.    private String connFactoryName;
  7.    private String queueName;
  8.    private JMSServiceLocator serviceLocator;
  9.  
  10.    public ResConfirmServiceActivator (String cfn, String qn) {
  11.       connFactoryName = cfn;
  12.       this.queueName = qn;
  13.       startListener();
  14.    }
  15.  
  16.    private void startListener() {
  17.       try {
  18.          serviceLocator = JMSServiceLocator(connFactoryName);
  19.          QueueConnectionFactory = qConnFactory;
  20.          serviceLocator.getQueueConnectionFactory();
  21.          QueueConnection qConn = qConnFactory.createQueueConnection();
  22.          qSession = qConn.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
  23.          Queue shipBookQueue = serviceLocator.getQueue(queueName);
  24.          qReceiver = qSession.createReceiver(shipBookQueue);
  25.          qReceiver.setMessageListener(this);
  26.       } catch (JMSException e) {
  27.          e.printStackTrace();
  28.       }
  29.    }
  30.  
  31.    public void onMessage(Message msg) {
  32.       try {
  33.          ObjectMessage objMsg = (ObjectMessage)msg;
  34.          String reservationID = (String)objMsg.getObject();
  35.          // ... lookup and create bean
  36.          ReservationConfirmerLocal resConfirmer = resConfirmer.confirmReservation(reservationID);
  37.       } catch (JMSException e) {
  38.          e.printStackTrace();
  39.       }
  40.    }
  41.  
  42.    public void close() {
  43.       try {
  44.          qReceiver.setMessageListener(null);
  45.          qSession.close();
  46.       } catch (Exception e) {
  47.          e.printStackTrace();
  48.       }
  49.    }
  50. }


5. 결과
  • 장점
    메시징 서버가 EJB 1.x 콤포넌트를 호출할 수 있음
    어떤 타입의 비즈니스 콤포넌트일지라도 비동기 통신 방식이 가능
    비즈니스 프로세싱과 메시지를 소비 및 파싱하는 작업을 분리
  • 단점
    EJB 2.x 버전 이후부터는 JMS API가 컨테이너 서비스 형태로 제공. 따라서, 2.x 버전 이후부터는 Service Activator 패턴이 필요하지 않음

6. 관련 패턴

  • Business Delegate
  • Service Locator
  • Session Facade
이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/22 01:50 2007/05/22 01:50
[로그인][오픈아이디란?]

통합(Integration) 티어 패턴 - J2EE 패턴 카달로그

2007/05/22 01:39
1. 개요
사용자 삽입 이미지

2. 통합(Itegration)티어 패턴
통합(Itegration)티어 패턴는 J2EE 플랫폼과 다른 종류의 어플리케이션이나 레거시 시스템과의 통합에 초점을 두고 있습니다. 이 티어에 분류되어 있는 패턴들은 주로 JDBC API와 Java Message Service API와 같은 기술을 사용
  • Service Activator Pattern
    동기화 된 EJB 컴포넌트, 특히 세션 빈 같은 것들을 사용하여 비동기화 프로세싱을 가능하게 하는 솔루션을 제공. 이 패턴은 EJB 2.0의 메시지 드리븐 빈과 비슷한 기능을 제공
  • Data Access Object Pattern
    유연성 있고 투명한 데이터 접근을 제공하며, 또한 데이터 소스의 추상화, 그리고 EIS 영속성 티어의 복잡도를 숨김. 이러한 장점들은 비즈니스 티어와 EIS 티어 간의 느슨한 결합을 가능하게 함. 이 패턴은 영속성을 관리하는 빈 같은 엔티티 빈에서 유용하게 시용됨
  • Domain Store Pattern
    엔티티 빈을 사용하지 않으면서 비즈니스 오브젝트에게 투명성이 보장된 퍼시스턴스 메커니즘을 생성
  • Web Service Broker Pattern
    비즈니스 서비스를 웹 서비스 형태로도 서비스를 제공하고자 할 때 이를 유연하게 처리할 수 잇는 방법을 제공
3. 비즈니스(Business)티어 패턴
비즈니스(Businesss)티어는 비즈니스 로직을 가짐. 이 티어에 분류되어 있는 패턴들은 퍼시스턴스 관리와 비즈니스 로직 핸들링에 처점을 두고 있고, EJB 기술, JNDI API, JMS API를 주로 사용
  • Service Locator Pattern
    J2EE 플랫폼 클라이언트가 Service Locator를 사용하면 비즈니스 콤포넌트의 레퍼런스 획들을 하고자 할 때 JNDI API를 직접 사용하지 않고도 작업이 가능. 또한, Service Locator는 컨트롤의 싱글 포인트를 제공하고, 캐싱을 통한 성능 향상을 가능하게 해줌
  • Session Facade Pattern
    비즈니스 콤포넌트의 복잡도를 숨기고, 워크플로우를 집중화 시켜줌. 이 패턴은 클라이언트에게 사용이 쉽고 간단한 형태의 인터페이스를 제공하고, 또한 명시적인 트랜재션과 보안 관리를 쉽게 할 수 있도록 해줌. 이것은 가장 중요한 J2EE 패턴 중 하나
  • Business Delegate Pattern
    티어간 커플링, 특히 프리젠테이션 티어와 비즈니스 로직 티어 간의 커플링의 감소를 위한 솔루션을 제공
  • Transfer Object Pattern
    티어 간의 테이더 교환시의 문제점과 관련 잇는 원격 오버헤드의 문제점을 해결. Transfer Object는 싱글 리모트 메소드 호출을 통해 티어 간을 이동하는 직렬화 가능한 객체들이 필요로 하는 모든 데이터를 가지고 있음. 이 패턴은 티어 간의 통신과 테이터 교환을 위한 최상의 테크닉으로 생각됨. 또한, 이 패턴은 분산 시스템에서 상당한 비용을 차지하는 리모트 메소드 호출 횟수를 최소화 해줌
  • Application Service Pattern
    Service Facade와 비즈니스 오브젝트간 필요한 비즈니스 로직을 놓을 위치를 제공
  • Business Object Pattern
    비즈니스 데이터를 효현하는 오브젝트로 도메인 오브젝트와 같은 의미. 즉, 비즈니스 오브젝트 패턴은 비즈니스 로직에서 비즈니스 데이터 부분을 분리시키는 방법에 대해 기술
  • Transfer Object Assembler Pattern
    Transfer Object 패턴에서 확장되어 만들어진 패턴으로 클라이언트가 필요한 테이터를 얻기 위해 여러 개의 비즈니스 오브젝트를 직접 하나하나 억세스하기보다는 한번의 요청에 의해 필요한 테이터를 얻을 수 있도록 여러 개의 비즈니스 오브젝트에서 클라이언트가 필요로 하는 테이터를 모두 가지고 있는 Transfer Object를 만들어 줌
  • Composite Entity Pattern
    관련되어 있고, 메소드를 상세하게 정의하고 있는 퍼시스턴스 오브젝트를 하나의 엔티티로 표현, 따라서, Composite Entity를 사용할 경우 리모트 인터페이스의 오버헤드를 줄일 수 있음
  • Value List Handler Pattern
    많은 양의 오브젝트를 리턴해야 하는 커리 실행을 위한 메커니즘을 제공. 그리고, Value List Handler 패턴은 성능 개선을 위한 결과를 잠시 저장하기도 하고, 저장되어 잇는 데이터를 클라이언트가 효율적인 방법으로 접근할 수 있는 기능을 제공. 이 패턴은 GoF의 Iterator 패턴과 관련이 있음
4. 프리젠테이션(Presentation) 티어 패턴
프리젠테이션(Presentation) 티어 패턴 프리젠테이션 요청을 핸들링하고 뷰를 생성하는 것과 같은 사용자 인터페이스와 관련되어 있음. 이 티어에 분류되어 있는 패턴들은 프리젠테이션 콤포넌트 구축을 위한 최고 실행 사례를 다루고 있고, 주로 JSP 페이지, 서블릿, 자바빈즈 콤포넌트, 커스텀 태크와 같은 기술을 사용
  • Intercepting Filter Pattern
    클라이언트 요구사항에 대한 전처리와 후처리에 대한 솔루션 제공. 서블릿의 기능 중 필터 기능은 이 패턴을 구현해 놓은 것
  • Front Controller Pattern
    집중화 된 컨트롤러를 이용해 클라이언트의 요청 관리를 위한 메커니즘을 제공. 컨트롤러는 프리젠테이션 티어에서 일어나는 공통의 프로세싱을 대신함. 또한 MVC 패턴에서 컨트롤러 부분을 대신 함
  • Application Controller Pattern
    Front Controller 콤포넌트는 클라이언트 요청이 들어왔을 때 이 요청을 처리할 적절한 액션을 선택해 호출하고, 요청 처리 후 처리 결과를 적절한 포맷의 뷰를 생성해줄 부를 선택하는 로직을 수행. Application Controller 패턴은 이 두개의 로직을 분리하기 위한 방법을 제공
  • Context Object Pattern
    Context Object 패턴은 컨텍스트용 오브젝트를 컨텍스트의 범위를 벗어나게 하지 않으면서 컨텍스트용 오브젝트를 가지고 있는 데이터를 전달할 수 있도록 함
  • View Helper Pattern
    View Helper 패턴은 뷰 컴포넌트에서 뷰를 위해 필요한 헬퍼로직을 따로 분리하여 캡슐화하고 잇음. 뷰 컴포넌트가 JSP 페이지일 경우, 이 패턴은 JSP 페이지 내에서 나타나게 되는 자바 관련 코드의 양을 최소화 해줌
  • Composite View Pattern
    많은 다른 서브 뷰를 이용해 하나의 뷰를 만듬. 서브 뷰 증 일부는 시스템내의 다른 곳에서 사용중일 수 있음
  • Dispatcher View Pattern
    Front Coltroller와 View Helper 패턴이 결합되어 만들어진 패턴
  • Service to Worker Pattern
    Front Controller가 비즈니스 프로세스 호출과 부 선택의 책임을 모두 가지고 있다라는 것을 제외하고 Dispatcher View 패턴과 유사
5. J2EE 패턴들의 관계
사용자 삽입 이미지

이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/22 01:39 2007/05/22 01:39
[로그인][오픈아이디란?]

통합(Integration) 티어 패턴 - J2EE 패턴철학

2007/05/22 00:58
1. 정의 및 목적
  • 정의: J2EE 플랫폼 어플리케이션의 셜계 과정또는 적용과정에서 발생하게 되는 중요한 문제를 문서화하고 해석한 다음, 그 문제를 해결하기 위한 최상의 해결방안 제시.
    시간이 갈수록 패턴은 선별된 지식과 산업계의 경험을 포괄하게 됨.
  • 목적:
    J2EE 패턴은 이론보다는 경험을 통해 얻어진 것.
    J2EE 패턴은 EJB 콤포넌트, 서블릿, JSP, JNDI API와 같이 J2EE 플랫폼에서 제공하는 기술들을 사용할때 발생하는 문제점을 해결하고자 함.
    J2EE 패턴은 계속 진화하며, 완전히 새로운 기술을 개발하기 보다는 최고 실행 사례를 문서화하고 추천하는 것.
2. 사용시 이점
사용자 삽입 이미지

  • J2EE 패턴이 내재하고 있는 디자인 원칙을 자연스럽게 사용
  • 문서화의 효과와 사용사례를 받아들이는 효과
  • J2EE에서 제공되고 잇는 기술들의 역할을 이해
  • 콤포넌트간 커플링과 의존도(dependency)를 줄임
  • 네트웍 트래픽을 최소화
  • 가능할 때마다 네트워크 지연으로 발생하는 비용일 줄임
  • J2EE 개발자를 위한 공통적인 어휘정의. 즉, 개발자들 간의 더욱 수월한 커뮤니 케이션이 가능
3. GoF 패턴과 J2EE 패턴의 비교
  • GoF 패턴
    일반적인 목적으로 사용될 수 있고, 특정 프로그래밍 언어나 플랫폼, 도메인에 독립적.
    많은 GoF 패턴들은 다른 GoF 패턴을 토대로 만들어짐.
    어떤 오브젝트 중심의 언어로도 구현될 수 있음.
  • J2EE 패턴
    J2EE 패턴은 다른 플랫폼에서 사용될 수 있지만, J2EE 플랫폼과 자바에 종속적인 패턴으로 Idiom에 가까움.
    J2EE 패턴 또한 GoF 패턴이나 다른 J2EE 패턴을 토대로 만들어짐.
4. 문서 형식
  • Context: 문제가 발생할 수 있는 상황을 정의
  • Problem: 패턴이 해결하고자 하는 문제점을 기술
  • Force: 해결방안이 바로 잡아야 할 문제점들을 열거
  • Solution: 패턴을 기술. 클래스 다이어그램과 시퀀스 다이어그램을 이용해 패턴에 어떠한 객체들이 참여하고 있고 이들이 어떤 책임을 수행하고 있는 지 설명
  • Strategy: 패턴 구현 적략에 대해 기술
  • Example: 패턴이 특정 시나리오에서 어떻게 적용될 수 있는지를 설명
  • Consequence: 패턴 사용으로 발생하는 장점과 단점에 대해 설명
  • 관련 패턴: 이 패턴이 만들어지게 된 이유와 유사한 이유를 가지고 잇는 패턴을 기술
이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/22 00:58 2007/05/22 00:58
[로그인][오픈아이디란?]