일부 컨테이너 트랜잭션
설정을 모든 엔터프라이즈 Bean에 사용할 수 있는 것은 아닙니다. 또한 특정 트랜잭션
설정 및 Bean에서 일부 메소드를 사용할 수 없습니다. 이러한 규칙은
EJB 1.1 및 EJB 2.x 스펙에 따라 컨테이너 트랜잭션 추가 마법사에서
구현되었습니다. 엔터프라이즈 Bean에 컨테이너 트랜잭션을 추가합니다.
프로시저
Java™ EE 퍼스펙티브의 엔터프라이즈 탐색기 보기에서
EJB 프로젝트의 배치 디스크립터를 마우스 오른쪽 단추로 클릭하고 연결
프로그램 > 배치 디스크립터 편집기를 선택하여 배치 디스크립터 편집기를 여십시오.
편집기의 어셈블리 페이지에 있는
컨테이너 트랜잭션 섹션에서 추가를 클릭하십시오.
찾은 Bean 목록에서 하나 이상의 엔터프라이즈 Bean을
선택하고 다음을 클릭하십시오.
드롭 다운 목록에서 다음 선택사항 중 컨테이너 트랜잭션 유형을
선택하십시오.
NotSupported - 트랜잭션 컨텍스트 없이
Bean 메소드를 호출하도록 컨테이너에 지시합니다. 클라이언트가
트랜잭션 컨텍스트에서 Bean 메소드를 호출하는 경우 컨테이너는
엔터프라이즈 Bean 인스턴스에서 메소드를 호출하기 전에
트랜잭션과 현재 스레드의 연관을 일시중단합니다. 그런 다음 컨테이너는
메소드 호출이 리턴되면 일시중단된 연관을
재개합니다. 일시중단된 트랜잭션 컨텍스트는 이 Bean 메소드에서
사용하는 엔터프라이즈 Bean 오브젝트 또는 자원으로 전달되지 않습니다.
Supports - 클라이언트가 트랜잭션에서
Bean 메소드를 호출하면 트랜잭션 컨텍스트에서 Bean 메소드를
호출하도록 컨테이너에 지시합니다. 클라이언트가 트랜잭션 컨텍스트
없이 Bean 메소드를 호출하면 컨테이너는 트랜잭션 컨텍스트 없이
Bean 메소드를 호출합니다. 트랜잭션 컨텍스트가 이 Bean 메소드에서
사용하는 엔터프라이즈 Bean 오브젝트 또는 자원으로
전달됩니다.
Required - 트랜잭션 컨텍스트에서
Bean 메소드를 호출하도록 컨테이너에 지시합니다. 클라이언트가
트랜잭션 컨텍스트에서 Bean 메소드를 호출하면 컨테이너는
클라이언트 트랜잭션 컨텍스트에서 Bean 메소드를 호출합니다. 클라이언트가
트랜잭션 컨텍스트 외부에서 Bean 메소드를 호출하면 컨테이너는
새 트랜잭션 컨텍스트를 작성하고 이 컨텍스트에서 Bean 메소드를
호출합니다. 트랜잭션 컨텍스트가 이 Bean 메소드에서 사용하는
엔터프라이즈 Bean 오브젝트 또는 자원으로 전달됩니다.
RequiresNew - 클라이언트가 트랜잭션
컨텍스트 내부 또는 외부에서 메소드를 호출하는지 여부에 관계없이
항상 새 트랜잭션 컨텍스트에서 Bean 메소드를 호출하도록 컨테이너에
지시합니다. 트랜잭션 컨텍스트가 이 Bean 메소드에서 사용하는
엔터프라이즈 Bean 오브젝트 또는 자원으로 전달됩니다.
Mandatory - 클라이언트와 연관된
트랜잭션 컨텍스트에서 항상 Bean 메소드를 호출하도록
컨테이너에 지시합니다. 클라이언트가 트랜잭션 컨텍스트 없이 Bean 메소드를
호출하려고 하면 컨테이너는 클라이언트로 javax.jts.TransactiononRequiredException
예외를 처리합니다. 엔터프라이즈 Bean 메소드에서 액세스한 EJB 오브젝트
또는 자원으로 트랜잭션 컨텍스트가 전달됩니다. 이러한 엔티티 Bean에
액세스하는 EJB 클라이언트는 기존 트랜잭션에서 이 작업을 수행해야
합니다. 기타 엔터프라이즈 Bean의 경우 엔터프라이즈 Bean 또는
Bean 메소드는 Bean Managed 값을 구현하거나 Required 또는
Requires New 값을 사용해야 합니다. 비엔터프라이즈 Bean EJB 클라이언트의 경우
클라이언트는 javax.transaction.UserTransaction 인터페이스를 사용하여 트랜잭션을
호출해야 합니다.
Never - 트랜잭션 컨텍스트 없이 Bean 메소드를
호출하도록 컨테이너에 지시합니다. 클라이언트가 트랜잭션 컨텍스트에서
Bean 메소드를 호출하면 컨테이너는 java.rmi.RemoteException 예외를
처리합니다. 클라이언트가 트랜잭션 컨텍스트 외부에서
Bean 메소드를 호출하면 컨테이너는 Not Supported 트랜잭션 속성이
설정된 것과 동일한 방식으로 작동합니다.
클라이언트는 트랜잭션 컨텍스트 없이 메소드를 호출해야 합니다.