1.6. 트랜잭션 및 스레드 간 관계
트랜잭션 처리를 이해하려면 트랜잭션과 스레드 간의 기본 관계를 이해하는 것이 중요합니다: 트랜잭션이 스레드에 따라 다릅니다. 즉, 트랜잭션이 시작되면 특정 스레드에 연결됩니다. (기술적으로 트랜잭션 컨텍스트 오브젝트가 생성되고 현재 스레드와 연결됩니다). 트랜잭션이 종료될 때까지 스레드의 모든 활동이 이 트랜잭션 범위 내에서 수행됩니다.From this point until the transaction ends, all of the activity in the thread occurs within this transaction scope. 다른 스레드의 Activity는 이 트랜잭션의 범위 내에 속하지 않습니다. 그러나 다른 스레드의 활성은 다른 트랜잭션의 범위 내에 있을 수 있습니다.
이러한 트랜잭션과 스레드 간의 관계는 다음을 의미합니다.
- 애플리케이션은 각 트랜잭션이 별도의 스레드에서 생성되는 한 동시에 여러 트랜잭션을 처리할 수 있습니다.
-
트랜잭션 내에 하위 스레드를 생성해야 합니다. 트랜잭션 중간에 있고
threads()
Camel DSL 명령을 호출하여 새 스레드 풀을 생성하는 경우 새 스레드는 원래 트랜잭션의 범위에 있지 않습니다. - 이전 시점에서 지정된 것과 동일한 이유로 새 스레드를 암시적으로 생성하는 처리 단계를 주의하십시오.
-
트랜잭션 범위는 일반적으로 라우팅 세그먼트 간에 확장되지 않습니다. 즉, 하나의 경로 세그먼트가
to(JoinEndpoint)
로 끝나고 다른 경로 세그먼트가(JoinEndpoint)에서
시작하는 경우 이러한 경로 세그먼트는 일반적으로 동일한 트랜잭션에 속하지 않습니다. 그러나 예외가 있습니다.
일부 고급 트랜잭션 관리자 구현에서는 트랜잭션 컨텍스트를 원하는 대로 스레드에 분리하고 연결할 수 있습니다. 예를 들어 한 스레드에서 다른 스레드로 트랜잭션 컨텍스트를 이동할 수 있습니다.For example, this makes it possible to move a transaction context from one thread to another thread. 경우에 따라 단일 트랜잭션 컨텍스트를 여러 스레드에 연결할 수도 있습니다.