로컬 트랜잭션 포함
LTC(Local Transaction Containment)는 지정되지 않은 트랜잭션 컨텍스트에 애플리케이션 서버 작동을 정의하는 데 사용됩니다.
지정되지 않은 트랜잭션 컨텍스트는 Enterprise JavaBeans 스펙, 버전 2.0 이상에 정의됩니다. 예를 들어, 이 기술에 대해 스펙을 참조하십시오.
LTC는 0개 이상의 자원 관리자 로컬 트랜잭션(RMLT)에 액세스할 수 있는 제한된 작업 단위 범위입니다. LTC는 모든 RMLT가 완료되어야 하는 경계를 정의합니다. 완료되지 않은 RMLT는 정책에 따라 컨테이너에 의해 해결됩니다. 기본적으로 LTC는 Bean 인스턴스에 대해 로컬이며, 이 Bean이 동일한 컨테이너에서 관리되어도 LTC는 Bean 간에 공유되지 않습니다. LTC는 글로벌 트랜잭션 컨텍스트가 없어서 디스패치가 발생할 때마다 엔터프라이즈 애플리케이션 컴포넌트(예를 들어, 엔터프라이즈 Bean 또는 서블릿)에 대해 메소드를 디스패치하기 전에 컨테이너에 의해 시작됩니다. LTC는 애플리케이션 구성 LTC 경계(예를 들어, 메소드 디스패치 종료 시)에 따라 컨테이너에 의해 완료됩니다. LTC 지원에 대한 프로그램 인터페이스가 없으며, LTC는 컨테이너에서 독점적으로 관리됩니다. 애플리케이션 배치자는 애플리케이션 배치 디스크립터의 트랜잭션 속성을 사용하여 개별 애플리케이션 컴포넌트인 웹 애플리케이션 또는 EJB에 LTC를 구성합니다.
로컬 트랜잭션 포함(LTC)은 컨테이너 관리 트랜잭션을 사용하는 엔터프라이즈 Bean 및 웹 애플리케이션 컴포넌트를 포함한 여러 애플리케이션 컴포넌트에서 공유되도록 애플리케이션 컴포넌트의 배치 디스크립터 일부로 구성하여 이 컴포넌트가 글로벌 트랜잭션을 사용하지 않고도 연결을 공유하게 할 수 있습니다. 단일 자원 관리자를 애플리케이션 컴포넌트 간에 공유하면 성능이 개선되고 확장성이 증가하며 자원에 대한 잠금 경합은 감소합니다.
컨테이너 관리 트랜잭션을 사용하는 엔터프라이즈 Bean 및 웹 애플리케이션 컴포넌트를 포함한 여러 컴포넌트에서 LTC를 공유할 수 있습니다. 이 공유는 웹 컴포넌트 include() 호출을 자주 사용할 때처럼 스레드에 여러 다른 웹 모듈에서 LTC로 블록화된 여러 연결이 있을 수 있는 경우에 유용합니다. 이 상황에서 스레드가 연결이 사용 가능하기를 기다리기 시작할 때 로드 시 코드 교착 상태가 애플리케이션에 발생할 수 있습니다. 글로벌 트랜잭션을 사용하지 않고 이러한 문제점을 해결하려면 애플리케이션 컴포넌트가 각 컴포넌트의 배치 디스크립터에 공유 가능한 속성을 설정하여 LTC를 공유할 수 있도록 지정하십시오. 배치 디스크립터를 사용해야 하며 어노테이션이 사용된 경우에는 이 속성을 지정할 수 없습니다.
공유 가능 속성을 설정하면 확장된 배치 디스크립터 XML 파일에 다음 코드 행이 포함됩니다.
<local-transaction boundary="BEAN_METHOD" resolver="CONTAINER_AT_BOUNDARY"
unresolved-action="COMMIT" shareable="true"/>
완전한 공유 LTC의 이점을 얻으려면, 각 컴포넌트의 자원 참조 기본값이 공유 가능한 연결인지도 확인하십시오.

공유 가능한 LTC를 사용하는 애플리케이션은 공유 가능 LTC에 사용되는 자원 관리자 연결을 명시적으로 커미트하거나 롤백할 수 없습니다. 하지만 autoCommit 기능이 있는 연결을 사용할 수 있습니다. 이로 인해 각 컴포넌트의 연결 사용이 올바르게 캡슐화되며 한 컴포넌트가 연결을 공유하는 기타 컴포넌트의 작동을 가정하지 않아도 됩니다.
애플리케이션이 분석기 속성이 애플리케이션으로 설정되고 공유 가능 속성이 true로 설정된 LTC에서 자동 커미트가 아닌 작업을 시작하면 런타임 시 예외가 발생합니다. 예를 들어, JDBC 연결에서 자동 커미트가 아닌 작업은 setAutoCommit(false) 메소드를 사용하여 연결의 자동 커미트 옵션을 사용 불가능하게 한 후에 애플리케이션이 수행하는 작업입니다. Bean 관리 트랜잭션(BMT)을 사용하는 엔터프라이즈 Bean은 LTC 구성에 설정된 공유 가능 속성으로 어셈블할 수 없습니다.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
- 애플리케이션 컴포넌트 디스패치가 컨테이너 조정 없이 예를 들어, Stateless 세션 Bean create 메소드 또는 서블릿 개시 스레드에 대해 발생합니다.
- J2EE 1.2 웹 컴포넌트
- J2EE 1.2 BMT(Bean-Managed Transaction) 엔터프라이즈 Bean
로컬 트랜잭션 포함은 글로벌 트랜잭션과 동시에 존재할 수
없습니다. 애플리케이션 컴포넌트 디스패치가 글로벌 트랜잭션이 없는 상태에서
발생하는 경우 컨테이너는 항상 LTC를 설정합니다.
이 작동의 유일한 예외는
애플리케이션 컴포넌트 디스패치가 컨테이너 조정 없이 예를 들어, Stateless
세션 Bean create 메소드에 대해 발생하는 경우입니다.
ActivitySession 및 트랜잭션 컨텍스트에 대한 주제에 설명된 대로, 로컬 트랜잭션 포함은 시작된 엔터프라이즈 Bean 메소드보다 오래 존재하는 ActivitySessions 컨텍스트까지 그 범위가 될 수 있습니다.