EJB(Enterprise JavaBeans) 원격 인터페이스에 트랜잭션 전파가 지원되지 않음

Liberty는 EJB 원격 인터페이스에 아웃바운드 또는 인바운드 트랜잭션 전파를 지원하지 않습니다. 기본적으로 EJB Bean은 컨테이너 관리 방식이며 Required 트랜잭션 속성을 사용합니다. 따라서 container-transaction 특성을 지정하지 않는 기존 EJB 정의는 기본적으로 지원되지 않는 트랜잭션을 사용하도록 구성됩니다.

이 규칙을 통해서는 원격 비즈니스 또는 홈 인터페이스 사용을 표시하는 다음 EJB 어노테이션을 참조하는 Java 코드에 플래그를 지정합니다.

또한 이 규칙은 ejb-jar.xml 파일에서 다음 참조에 플래그를 지정합니다.

EJB 스펙에서는 아웃바운드 트랜잭션 전파를 지원하는 제품이 계속하여 널 트랜잭션 컨텍스트를 전송해야 합니다. 그러나 Required(기본값), Mandatory 또는 Supports 트랜잭션 속성을 사용하는 EJB 컴포넌트는 이 컨텍스트를 거부합니다. 클라이언트 또는 서버가 Liberty에 있는 경우 활성 글로벌 트랜잭션을 갖는 클라이언트는 기본 트랜잭션 속성을 사용하여 EJB Bean을 시작할 수 없습니다.

클라이언트가 EJB Bean을 시작할 수 있게 하려면 RequiresNew 또는 NotSupported 트랜잭션 속성을 사용하도록 EJB Bean을 변경하십시오. 이 속성을 통해 EJB Bean을 시작할 수 있어도 EJB Bean에서 수행하는 트랜잭션 작업은 클라이언트 트랜잭션의 파트로 커미트되지 않습니다.

동일한 JVM에서 실행되는 EJB 원격 인터페이스에 트랜잭션 전파가 지원되지만, 이는 애플리케이션 동작을 추가로 조사해서만 결정할 수 있습니다.

원격 EJB 인터페이스가 필요한지 확인하십시오.

종종 EJB 2.x Bean은 사용되지 않는 경우에도 ejb-jar.xml에 원격 인터페이스를 구성합니다. 서로 다른 두 개의 JVM에서 실행 중인 코드가 있으면 원격 인터페이스만 필요합니다. WebSphere 관점에서 두 개의 서로 다른 애플리케이션 서버 사이 또는 서로 다른 JVM에서 실행되는 클라이언트 애플리케이션과 애플리케이션 서버 사이입니다. EJB 검색에서 CORBA 정보(예: iiop:// 제공자 URL)도 원격 EJB Bean이 사용 중임을 나타냅니다.

원격 인터페이스를 사용하여 동일한 JVM에서 실행되는 EJB Bean을 참조하는 경우, 로컬 인터페이스를 사용할 수 있으며 성능이 향상됩니다. 가능한 경우 주석을 @Remote에서 @Local로, @RemoteHome에서 @LocalHome으로 변경하고 모든 코드 시나리오를 테스트하십시오. ejb-jar.xml 구성과 마찬가지로 <remote/><business-remote/> 정의를 제거하고 모든 시나리오를 테스트하십시오. 이 시나리오에서는 트랜잭션 전파가 지원되지만 우수 사례는 로컬 인터페이스를 사용하도록 변환하여 성능을 개선하고 동일한 JVM 에서 메소드를 외부적으로 호출할 수 있다는 인식을 제거하는 것입니다.

원격 인터페이스가 필요한 경우

웹 서비스에서 EJB bean 랩핑(JAX-WS)

원격 액세스가 필요한 EJB Bean의 경우 우수 사례는 웹 서비스에서 랩핑하는 것입니다. WebSphere Application Server Developer Tools for Eclipse를 사용하여 이와 같이 코드를 변경하는 데 관한 지침은 EJB bean에 어노테이션을 작성하여 웹 서버 작성을 참조하십시오. 웹 서비스에서 EJB bean을 랩핑한 다음 웹 서비스 클라이언트를 사용하여 EJB 웹 서비스를 호출하십시오. 테스트한 다음 EJB 원격 어노테이션 또는 구성을 제거할 수 있습니다.

트랜잭션 전파 처리
Liberty에서는 분산 글로벌 트랜잭션을 사용하는 WS-AT(Web Services Atomic Transaction)를 지원합니다. EJB가 웹 서비스로 배치된 경우 WS-AT를 사용하여 트랜잭션을 관리할 수 있습니다. 자세한 정보는 Web Services Atomic Transaction 개요를 참조하십시오.

관련 항목에 관한 자세한 정보는 다음을 참조하십시오.