2011-01-11 2 views
0

현재 최대 절전 모드와 바람둥이 (JBoss 없음)를 사용하고 있으며 실제로 사용하고있는 트랜잭션 안전성 레벨이 명확하지 않은 최대 절전 모드 트랜잭션이 있습니다. 값을 읽고 얻은 다음 업데이트하십시오). 따라서 나는 더러운 읽기를 얻고 있을지도 모른다?최대 절전 모드 트랜잭션 안전성 (with, with JBoss)

그래서 더티 읽기가 필요한 트랜잭션을 연구하고 (1) 최대 절전 모드로 트랜잭션의 트랜잭션 안전 수준을 적절하게 제어하고 (2) 더티 읽기가 괜찮은 거래.

트랜잭션 안전 수준을 제어하기 위해 JBoss와 함께 Hibernate를 설치해야합니까? 그렇다면, 현재 J2EE API를 사용하기 위해 애플리케이션을 크게 변경하지 않고 이것을 수행하는 가장 쉬운 방법은 무엇입니까? 현재 기본 Hibernate API를 사용하고 있습니다. 또는 JBoss를 사용하지 않고 Hibernate로 JTA 제어를받을 수 있습니까?

앤디

답변

0

명시 적으로 em.getTransaction(). begin() 및 commit()으로 트랜잭션을 표시 하시겠습니까? 그렇다면, Hibernate는 트랜잭션 관리를 JDBC 드라이버에 위임 할 것이고, 당신은 다른 속성들 (드라이버 레벨과 격리 레벨과 같은 Hibernate 레벨 모두에서)로 구성 할 수있다.

그런 다음 응용 프로그램 서버를 사용하기로 결정하면 hibernate.transaction.factory_class 속성을 org.hibernate.transaction.JTATransactionFactory로 설정하면 Hibernate가 지침에 따라 트랜잭션을 조인/생성합니다 (em.getTransaction) .begin()/commit()).

JTA는 두 개 이상의 "트랜잭션 사용"구성 요소가있는 경우 특히 유용합니다. JTA는 전체 결과에 따라 이벤트 및 주문 커밋/롤백을 조정합니다. 예를 들어 데이터베이스에 무엇인가를 유지하고 전자 메일을 보내는 하나의 EJB 트랜잭션이있는 경우 두 동작 모두 트랜잭션 내부에있을 수 있으며 트랜잭션 중 하나라도 실패하면 롤백 할 수 있습니다. 그러나 데이터베이스 트랜잭션에서 에 관심이 있다면 실제로 JTA가 필요하지 않습니다.

마지막 질문에 답하십시오. JTA가 필요하지만 EE 응용 프로그램 서버를 사용하고 싶지 않은 경우 JOTM과 같은 독립형 JTA 공급자를 찾을 수 있습니다. 하지만 조심하십시오 : 다른 서비스에 대해 여러 개의 "독립형"공급자를 추가하는 경우에는 "집에서 만든 EE 서버"로 끝낼 수 있습니다. 좋은 점이 아닙니다 .-)

+0

최대 절전 모드를 사용하고 있습니다. 시작 및 커밋 . 그러나, 주된 관심사는 더티 읽기를 방지하는 것입니다. 그리고 read 빈에서 데이터를 변경 한 후에 session.flush()를 호출해야만 다른 트랜잭션이 이전 값을 읽지 못하게 될지 궁금합니다. 즉, 콩을 읽고 조건에 따라 값을 변경하며 데이터가 커밋되거나 롤백 될 때까지 동일한 콩을 읽는 다른 트랜잭션이 차단 될 것으로 기대하는 많은 트랜잭션이 있습니다. –

0

transaction isolation levels로 알려져 있으며, 아래 최대 절전 모드에서

hibernate.connection.isolation 그들을 구성하는 방법입니다 - 는 JDBC 트랜잭션 격리 수준을 설정은. 에 대해 java.sql.Connection을 확인하십시오. 그러나 대부분 데이터베이스는 모든 분리를 지원하지 않습니다. 레벨. 예. 1, 2, 4, 8