2011-01-30 2 views
12

@ManagedBean@SessionScoped인데 왜 @Stateful EJB를 사용할 수 있습니까? 이전에 장바구니를 사용하고 대화 상태를 유지하기 위해 사용했지만, 관리되는 빈은 사용자 세션 중에 보관되므로 상태를 저장할 수 있으므로 비즈니스 논리를 위해 SLSB를 호출하십시오. 그 맞습니까? 그렇다면 상태 저장 ejbs는 트랜잭션 등이 필요할 때와 같은 더 구체적인 애플리케이션을 위해 남아있을 것입니다.sessionscoped managed bean 대 stateful ejb

답변

13

매우 자주 stateless 세션 빈은 많은 비즈니스 문제에 사용될 수 있습니다.

Stateful은 반드시 원격 서버를 유지한다는 것을 의미하지는 않습니다. 물론 이것은 확실한 옵션 중 하나입니다. 원격 Swing 클라이언트는 먼저 상태 유지 세션 빈에 많은 데이터를 보내고 스텁을 유지 한 다음이 데이터에서 작동하는 명령을 전송할 수 있습니다. 이렇게하면 클라이언트가 매번 동일한 (많은 양의) 데이터를 전송하지 않아도됩니다.

원격 사용의 경우 웹 클라이언트 (브라우저)를 사용할 때 실제로 HTTP 세션의 사용을 미러링합니다. 가장 큰 차이점은 세션은 여기의 빈에 있고, HTTP 세션에서는 세션이 많은 빈들에 의해 공유 된 범위라는 것입니다. HTTP 세션은 쿠키를 기반으로하고 쿠키가 전체 브라우저의 도메인에 대해 전역이므로 HTTP 세션은 동일한 클라이언트 (예 : 탭 또는 창당)의 여러 세션을 직접 지원할 수 없습니다. 이것은 상태있는 세션 빈을 사용하면 간단합니다. 원격 EJB를 이야기

그러나

...

원격 스윙 클라이언트는 공통되지 않습니다.

질문에서 설명한 컨텍스트에서 일반적으로 로컬 EJB를 사용하며 HTTP 세션 (공유에주의하십시오!) 및 요즘 대부분의 상태를 뷰 범위 또는 대화 범위에 저장합니다.

마지막으로,이 시나리오에서 stateful 세션 bean을 사용할시기는 언제입니까?

하나의 중요한 사용 사례는 extended persistence contextJPA입니다. 일반적으로 트랜잭션 범위 엔티티 관리자를 사용하면 엔티티가 EJB 메소드 호출의 트랜잭션 경계를 넘을 때 엔티티가 분리됩니다. 사용자 상호 작용간에 엔티티를 (낙관적으로) 잠 그려면 바람직하지 않습니다. 자물쇠를 잃을거야.

확장 된 지속성 컨텍스트를 사용하면 상태 유지 세션 빈에 대한 호출에서 돌아올 때 엔티티는 계속 연결되고 잠금이 유효합니다. 이 기능은 미리보기 기능을 사용하여 미리보기를 마쳤을 때 다른 사람이 엔티티를 변경하지 않았 음을 확인하는 데 매우 유용합니다. 또는 실제로 장바구니에서 상품을 장바구니에서 다른 사람에게 판매 할 수 없다는 것을 확실히하려는 경우.

+0

매우 상세한 답변을 보내 주셔서 감사합니다. 나는 stateful beans의 사용이 아주 아주 특정한 것으로 축소되었다고 생각했다. – arg20

관련 문제