저는 JTA를 이해하려고 노력 중이며 Bitronix를 트랜잭션 관리자로 선택하고 있습니다 (학습 및 이해를 위해서). 나는 Bitronix reference guide here 내부의 코드를보고 있으며 자신에게 궁금한 점이있다. JDBC (자체적으로 트랜잭션 (Connection
)를 롤백 할 수 있음)를 사용하고 있다면 왜 그런 코드를 작성하고 싶습니까? !?!Java EE : JTA를 직접 사용하는 이유는 무엇입니까?
이제 코드 스 니펫의 핵심은 기존 트랜잭션 데이터 저장소보다 Bitronix/JTA를 사용하는 방법을 간단히 보여 주지만 어쨌든 여전히 고유 한 이점을 얻지 못합니다. "당신이 사용하는 유일한 주 데이터 소스가 데이터베이스와 메시지 중개자이고 JDBC/JMS를 사용하여 각각 통신하고이 두 표준 (JDBC/JMS)을 사용하는 경우, 이미 트랜잭션 적이기 때문에 왜 JTA를 사용해야합니까?!?! "
JTA는 JDBC, JPA, JMS 등의"내부 "Java EE API 일종입니까? 그것으로 미친 짓을하고 싶은 1 % 놈들을 위해 공개적으로 노출 된 것일까 요? 아니면 JTA의 아이디어/적용 가능성을 놓치고 있습니까?
JTA를 직접 타격하기 위해 JDBC가 아닌 JMS와 JMS가 아닌 두 가지 사용 사례를 생각할 수는 있지만 JTA는 처음부터 퍼지기 때문에 이러한 경우가 오프 트랙인지 아닌지 전혀 알지 못합니다 :
- 아마도 응용 프로그램에 복잡한 I/O 시스템이 있고 디스크의 동일한 파일에서 읽고 쓰는 여러 스레드가있을 수 있습니다. 아마도 각 스레드가 트랜잭션을 사용하여이 파일에 쓸 수 있습니다. (예?!? 아니오!!?)
- 아마도 시스템의 상태를 나타내는 상태 시스템 POJO가 있으며 여러 스레드가 시스템을 수정할 수 있습니다. 아마도 각 스레드가 트랜잭션을 사용하여 시스템의 상태를 변경하게 할 수 있습니다.
내 질문의 루트 추측이다 (예 아니오?!?!?) : 내 JPA (최대 절전 모드) 및/또는 JDBC 호출이 이미 트랜잭션 경우
- , 왜 것 JTA begin-> commit/rollback 블록 안에 그들을 감싸고 싶습니까? JMS 및 메시징 시스템 용.
- JPA/JDBC/JMS 외에도 JTA를 사용하여 일련의 작업을 처리하는 유스 케이스는 무엇입니까?
미리 감사드립니다.
위대한 답변 주셔서 감사합니다 @ Justin (+1). 내가 인용하고있는 예제 (파일 읽기, 상태 조작 등)는 어떻게됩니까? 그 사람이 거래를 원할 때 (왜 또는 왜)? 그렇다면, 그들 자신을위한'XAResource'를 구현해야합니까? ** 현상금에 대해서도 뭔가 처리해야 할지를 결정할 때 사용할 지침 집합을 찾고 있습니다. ** 다시 한 번 감사드립니다! – IAmYourFaja
@AdamTannon +1에 감사드립니다! 나는 내 자신의 가이드 라인을 추가했다. 도움이되기를 바란다. – Justin
굉장하고 멋진 답변. 고맙습니다! – IAmYourFaja