EJB 아키텍처

이 주제에서는 Sun Microsystems 엔터프라이즈 JavaBeans™(EJB) 아키텍처 스펙에 정의된 분산 컴포넌트 아키텍처의 상위 레벨 개요를 제공합니다.

전체 엔터프라이즈 JavaBeans 스펙 및 기술에 관한 설명은 java.sun.com 웹 사이트에서 찾을 수 있습니다.

엔터프라이즈 Bean은 응용프로그램 개발자에게 다음과 같은 여러 이점을 제공합니다.

엔터프라이즈 Bean
엔터프라이즈 Bean은 분산 트랜잭션 지향 엔터프라이즈 응용프로그램의 비시각적 컴포넌트입니다. 엔터프라이즈 Bean은 보통 EJB 컨테이너에 배치되며 EJB 서버에서 실행됩니다. 이 Bean은 해당 배치 설명자를 변경하여 사용자 정의할 수 있으며 다른 Bean과 어셈블하여 새 응용프로그램을 작성할 수 있습니다. 엔터프라이즈 Bean에는 세션 Bean, 엔티티 Bean메시지 구동 Bean의 세 가지 유형이 있습니다.
  • 세션 Bean: 세션 Bean은 비지속 엔터프라이즈 Bean입니다. 해당 상태는 Stateful 또는 Stateless입니다. Stateful 세션 Bean은 단일 클라이언트를 위해 작동하고 다중 메소드 호출 및 트랜잭션에서 클라이언트 특정 세션 정보(호출된 대화 상태)를 유지보수합니다. 단일 클라이언트/서버 세션 지속 기간에만 존재합니다. 이에 비해 Stateless 세션 Bean의 경우에는 대화 상태를 유지하지 않습니다. Stateless 세션 Bean은 해당 컨테이너에서 풀링하여 다중 클라이언트의 여러 요청을 처리합니다.
  • 엔티티 Bean: 엔티티 Bean은 지속적 데이터를 포함하고 다양한 지속 데이터 스토어에 저장이 가능한 엔터프라이즈 Bean입니다. 각각의 엔티티 Bean은 고유의 ID가 있습니다. 엔티티 Bean 자체의 지속성을 관리하는 엔티티 Bean을 BMP(bean-managed persistence) 엔티티 Bean이라고 합니다. 지속성을 EJB 컨테이너에 위임하는 엔티티 Bean을 CMP(container-managed persistence) 엔티티 Bean이라고 합니다.
  • 메시지 구동 Bean: 메시지 구동 Bean은 JMS 메시지를 받아 처리하는 엔터프라이즈 Bean입니다. 세션 Bean 또는 엔티티 Bean과는 달리, 메시지 구동 Bean은 인터페이스가 없습니다. 이 Bean은 메시지 전달을 통해서만 액세스할 수 있으며 대화 상태를 유지하지 않습니다. 메시지 구동 Bean을 사용하면 대기열과 리스너 간에 비동기로 통신할 수 있으며, 메시지 처리와 비즈니스 로직 간의 독립성을 제공합니다.
원격 클라이언트 보기
원격 클라이언트 보기 스펙은 EJB 1.1부터 사용할 수 있습니다. 엔터프라이즈 Bean의 원격 클라이언트 보기는 위치에 종속되지 않습니다. Bean 인스턴스와 동일한 JVM에서 실행되는 클라이언트는 같거나 다른 시스템의 다른 JVM에서 실행되는 클라이언트와 동일한 API를 사용하여 Bean에 액세스합니다.
  • 원격 인터페이스: 원격 인터페이스는 클라이언트가 엔터프라이즈 Bean에서 호출할 수 있는 원격 비즈니스 메소드를 지정합니다.
  • 원격 홈 인터페이스: 원격 홈 인터페이스는 엔터프라이즈 Bean 클래스의 인스턴스를 찾고 작성하며 제거하기 위해 원격 클라이언트에서 사용하는 메소드를 지정합니다.
로컬 클라이언트 보기
로컬 클라이언트 보기 스펙은 EJB 2.0 이상에서 사용할 수 있습니다. 원격 클라이언트 보기와는 달리 Bean의 로컬 클라이언트 보기는 위치에 종속됩니다. 엔터프라이즈 Bean으로 로컬 클라이언트 보기가 액세스하려면 동일한 JVM에 있도록 로컬 클라이언트와 로컬 클라이언트를 제공하는 엔터프라이즈 Bean이 둘 다 필요합니다. 따라서 로컬 클라이언트 보기는 원격 클라이언트 보기에서 제공하는 위치 투명성을 제공하지 않습니다. 로컬 인터페이스 및 로컬 홈 인터페이스는 로컬 클라이언트인 엔터프라이즈 Bean으로부터 간단한 액세스를 위한 지원을 제공합니다. 세션 Bean 및 엔티티 Bean은 해당 클라이언트와 밀접하게 결합할 수 있으며 일반적으로 원격 메소드 호출과 연관된 오버헤드 없이 액세스할 수 있습니다.
  • 로컬 인터페이스: 로컬 인터페이스는 원격 인터페이스의 간단한 버전이지만 로컬 클라이언트를 위한 인터페이스입니다. 로컬 클라이언트에서 호출할 수 있는 비즈니스 로직 메소드를 포함합니다.
  • 로컬 홈 인터페이스: 로컬 홈 인터페이스는 엔터프라이즈 Bean 클래스의 인스턴스를 찾고 작성하고 제거하기 위해 로컬 클라이언트에서 사용하는 메소드를 지정합니다.
웹 서비스 클라이언트 보기
EJB 2.1 스펙에서 EJB 아키텍처는 웹 서비스 지원을 도입했습니다. 세션 Bean의 클라이언트는 웹 서비스 클라이언트일 수 있습니다. 웹 서비스 클라이언트는 해당 서비스 엔드포인트 인터페이스를 갖는 Stateless 세션 Bean의 웹 서비스 클라이언트 보기를 사용할 수 있습니다.
서비스 엔드포인트 인터페이스
Stateless 세션 Bean의 서비스 엔드포인트 인터페이스는 웹 서비스 엔드포인트로서의 세션 Bean의 기능을 나타냅니다. 웹 서비스에 대한 WSDL(Web Service Description Language) 문서는 웹 서비스를 메시지에서 작동하는 엔드포인트 세트로 설명합니다. WSDL 문서는 Stateless 세션 Bean의 서비스 엔드포인트 인터페이스를 해당 엔드포인트 중 하나로 포함할 수 있습니다. 기존 Stateless 세션 Bean을 웹 서비스 클라이언트 보기를 포함하도록 수정할 수 있습니다. 또는 서비스 엔드포인트 인터페이스를 기존 WSDL에서 맵핑하여 올바른 인터페이스를 제공할 수 있습니다.

웹 서비스 클라이언트 보기는 위치에 종속되지 않으므로 원격 호출을 통해 액세스할 수 있습니다.

EJB 클라이언트 JAR 파일
EJB 클라이언트 JAR 파일은 클라이언트 프로그램이 EJB JAR 파일에 포함된 엔터프라이즈 Bean의 클라이언트 보기를 사용하는 데 필요한 클라이언트 인터페이스를 포함하는 선택적 JAR 파일입니다. EJB 모듈에 대해 EJB 클라이언트 JAR 파일을 작성하지 않으려는 경우 모든 클라이언트 인터페이스 클래스는 EJB JAR 파일에 있게 됩니다. 기본적으로, Workbench는 해당 EJB 프로젝트 각각에 대해 EJB 클라이언트 JAR 프로젝트를 작성합니다.
EJB 컨테이너
EJB 컨테이너는 하나 이상의 엔터프라이즈 Bean을 관리하는 런타임 환경입니다. EJB 컨테이너는 엔터프라이즈 Bean 오브젝트의 라이프사이클을 관리하고 분산 트랜잭션을 통합하며 오브젝트 보안을 구현합니다. 일반적으로 각 EJB 컨테이너는 EJB 서버에서 제공하며 서버에서 실행되는 일련의 엔터프라이즈 Bean을 포함합니다.
배치 설명자
배치 설명자는 EJB JAR 파일 또는 EAR 파일에서 엔터프라이즈 Bean과 함께 패키지화된 XML 파일입니다. 엔터프라이즈 Bean의 컨텐츠와 구조, 런타임 트랜잭션 및 EJB 컨테이너에 필요한 보안 정보를 설명하는 메타데이터가 들어 있습니다.
EJB 서버
EJB 서버는 엔터프라이즈 Bean을 사용하는 서버 응용프로그램의 실행을 지원하기 위해 런타임 환경을 제공하는 상위 레벨 프로세스 또는 응용프로그램입니다. EJB 서버는 JNDI에서 액세스할 수 있는 이름 지정 서비스를 제공하며 클라이언트 응용프로그램에 대한 자원 할당을 관리 및 조정하고 시스템 자원에 대한 액세스와 트랜잭션 서비스를 제공합니다. 예를 들어, 데이터베이스 또는 응용프로그램 서버에서 EJB 서버를 제공할 수 있습니다.