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. 경우에 따라 단일 트랜잭션 컨텍스트를 여러 스레드에 연결할 수도 있습니다.