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 %의 실패 사례.
음 ... 왜 하시겠습니까? – cletus
질문을 업데이트 한 이유는 다음과 같습니다. – artemb
Artem, 확장 된 지속성 컨텍스트 (세션 빈 수명주기에 바인딩되어 있으므로 설명하는 동작이 있음)를 사용하고있는 것으로 보이지만 트랜잭션 범위의 원할 경우 대신 http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/architecture.html#architecture-ejb-persistctxscope. – ChssPly76