2014-09-25 2 views
2

Stateful EJB를 사용할 때 클라이언트가 활성 세션을 가지고 있지 않으면 EJB가 연결된 사용자를 서버가 어떻게 알 수 있습니까? 이전에 stateless EJB를 사용했지만 stateful EJB를 사용하는 방법을 배우려고합니다. POJO 장바구니를 사용자 세션에서 속성으로 추가하는 대신 장바구니를 상태 저장 EJB로 구현하려고했습니다. 그러나 Stateful EJB가 HttpSession의 애트리뷰트로 명시 적으로 추가되지 않았기 때문에 서버가 클라이언트를 Stateful EJB와 어떻게 연관시킬 수 있습니까?상태 저장 EJB와 세션 속성

+0

더 읽을 @ SessionScoped'). 그것이 당신에게 어떤 인상을 주는가? –

+0

statefulful EJB에서 메소드를 실행하라는 요청을 내리면 statefulful EJB에서 동일한 Bean이 단일 클라이언트를 제공하므로 Statefulful EJB와 해당 클라이언트 간의 연결이 확실하지 않은 것으로 생각했습니다. – user1154644

+0

클라이언트가 조회를 수행 할 때 상태 기반 세션 bean이 작성됩니다. 조회에서 리턴 된 프록시에는 특정 Bean 인스턴스에 대한 일종의 참조/ID가 포함되어 있으므로 클라이언트가 프록시에서 후속 호출을 수행 할 때 특정 Bean 인스턴스에 다시 연결됩니다. –

답변

1

기술적으로 에 클라이언트의 JSESSION_ID에 대한 액세스 권한이 필요하지 않습니다. 기본 클라이언트와 마찬가지로 클라이언트가 살아있는 동안 살아 있고 사용할 수 있기 때문입니다. 호출 클라이언트가 파괴되거나 그렇지 않으면 SFSB의 제어를 포기되면, 빈 상태가 유지됩니다 the Oracle JavaEE-6 tutorial

에서

(대화를 "잊지"따라서 등) 부동 태화 또는 파괴 될 우려가있다 클라이언트/빈 세션의 기간. 클라이언트가 빈을 제거하면 세션이 종료되고 상태가 사라집니다.. 클라이언트와 끝 콩의 대화, 당신은 잡아 같은 방법으로 상태를 유지 그것의

생각할 필요가없는 경우 때문에 국가의이 과도 특성은, 그러나 문제, 되지 않습니다 has-a 관계에있는 일반적인 자바 객체의 : 일단 당신이 구성된 객체를 null로 설정하면, 당신은 기본적으로 그 객체와 대화를 끝냈다. 여기도 마찬가지입니다 (일종의). 클라이언트가 특정 세션 정보를 EJB에 전달할 필요가 없습니다. EJB의 일반적인 라이프 사이클과 주석 (특히 @Remove)은 다른 모든 것을 처리합니다.

SFSB에 대한주의 사항 : 헤비급이며 SLSB보다 오래 지속됩니다. 본격적인 EJB의 덫을 정말로 필요로하지 않는다면 사용하지 마십시오. 대부분의 경우 일반 HttpSession과 SLSB로 충분합니다. 이 Inject`과 상태 유지 세션 빈은 @ (또는``사용하고 추가되어 있지 않은 경우 서버는 세션에 클라이언트를 연결할 수 없습니다

+0

주의가 반드시 필요한 것은 아닙니다. 보일러 플레이트 코드 및 SLSB에 의해 유발 된 빈혈 모델을 피하기 위해 앱을 확장 할 수있는 SFSB와 함께 작동하는 패턴이 있습니다. 오라클의 의사는 실제로 많은 * 사용자가 없으면 SLSB를 과용하지 말라고 말합니다. – Sergio