2011-10-02 2 views
0

저는 EJB 3.1을 처음 접했고 서버 측 문제를 해결하려고합니다. 아마도 누군가가 약간의 지침을 제공 할 수 있습니다.EJB 3.1 싱글 톤 빈을 다중 원격 상태 유지 세션 빈에 클라이언트로 사용

내 응용 프로그램에서 여러 사용자의 공유 상태를 나타내는 상태 시스템이 있습니다. 이 상태 기계를 Stateful Session Bean으로 모델링하려고합니다. 이 State Machine이 나타내는 사용자가 여러 명이므로 StateMachine의 실제 클라이언트 인 Singleton Session Bean을 소개했으며 모든 사용자가 Singleton Bean의 "Clients"가되었습니다. 응용 프로그램의 수명 내내 여러 StateMachines 수명주기를 할 때 내 문제가 발생합니다.

내 Singleton Bean ("Manager")이 클라이언트 요청을 처리하고 해당 StateMachine에 배포하고 싶습니다. 어떻게 해당 Stateful Bean의 특정 인스턴스에 액세스 할 수 있습니까? 추가 복잡성을 추가하려면이 StateMachine 빈을 원격으로 액세스하려고합니다 (로컬 인 경우 Manager의 구성원으로 이러한 인스턴스의 인스턴스를 만듭니다).

어쨌든, 나는 이것이 분명히 희망합니다. EJB 디자인의 근본적인 점을 놓치고있는 것처럼 느껴집니다. 그게 사실이라면 나에게 말할거야.

답변

1

A Sampling of EJB 3.1에 설명 된대로 여러 인스턴스간에 상태를 공유 할 수있는 기능을 제공하는 EJB 3.1에 싱글 톤이 도입되었습니다.

싱글 톤

은 EJB API에서의 오랜 누락 엔터프라이즈 빈 구성 요소 의 여러 인스턴스 사이 또는 응용 프로그램에 여러 엔터프라이즈 빈 구성 요소 간의 쉽게 공유 상태를 수있는 능력이었다. 대조적으로 대조적으로, Java EE 웹 응용 프로그램 프로그래밍 모델은 항상 이 ServletConfig 객체를 통해이 유형의 기능을 제공합니다. EJB 3.1에서이 생략은 싱글 톤이라고도하는 싱글 톤 빈의 도입으로 해결되었습니다.

싱글 톤은 특정 Java Virtual 머신 (JVM) *에서 응용 프로그램에 대해 한 번 인스턴스화 된 이 될 새로운 종류의 세션 빈입니다. 다음 코드 예제와 같이 싱글 톤이의 @Singleton 주석을 사용하여 정의 :

@Singleton 공용 클래스 PropertiesBean {

private Properties props; 
private int accessCount = 0; 

public String getProperty(String name) { ... } 

public int getAccessCount() { ... } 

}는 세션 빈의 또 다른 맛이기 때문에, 싱글은 을 할 수 stateless beans와 같은 로컬 및 원격 클라이언트 뷰를 정의하십시오. 클라이언트는 과 같은 방식으로 싱글 톤에 액세스합니다. 즉, EJB 참조를 통해 상태 비 저장 및 상태 저장 빈에 액세스합니다.

@EJB private PropertiesBean propsBean; 

을 ...

문자열 MSG = propsBean.getProperty ("hello.message"), 다음과 같은 예를 들어, 클라이언트는 단일 PropertiesBean 위를 액세스 할 여기에서 컨테이너는 동일한 JVM에서 모든 PropertiesBean 참조에 대한 모든 호출이 PropertiesBean의 동일한 인스턴스에 의해 처리되도록합니다. 기본적으로 컨테이너는 다른 구성 요소 유형과 동일한 스레딩 보증을 적용합니다.특히 하나의 호출이 하나의 특정 빈 인스턴스에 액세스하는 데 허용되는 시간은 입니다. 싱글 톤의 경우 동시 호출을 차단합니다. 그러나 이것은 단지 기본 동시성 동작입니다. 싱글 웍스 인스턴스에 대한보다 효율적인 동시 액세스를 허용하는 동시성 옵션이 추가로 있습니다.

이벤트를 사용하여 알림을 보내는 방법은 Java EE6 Events을 참조하십시오.

관련 문제