2009-08-18 3 views
2

JBoss는 여러 요청에 대해 엔티티 관리자와 기본 하이버 네이트 세션을 재사용합니다. 어떤 경우 엔 엔티티의 상태가 em.find()을 사용하여 방금 가져온 경우일지도 모른다는 것을 증명하는 테스트를 수행했습니다.JBoss 4.2.3이 모든 요청에 ​​대해 최대 절전 모드의 세션 캐시를 강제로 해제하도록하는 방법은 무엇입니까?

이 동작을 사용하지 않도록 설정하고 사용 된 세션을 지우거나 제거하여 각 요청이 캐시를 통해 처리되도록하려면 어떻게해야합니까?

UPD : 여기

은 예시적인 경우이다.

HTTP 요청 1. 세션 빈은 엔티티 인스턴스 필드에 저장 파일을 작성합니다 "A"가 지속 된 엔티티가 세션 콩이를 조회 ID = 4

HTTP 요청 (2)를 얻을 1. 값으로 설정 엔티티 ID = 4 인 엔티티의 필드 "A"를 값 2로 설정하고 저장합니다.

HTTP 요청 3. 세션 bean은 ID가 4 인 엔티티를 찾고 필드 "A"를 확인합니다. 값이 1이면 한 가지 작업을 수행하고, 2 일 경우 다른 작업을 수행합니다.

요청 3의 EM이 요청 1과 동일 할 경우 바람직하지 않은 동작이 발생합니다. 나는 이것을 시험했고 약을 얻었다. 10 %의 실패 사례.

+0

음 ... 왜 하시겠습니까? – cletus

+0

질문을 업데이트 한 이유는 다음과 같습니다. – artemb

+1

Artem, 확장 된 지속성 컨텍스트 (세션 빈 수명주기에 바인딩되어 있으므로 설명하는 동작이 있음)를 사용하고있는 것으로 보이지만 트랜잭션 범위의 원할 경우 대신 http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/architecture.html#architecture-ejb-persistctxscope. – ChssPly76

답변

0

좋아, 알았어. JBoss가 올바르게 세션을 처리합니다. 테스트에 버그가있었습니다 =) 죄송합니다. 고맙습니다. 도움을 청합니다.

0

당신은 evictingObject 주위 Session에서 시도 했습니까?

+0

질문에 언급 한 목표를 달성하기 위해 언제 어떻게해야합니까? – artemb

관련 문제