EJB 기술 기반 비즈니스 예약 시스템 개발
저자:Eve Cole
업데이트 시간:2009-07-02 17:12:35
대규모 네트워크 시스템 개발에 기술이 점점 더 많이 사용되고 있습니다. 이 기사에서는 EJB(Enterprise Java Beans)의 정의, EJB 기술을 기반으로 하는 애플리케이션 시스템 구조 모델, EJB의 내용 및 분류를 소개합니다. 마지막으로 EJB 기반의 컴포넌트와 결합하여 구조 모델과 EJB 컴포넌트를 활용한 비즈니스 예약 시스템을 개발했습니다.
EJB는 기술적으로 "제품"이 아니라 기술 사양입니다. SUN의 EJB 정의는 다음과 같습니다. EJB의 구조는 구성 요소 기반 분산 비즈니스 응용 프로그램을 개발하고 구성하기 위한 구성 요소 구조입니다. EJB 구조로 개발된 애플리케이션은 확장 가능하고 트랜잭션이 가능하며 다중 사용자에게 안전합니다. 이러한 애플리케이션은 한 번만 작성하면 되지만 EJB 사양을 지원하는 작업 서버 플랫폼에 배포할 수 있습니다. 일반적으로 EJB는 구성 요소 트랜잭션 모니터링을 위한 표준 서버측 구성 요소 모델입니다.
EJB 기술 기반 시스템 구조 모델
EJB 구조는 계층 구조인 서버 측 구성 요소 구조로, 그 구조 모델은 그림 1에 나와 있습니다. 이 구조 모델은 일반적으로 고객 레이어, 비즈니스 로직 레이어, 데이터 레이어로 나눌 수 있습니다. 이에 대해 저자는 아래에서 간략하게 소개합니다.
그림 1: EJB 기반 애플리케이션 구조 모델
클라이언트 계층은 주로 전체 시스템에 대한 다양한 액세스 요구 사항을 충족하고 다음 작업을 처리하는 데 사용됩니다.
사용자 입력을 수신하고, 사용자 입력을 분석 및 확인하고 그에 따라 처리합니다.
서버 측 상위 레벨에서 전송된 실행 결과를 표시합니다.
클라이언트 계층은 일반적으로 브라우저에 의해 동적으로 생성되고 삭제되는 클라이언트 프로세스로 구성됩니다.
비즈니스 로직 레이어는 전체 시스템에서 가장 중요한 부분입니다. 비즈니스 로직 계층은 일반적으로 두 개의 계층으로 나누어집니다. 상위 계층은 요청 수신 계층(일반적으로 웹 계층이라고 함)으로, 브라우저에서 요청을 수신하고 처리 결과를 하위 계층으로 전송하는 데 사용됩니다. 브라우저로 전송됩니다. 이러한 프로세스는 주로 JSP 페이지, 웹 기반 애플릿, HTML 페이지를 표시하는 서블릿으로 구성됩니다. 맨 아래 계층은 요청 처리 계층(일반적으로 EJB 계층이라고 함)으로 수신 프로세스, 처리 프로세스 및 데이터베이스 운영 프로세스를 포함하며 요청 수신 계층에서 고객 요청을 처리하는 동시에 처리하는 역할을 담당합니다. 요청 결과를 요청 수신 계층으로 전달합니다. 필요한 경우 처리 결과를 데이터 계층으로 전달하여 저장해야 합니다.
데이터 계층은 주로 비즈니스 논리 계층의 처리 결과를 저장하고 비즈니스 논리 계층에서 검색한 데이터 결과를 반환하는 등 비즈니스 논리 계층에 대한 데이터 서비스를 제공하므로 데이터 소스의 변경 사항을 보호하는 데도 사용됩니다. 데이터베이스가 변경되면 수정하기만 하면 됩니다. 문을 사용하여 데이터 소스에 연결하면 됩니다.
EJB 구성 요소 분류 일반적으로 서버 측 EJB 구성 요소에는 Entity Bean과 Session Bean이라는 두 가지 기본 유형이 있습니다.
그림 2: 비즈니스 예약 시스템의 아키텍처
Entity Bean은 일반적으로 데이터베이스의 영구 레코드인 실제 객체를 위해 구축된 모델입니다. Entity Bean은 명사로 표현될 수 있는 비즈니스 개념에 대한 모델을 구축합니다. 이는 실제 개체의 상태와 해당 동작을 모두 설명하고 개발자가 특정 개념과 관련된 데이터 및 비즈니스 규칙을 캡슐화할 수 있도록 합니다. Session Bean은 홈 인터페이스를 통해 생성된 Enterprise Bean으로 클라이언트 연결 전용으로 Session Bean 인스턴스는 일반적으로 다른 클라이언트와 공유되지 않습니다. Session Bean은 클라이언트 애플리케이션의 확장이며 전체 프로세스 또는 작업을 관리하는 역할을 합니다. Session Bean은 Entity Bean 간의 상호 작용을 관리하여 특수 작업을 완료하기 위해 함께 작동하는 방법을 설명합니다.
Entity Bean은 지속성을 관리하는 방식에 따라 컨테이너 관리 Bean과 Bean을 사용하여 관리되는 Bean으로 나눌 수 있습니다. 컨테이너 관리 Bean은 EJB 컨테이너에 의해 자동으로 관리됩니다. 컨테이너는 Bean 인스턴스의 필드가 데이터베이스에 매핑되는 방법을 알고 있으며 Bean을 사용하여 데이터베이스에서 엔터티 관련 데이터의 삽입, 업데이트 및 삭제를 자동으로 관리합니다. 지속성을 관리합니다. Bean은 이 모든 작업을 명시적으로 수행해야 합니다. Bean 개발자는 데이터베이스를 작동하기 위한 코드를 작성해야 합니다. EJB 컨테이너는 데이터베이스에 데이터를 안전하게 삽입, 업데이트 및 삭제할 수 있는 시기만 Bean 인스턴스에 알려줍니다. Bean 인스턴스는 모든 지속성 작업을 자체적으로 수행합니다.
Session Bean은 Stateful Bean인지 여부에 따라 Stateless Bean과 Stateful Bean으로 나눌 수 있습니다. Stateless Session Bean은 다목적이며 재사용이 가능한 경향이 있습니다. Stateful Session Bean은 클라이언트를 대신하여 작업을 완료하고 클라이언트 관련 상태를 유지하는 클라이언트 애플리케이션의 확장입니다.
비즈니스 예약 시스템 개발 객실 예약 시스템은 J2EE 플랫폼에서 개발된 EJB 구성 요소 기술을 기반으로 한 비즈니스 예약 시스템으로, 주요 프로세스는 사용자가 로그인한 후 고객 선택 페이지와 탐색 선택 페이지를 통해 안내되는 것입니다. (TravelAgentBean에서 사용 가능한 객실 목록을 얻습니다. TravelAgentBean의 listAvailableCabin() 메소드는 이 웹 페이지를 생성하는 서블릿에 의해 호출됩니다. 객실 목록은 사용자 브라우저에 로드된 웹 페이지의 HTML 목록 상자), 사용자가 캐빈을 선택하고 선택 사항을 제출하면 HTTP 요청이 EJB 서버(Websphere Application Server)로 전송됩니다. 서버는 요청을 받은 후 디스패치합니다. 이 서블릿은 실제 예약을 하기 위해 BookPassage() 메소드에서 반환된 태그 정보를 사용하여 사용자의 브라우저로 다시 전송됩니다. 예약이 성공하면 ProcessPaymentServlet은 ProcessPaymentBean의 결제 방법을 호출하여 고객에 대한 청구 프로세스를 구현합니다. 구체적인 구조는 그림 2에 나와 있습니다.
예약 시스템의 EJB 구성 요소는 주로 다음 부분을 포함합니다.
CabinBean: Entity Bean, 기본 키는 CabinPK입니다. 이는 현실 세계에서 선박의 선실을 캡슐화하는 데 사용되는 엔터티 Bean입니다.
CustomerBean: Entity Bean, 기본 키는 CustomerPK입니다. 이는 실제 세계에서 크루즈 객실을 예약해야 하는 소비자를 캡슐화하는 데 사용되는 엔터티 Bean입니다.
CruiseBean: Entity Bean, 기본 키는 CruisePK이며, 이는 실제 세계에서 선박 경로를 캡슐화하는 데 사용되는 엔터티 Bean입니다. ReservationBean: Entity Bean, 기본 키는 CruiseID, CabinID이며 데이터베이스에 변경되지 않은 기록, 즉 예약을 나타내며 주로 이중 예약을 방지하는 데 사용됩니다. 두 명의 고객이 동일한 노선을 예약한 이유는 고객이 객실 및 노선을 선택하는 시점과 bookPassage() 메서드가 호출되는 시점 사이에 차이가 있기 때문입니다. TravelAgentBean: 항공편 객실 예약 작업 흐름을 담당하는 상태 저장 세션 Bean으로, 노선 예약 작업을 완료하는 프로세스를 캡슐화하고 전 세계 여행사의 클라이언트 애플리케이션에 사용됩니다. TravelAgentBean은 항공권 예약에 대한 소비자의 요구를 충족할 뿐만 아니라 항해 중 남은 객실에 대한 정보도 제공합니다. 이 작업을 완료하려면 Bean은 예약이 어떤 경로, 객실 및 고객으로 구성되어 있는지 알아야 합니다. 이 정보를 수집한 후 bookPassage() 메서드는 고객의 청구를 담당합니다. 올바른 노선에서 올바른 선박의 선택한 객실을 예약하고 티켓 클래스를 통해 고객을 위한 티켓을 생성하세요. 여기서는 CreditCard 클래스를 사용하여 고객의 신용 카드에 대한 관련 정보를 저장하는 동시에 ListAvailableCabins() 메서드를 사용하여 예약되지 않은 객실을 표시해야 합니다.
ProcessPaymentBean: 트랜잭션 시스템에서 소비자에게 비용을 청구하는 프로세스인 Stateless 세션 Bean입니다. 이는 수표, 현금 및 신용카드 결제 방법에 대한 세 가지 거래 방법, 즉 ByCheck(), ByCash() 및 ByCredit()을 정의합니다.
비즈니스 예약 시스템의 프로그램 코드 예시. 전체 비즈니스 예약 시스템은 IBM VisualAge for Java를 사용하여 개발되었습니다. 이 IDE 개발 환경에서는 세션 빈보다 개발하기가 훨씬 쉽습니다. 다음은 개발 프로세스를 소개하는 예로 TravelAgentBean을 사용하는 것입니다. EJB 구성 요소 중:
1. TravelAgent 원격 인터페이스 고객이 예약하려는 경로 및 객실 ID를 설정하는 방법을 제공합니다. 또한 고객에게 예약 비용을 청구하고 고객을 위한 티켓을 생성하도록 boolPassage() 메서드가 설정되어 있습니다. 구체적인 코드는 다음과 같습니다.
패키지 com.titan.travelagent;
import java.rmi.RemoteException;
import javax.ejb.FinderException;
import com.titan.cruise.Cruise;
com.titan.customer.Customer를 가져옵니다.
com.titan.processpay.CreditCard를 가져옵니다.
공용 인터페이스 TravelAgent는 javax.ejb.EJBObject를 확장합니다.
{
public void setCruiseID(int Cruise)는 RemoteException, FinderException을 발생시킵니다.
public int getCruiseID()는 RemoteException, IncompleteConversationalState를 발생시킵니다.
public void setCabinID(int Cabin)는 RemoteException, FinderException을 발생시킵니다.
public int getCabinID()는 RemoteException, IncompleteConversationalState를 발생시킵니다.
public int getCustomerID()는 RemoteException, IncompleteConversationalState를 발생시킵니다.
공개 티켓 boolPassage(신용카드 카드, 이중 가격)는 RemoteException, IncompleteConversationalState를 발생시킵니다.
}
2. TravelAgent 홈 인터페이스
TravelAgent Home 인터페이스 코드는 다음과 같습니다.
puckage com.titan.tracelagent;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
com.titan.customer.Customer를 가져옵니다.
공용 인터페이스 TravelAgentHome은 javax.ejb.EJBHome을 확장합니다.
public TravelAgent create(Customer cust)가 RemoteException,CreateException을 발생시킵니다.}
3. TravelAgent Bean 클래스는 TravelAgent의 원격 인터페이스와 홈 인터페이스의 모든 동작을 구현해야 합니다. 공간 제한으로 인해 이 기사에서는 구현 코드를 소개하지 않습니다.
위의 단계를 통해 비즈니스 예약 시스템의 EJB 구성 요소 개발을 완료했습니다.