JMS 애플리케이션의 트랜잭션 세션
JMS 애플리케이션은 먼저 트랜잭션된 세션을 작성하여 로컬 트랜잭션을 실행할 수 있습니다. 애플리케이션은 트랜잭션을 커미트하거나 롤백할 수 있습니다.
JMS 애플리케이션은 로컬 트랜잭션을 실행할 수 있습니다. 로컬 트랜잭션은 애플리케이션이 연결된 큐 관리자의 자원에 대한 변경사항만 포함되는 트랜잭션입니다. 로컬 트랜잭션을 실행하기 위해, 애플리케이션은 우선 세션이 트랜잭션된 매개변수로서 지정하여 Connection 오브젝트의 createSession() 메소드를 호출하여 트랜잭션 세션을 작성해야 합니다. 결과적으로, 세션 내에서 송신 및 수신된 모든 메시지는 트랜잭션의 시퀀스로 그룹화됩니다. 트랜잭션이 시작된 이후에 송신하거나 수신한 메시지를 애플리케이션이 커미트하거나 롤백하면 트랜잭션이 종료됩니다.
트랜잭션을 커미트하기 위해 애플리케이션은 Session 오브젝트의 commit() 메소드를 호출합니다. 트랜잭션이 커미트되는 경우, 트랜잭션 내에서 송신된 모든 메시지가 다른 애플리케이션에 전달하기 위해 사용 가능하며 트랜잭션 내에서 수신된 모든 메시지가 수신확인되므로 메시징 서버는 이를 다시 애플리케이션에 전달하려고 시도하지 않습니다. 포인트-투-포인트 도메인에서, 메시징 서버는 해당 큐에서 수신된 메시지도 제거합니다.
트랜잭션을 롤백하기 위해 애플리케이션은 Session 오브젝트의 rollback() 메소드를 호출합니다. 트랜잭션이 롤백되면 메시징 서버는 트랜잭션 내의 송신된 모든 메시지를 버리며, 트랜잭션 내의 수신된 모든 메시지가 다시 전달을 위해 사용 가능합니다. 포인트-투-포인트 도메인에서, 수신된 메시지는 해당 큐에 다시 놓이며 다시 기타 애플리케이션에서 이를 볼 수 있습니다.
애플리케이션이 트랜잭션 세션을 작성하거나 commit() 또는 rollback() 메소드를 호출하면 새 트랜잭션이 자동으로 시작됩니다. 따라서 트랜잭션 세션에는 항상 활성 트랜잭션이 있습니다.
애플리케이션이 트랜잭션 세션을 닫으면 암시적 롤백이 발생합니다. 애플리케이션이 연결을 닫으면 모든 연결의 트랜잭트 세션에 대해 암시적 롤백이 발생합니다.
연결을 닫지 않고 애플리케이션이 종료되면 모든 연결의 트랜잭션 세션에 대해 암시적 롤백도 발생합니다.
트랜잭션은 전적으로 트랜잭션 세션 내에 포함됩니다. 트랜잭션은 세션 간에 걸칠 수 없습니다. 이는 애플리케이션이 두 개 이상의 트랜잭션 세션에서 메시지를 송신하고 수신한 후에 이 모든 조치를 단일 트랜잭션으로 커미트하거나 롤백할 수 없음을 의미합니다.