가이드라인: 세션 Bean 식별
이 가이드라인은 J2EE 응용프로그램의 세션 Bean을 식별하고 모델링하는 방법에 대해 설명합니다.
관계
관련 요소
기본 설명

소개

이 가이드라인은 세션 Bean 식별에 초점을 둡니다. 세션 Bean에 대한 추가 안내는 가이드라인: 세션 Bean에서 제공합니다. EJB에 대한 일반 안내는 가이드라인: EJB(Enterprise JavaBean)에서 제공합니다.

세션 Bean 식별

세션 Bean이 제어 로직을 제공하도록 조정될 때, 제어 클래스는 흔히 세션 Bean의 좋은 후보이며, 특히 이 제어 로직이 클라이언트와의 대화를 포함할 때 그렇습니다. 또한 세션 Bean은 비즈니스 층에서 오브젝트 세트의 Facade로 흔히 식별됩니다(아래 세션 Facade 패턴 참조). 또한 J2EE 1.4부터는 Stateless 세션 Bean을 사용하여 웹 서비스를 구현할 수 있습니다.

J2EE 1.3으로 작업 중인 경우, 로컬 컴포넌트 인터페이스를 통해 동일한 JVM에서 엔티티 EJB를 조작하는 세션 EJB를 통해 모든 원격 클라이언트 액세스를 처리하는 것이 보통입니다.

세션 Bean 모델링

가이드라인: EJB(Enterprise JavaBean) 식별을 참조하십시오.

Stateful 대 Stateless

두 가지 유형의 세션 Bean이 있습니다. stateful 및 stateless. 세션 Bean을 식별하는 파트는 책임을 정의합니다. 이 중 하나는 호출 간의 클라이언트 상태를 유지보수하기 위한 것일 수 있습니다.

Stateful 세션 Bean은 클라이언트 및 EJB 컨테이너 간의 대화에 대한 상태 정보를 보유합니다. stateful 세션 Bean 인스턴스만이 클라이언트 대화의 지속 기간 동안 존재합니다. Stateful 세션 Bean은 보통 이 클라이언트 데이터를 사용하여 서비스를 수행합니다. stateful 세션 Bean에서 제공하는 서비스는 기타 비즈니스 오브젝트(세션 Bean 및 엔티티 Bean)의 상호 작용을 조정할 수 있습니다. 예를 들어, 구매할 오브젝트를 포함하는 장바구니는 클라이언트가 응용프로그램과 상호 작용하는 동안 정보를 보유할 수 있으므로 stateful 세션 Bean을 사용하여 구현될 수 있습니다. stateful 세션 Bean은 특정 클라이언트로 할당되므로, 클라이언트 상태 보유을 위해 stateless 세션 Bean보다 더 많은 시스템 자원을 사용합니다. 컨테이너는 일반적으로 Stateful 세션 Bean을 "패시베이션"(passivating, 디스크에 쓰기)하고 필요할 때 다시 활성화하여 이 자원을 관리합니다.

Stateless 세션 Bean은 클라이언트 및 EJB 컨테이너 간의 대화에 대한 상태 정보를 보유하지 않습니다. "Stateless"는 실제로 클라이언트 대화 상태가 아님을 의미합니다. 그러므로 stateless 세션 Bean은 클라이언트가 사용할 수 있는 데이터베이스 연결과 같은 기타 상태 종류를 포함할 수 있습니다. Stateless 세션 Bean은 이전 메소드 호출에서 클라이언트 상태 데이터를 사용하지 않는 일반 서비스를 수행하지만, 대신 현재 메소드 호출에서 매개변수로 관련된 모든 입력을 수신하거나, 메소드 호출(엔티티 Bean에서 또는 JDBC를 통해 데이터베이스에 액세스하여) 중 다른 소스로부터 데이터를 얻습니다. Stateless 세션 Bean은 보통 준비 풀에서 제공되며 들어오는 요청을 처리하기 위해 필요할 때 디스패치됩니다. 모든 인스턴스가 동일하므로, stateless 세션 Bean은 관련 클라이언트에 대해 알 필요가 없습니다. 이것은 성능 및 확장성을 증가시킬 수 있습니다. 비연속인 요청 간에 인스턴스를 공유할 수 있으므로 특정 활동 세션으로 "결합"하기 보다는 Stateless 세션 Bean이 더 효과적입니다.

일반적으로, 클라이언트의 대화에 가장 적합한 세션 Bean 종류를 선택하십시오. 클라이언트 상태를 클라이언트에 저장하고 각 호출 시 재전송하거나 각 메소드 호출 시 데이터베이스에서 클라이언트 상태를 저장 및 검색하는 것과 같이, stateful 세션 Bean을 stateless 세션 Bean으로 강제적으로 맞추는 전략이 있습니다. 그러나 이 전략은 실제로 네트워크 트래픽 및 데이터 액세스의 오버헤드로 인해 확장성을 감소시킬 수 있습니다.

웹 서비스를 구현하기 위해 세션 Bean이 작성될 경우, JSR 1.3 API 스펙에 정의된 대로 stateless 세션 Bean을 사용해야 합니다.

클라이언트 상태 디자인에 대한 다른 접근 방식은 가이드라인: J2EE 응용프로그램의 상태 디자인에서 설명합니다.

세션 Facade 패턴

세션 Bean은 보통 비즈니스 층의 오브젝트 간에 상호 작용을 캡슐화하는 Facade로 사용됩니다. 세션 Bean은 더 간단한 클라이언트 인터페이스를 제공하여 이 복잡도를 추상화합니다. 이 패턴은 J2EE 패턴 - 세션 Facade 패턴([ALU01])에서 자세히 설명됩니다.

예를 들어, 내부 엔티티 Bean 로직을 풀아웃하여 세션 Bean으로 이동시켜 엔티티 Bean 간의 결합을 최소화하는 것이 좋은 실례입니다. 세션 Bean Facade에서 원격 클라이언트에 대한 액세스를 제공하므로 로컬 인터페이스를 통해 엔티티 Bean에 액세스할 수 있습니다. 이러한 접근 방식은 여러 개의 밀접하게 관련된 엔티티 Bean이 있을 때 가장 효과적입니다.

웹 서비스 종료점

이전에 표시된 것처럼, stateless 세션 Bean은 웹 서비스를 구현하는 데 사용됩니다. 그러한 Bean을 서비스 구현 Bean이라고 하며 다음 요구사항을 위해 필요합니다.

  • 기본 공용 생성자가 있어야 합니다.
  • 서비스 엔드포인트 인터페이스에서 선언된 모든 메소드를 구현하고 관련 비즈니스 메소드가 public이어야 하며 final 또는 static이면 안됩니다.
  • stateless이어야 합니다.
  • 클래스가 public이어야 하지만, final 또는 abstract이면 안됩니다.

세션 Bean을 사용한 웹 서비스 구현에 대한 자세한 정보는 EJB 2.1JSR 109 스펙을 참조하십시오.