애플리케이션을 WebSphere "버전 특정" setRollbackOnly 동작으로 변경
post-EJB 3.0 애플리케이션이 pre-EJB 3.0 동작을 나타낼 수 있게하고 pre-EJB 3.0 애플리케이션이 post-EJB 3.0 동작을 나타낼 수 있게 하려면 이 태스크를 사용하십시오. 이 프로세스 동작을 제공하는 이 태스크의 단계는 이 태스크에 대하여 섹션에 설명된 특정 처리 시나리오에 기반합니다.
이 태스크 정보
처리 시나리오: 이 태스크를 위한 기초는 다음 처리 시나리오입니다.
글로벌 트랜잭션을 시작하는 EJB 메소드가 호출됩니다. 이 메소드의 실행 내에서, 동일한 트랜잭션 내에서 실행을 계속 하도록 다른 EJB 메소드가 호출됩니다. 이 메소드의 실행 동안, setRollbackOnly() 메소드가 호출됩니다. 이 시나리오가 마주칠 때의 EJB 컨테이너 동작이 EJB 스펙에 기술됩니다. 그러나, 이 동작은 EJB 3.0 지원을 위해 WebSphere® Application Server의 변경을 필요로 했습니다.
JSR 220의 섹션 13.6.2.8: 이전 버전의 EJB 스펙 뿐만 아니라, Enterprise JavaBeans™,Version 3.0 EJB Core Contracts 및 Requirements 문서는 다음을 나타냅니다.
"비즈니스 메소도를 인스턴스로 디스패치하기 전에 컨테이너가 트랜잭션을 즉시 시작한 경우(호출자로부터 상송되는 트랜잭션과는 반대로), 컨테이너는 인스턴스가 setRollbackOnly 메소드를 호출했다는 것에 주의해야 합니다. 비즈니스 메소드 호출이 완료되면 컨테이너는 트랜잭션을 커미트하기 보다 롤백해야 합니다. 비즈니스 메소드가 정상적으로 또는 애플리케이션 예외와 함께 리턴된 경우, 컨테이너는 롤백을 수행한 후 메소드 결과 또는 애플리케이션 예외를 클라이언트에게 전달해야 합니다. " 또한, 섹션 14.3.11 상태: "그러나, 컨테이너는 javax.ejb.EJBException 또는 java.rmi.RemoteException, 또는 인스턴스가 EJBContext 오브젝트의 setRollbackOnly 메소드를 호출했기 때문에 컨테이너가 트랜잭션 롤백을 수행한 경우, 예외 처리하지 않아야 합니다. 이 경우, 컨테이너는 트랜잭션을 롤백하여 비즈니스 메소드 결과 또는 비즈니스 메소드에 의해 예외 처리된 애플리케이션 예외를 클라이언트로 전달해야 합니다."
예전에, WebSphere Application Server은 스펙의 선행 섹션이 트랜잭션을 시작했던 메소드 내에서 트랜잭션이 RollbackOnly로 표시된 경우에 setRollbackOnly 작동이 적용되어야 한다고 해석했습니다. 그러나, EJB 3.0용 Compatibility Test Suite 스펙은 트랜잭션을 시작했던 메소드 내에서(또는, 원래 EJB 메소드로부터 호출되었던 동일한 트랜잭션 내의 다른 메소드 내에서) 트랜잭션이 RollbackOnly로 표시되었는지 여부에 관계 없이, RollbackOnly로 표시된 트랜잭션은 주어진 setRollbackOnly 동작을 나타내야 한다고 요구합니다.
- 애플리케이션은 컨테이너 관리 트랜잭션 지원 TX_REQUIRED와 함께 EJB A에서 메소드 art를 호출합니다.
- 컨테이너는 트랜잭션을 시작하고 메소드를 호출합니다.
- 메소드 A.art()는 컨테이너 관리 트랜잭션 지원 TX_REQUIRED와 함께 EJB B의 메소드 bob을 호출합니다.
- B.bob() 내에서, setRollbackOnly 메소드는 트랜잭션에서 호출된 다음, 완료합니다.
EJB 3.0 전의 동작: 트랜잭션이 B.bob() 메소드와 함께 시작되지 않기 때문에, TranactionRolledbackException은 A.art()로, 그리고 나서 클라이언트 애플리케이션으로 예외 처리됩니다.
EJB 3.0 이후에 도입된 동작: Method B.bob()은 일반적으로 메소드 A.art()로 리턴합니다. 메소드 A.art()는 트랜잭션에서 롤백을 수행하며, EJB 스펙에 나타난대로 클라이언트 애플리케이션으로 예외 처리 없이 결과를 클라이언트로 리턴합니다.
- com.ibm.websphere.ejbcontainer.limitSetRollbackOnlyBehaviorToInstanceFor : 이 특성은 사용자가 이 섹션의 위에 설명된 것처럼 EJB 3.0 모듈의 EJB가 pre-EJB 3.0 setRollbackOnly 동작을 나타내도록 애플리케이션 이름을 지정할 수 있게 해줍니다.
- com.ibm.websphere.ejbcontainer.limitSetRollbackOnlyBehaviorToInstanceFor : 이 특성은 사용자가 이 섹션의 위에 설명된 것처럼 pre-EJB 3.0 모듈의 EJB가 EJB 3.0 setRollbackOnly 동작을 나타내도록 애플리케이션 이름을 지정할 수 있게 해줍니다.