2010-06-30 3 views
6

JSF2 애플리케이션에서 View Session In Open Session에 대해 이야기하는 것이 합리적입니까? 내 응용 프로그램에는 모든 db 관련 항목 (DAO 계층이 있지만 지금은 중요하지 않음)을 수행하는 비즈니스 서비스 EJB를 호출하는 JSF2 Managed Bean이 있습니다.JSF2 : EJB가있는 뷰에서 열린 세션?

OSIV 패턴이 있으면 Managed Bean은 기본 세션이 열렸는지 확인해야합니다.

저는 JPA도 사용하고 있습니다.

답변

2

이론적으로 문제는 완전히 동일합니다. EntityManager의 범위를 열어 두지 않으면 EJB를 떠날 때 엔티티가 분리됩니다. (일반적으로 주제에 대한 훌륭한 글이 있습니다 : JPA implementation patterns: Lazy loading). blog post에서

내가 읽어

8) 열린 엔티티 관리자보기를 지원합니다.가 [...] EJB3에서, 당신의 기업이 거래와 콩 을 떠날 때 그것이 지속성 문맥으로부터 분리의 EntityManager, 을 범위 하고 더 이상 사실 ( 게으른 로딩에 의존하지 않을 수, JPA 사양하지 않습니다 당신이 와 EntityManager를 사용할 수 있습니다, 일부 공급 업체에 의존 예외가 물론) ... 슬로우 것 같은 상황에서 아마 을 동작을 지정 요 한 로 거래 및 지속성 컨텍스트를 잡고, 영속 컨텍스트 확장 너를 원해. 그러나이 기능은 만 SFSB에 사용할 수 있으며, DAO 클래스는 국적이없는 서비스의 일반적인 예입니다. 은 지속성 층으로 전화를 발신하기 때문에 또한 각 클라이언트에 대해 DAO bean 인스턴스를 전용으로 사용하는 경우 은 과장 될 수 있습니다.

그러나 실제로는 사실이 확실하지 않습니다. 필자가 이해 한대로 UserTransaction을 사용하는 서블릿 필터를 작성하여 (OSIV의 일반 필터처럼) 트랜잭션을 시작하고 커밋 할 수 있어야합니다. 그런 다음 EJB는 필터에서 시작된 트랜잭션에 참여하고 EntityManager은 열린 상태로 유지됩니다. 나는 그것을 테스트하지는 못했지만 내 제안은 시도해볼 것입니다.

+0

Caucho에는 설명 된 필터가 있습니다. http://wiki.caucho.com/TransactionFilter – cdmckay

관련 문제