애플리케이션을 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 스펙에 나타난대로 클라이언트 애플리케이션으로 예외 처리 없이 결과를 클라이언트로 리턴합니다.

이 처리는 이전 버전에서 EJB 3.0 이후로 마이그레이션된 애플리케이션의 동작에 있어 변경을 보여주기 때문에, 다음 JVM 시스템 특성을 사용하여 사용자 요구사항에 동작을 변경할 수 있습니다.
  • 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 동작을 나타내도록 애플리케이션 이름을 지정할 수 있게 해줍니다.
이 특성의 값은 원하는 동작을 나타낼 필요가 있는 애플리케이션 이름(appName1:appName2:appName3)으로 설정합니다.

프로시저

  1. 관리 콘솔을 여십시오.
  2. 서버를 선택하십시오.
  3. 서버 유형을 선택하십시오.
  4. WebSphere Application Server를 선택하십시오.
  5. 구성하려는 서버를 선택하십시오.
  6. 서버 인프라 아래에서, Java 및 프로세스 관리> 프로세스 정의를 선택하십시오.
  7. 추가 특성 아래에서, Java 가상 머신 > 사용자 정의 특성 > 새로 작성을 선택하십시오.
  8. 이름 입력 필드에, JVM 시스템 특성을 입력하십시오.

    com.ibm.websphere.ejbcontainer.limitSetRollbackOnlyBehaviorToInstanceFor

    or

    com.ibm.websphere.ejbcontainer.extendSetRollbackOnlyBehaviorBeyondInstanceFor

  9. 입력 필드에, (appName1:appName2:appName3....)을 입력하십시오. . . 동작이 적용될 애플리케이션의 이름입니다.
  10. 확인을 선택하십시오.
  11. 구성을 저장하십시오.
  12. 서버를 다시 시작하십시오.

주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_version_specific
파일 이름:tejb_version_specific.html