이 주제에서는 Sun Microsystems 엔터프라이즈
JavaBeans™(EJB)
아키텍처 스펙에 정의된 분산 컴포넌트 아키텍처의 상위 레벨 개요를 제공합니다.
전체 엔터프라이즈
JavaBeans 스펙 및 기술에 관한 설명은
java.sun.com
웹 사이트에서 찾을 수 있습니다.
엔터프라이즈 Bean은 응용프로그램 개발자에게 다음과 같은 여러 이점을 제공합니다.
- 다양한 벤더의 도구를 사용하여 개발된 컴포넌트를 조합하여 분산 응용프로그램을 빌드할 수 있습니다.
- 손쉽게 응용프로그램을 작성할 수 있습니다. 트랜잭션 및 상태 관리, 멀티스레딩, 자원 풀링과 기타 복잡한 하위 레벨 API에 대한 하위 레벨 세부사항을 처리하지 않아도 됩니다. 그러나 필요할 경우
전문 프로그래머는 하위 레벨 API에 직접 액세스할 수 있습니다.
- 한 번 개발하면 다시 컴파일하거나 소스 코드를 수정하지 않고도 다중 플랫폼에 배치할 수 있습니다.
- 엔터프라이즈 Bean의 사용 시 필요한 EJB 스펙은 다른
Java™ API 및 CORBA와 호환이 가능합니다. 또한 엔터프라이즈 Bean 및
Java로 작성되지 않은 응용프로그램 간의 상호운용성도 지원합니다.
- 엔터프라이즈 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 서버를 제공할 수 있습니다.