세션 Bean, 서블릿 또는 애플리케이션 클라이언트 컴포넌트가
컴포넌트 관리 트랜잭션을 사용할 수 있게 설정하여 컨테이너가 트랜잭션을
관리하도록 허용하는 대신 직접 자체 트랜잭션을 관리할 수 있습니다.
이 태스크 정보
참고: 엔티티 Bean은 트랜잭션을 관리할 수 없습니다
(따라서 Bean 관리 트랜잭션을 사용할 수 없음).
세션 Bean, 서블릿 또는 애플리케이션 클라이언트 컴포넌트가
컴포넌트 관리 트랜잭션을 사용할 수 있게 하려면 다음 단계를 완료하십시오.
프로시저
- 세션 Bean의 경우, 트랜잭션 배치 속성 구성에 설명된 대로
컴포넌트 배치 디스크립터에서 트랜잭션 유형
속성을 Bean으로 설정하십시오.
- 애플리케이션 클라이언트 컴포넌트의 경우, 트랜잭션 배치 속성 구성에 설명된 대로
컴포넌트 배치 디스크립터에서 JTA 경계 설정 허용 속성을 설정하여
트랜잭션 경계 설정에 대한 지원을 사용 가능하게 하십시오.
- 컴포넌트 코드를 작성하여 동적으로 트랜잭션을 관리하십시오.
Stateful 세션 Bean의 경우 제공된 메소드를 완료하기 전에 이 메소드로 시작된
트랜잭션을 완료(즉, 커미트 또는 롤백)할 필요가 없습니다. 트랜잭션은 나중에 예를 들면,
동일한 메소드에 대한 후속 호출이나 심지어 다른 메소드 내에서 완료할 수 있습니다. 그러나, 동일한 메소드 호출 내에서 트랜잭션이 시작되고 완료되도록
애플리케이션을 구성하는 것이 일반적으로 선호되는데, 이는 애플리케이션 디버깅
및 유지보수를 단순화시키기 때문입니다.
다음 코드 추출은 트랜잭션 컨텍스트를 캡슐화하는 오브젝트를
확보하는 데 필요한 표준 코드를 표시하고 다음 단계를
포함합니다.
- java:comp/UserTransaction에서 검색을 호출하여
javax.transaction.UserTransaction 오브젝트를 작성하십시오.
- 필요한 경우 begin 및 commit와 같은 트랜잭션
메소드를 사용하여 트랜잭션 경계를 지정하는 데 UserTransaction
오브젝트를 사용하십시오. 애플리케이션 컴포넌트가 트랜잭션을 시작할 경우,
commit 메소드 또는 rollback 메소드를 호출하여
해당 트랜잭션을 반드시 완료해야 합니다.
. ..
import javax.transaction.*;
import javax.naming.InitialContext;
import javax.naming.NamingException;
...
public float doSomething(long arg1)throws NamingException {
InitialContext initCtx = new InitialContext();
UserTransaction userTran = (UserTransaction)initCtx.lookup(
"java:comp/UserTransaction");
...
//Use userTran object to call transaction methods
userTran.begin();
//Do transactional work
...
userTran.commit();
...
}
...
}