8.11. 클러스터형 환경에서 자카르타 엔터프라이즈 빈 트랜잭션
클라이언트 코드가 클러스터형 Jakarta Enterprise Bean을 호출하면 클러스터 선호도가 자동으로 설정됩니다. 클라이언트 측에서 트랜잭션을 관리하는 경우 클러스터에서 특정 노드를 대상으로 하도록 선택하거나 클라이언트가 트랜잭션을 처리할 클러스터 노드를 지연적으로 선택할 수 있습니다. 이 섹션에서는 두 옵션에 대해 설명합니다.
Jakarta Enterprise Beans Transactions 특정 노드를 대상으로 합니다
다음 절차에 따라 클러스터의 특정 노드를 대상으로 트랜잭션을 처리할 수 있습니다.
InitialContext
를 생성할 때PROVIDER_URL
속성을 사용하여 대상 클러스터 노드 주소를 지정합니다.props.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080"); ... InitialContext ctx = new InitialContext(props);
클라이언트에서
InitialContext
에서txn:RemoteUserTransaction
을 조회합니다.UserTransaction ut = (UserTransaction)ctx.lookup("txn:RemoteUserTransaction");
PROVIDER_URL
속성을 서버의 URL로 설정한 다음 아래 코드 예와 같이txn:User
에 대한 Java 네이밍 및 디렉터리 인터페이스 조회를 수행할 수 있습니다.Transaction을 조회하여 User
Transactionfinal Hashtable<String, String> jndiProperties = new Hashtable<>(); jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory"); jndiProperties.put(Context.PROVIDER_URL, "remote+http://localhost:8080"); final Context context = new InitialContext(jndiProperties); SecuredEJBRemote reference = (SecuredEJBRemote) context.lookup("txn:UserTransaction");
UserTransaction
은 실제 호출이 수행될 때까지 특정 대상에 바인딩되지 않습니다. 호출 시 이UserTransaction
은 트랜잭션의 전체 수명 동안 해당 대상에 바인딩됩니다.UserTransaction
을 시작하기 전에 노드 이름이나 대상을 알 필요가 없습니다.org.jboss.ejb.client.EJBClient.getUserTransaction()
메서드는 첫 번째 호출에 따라 대상을 자동으로 선택하는 원격UserTransaction
을 제공합니다. Java 네이밍 및 디렉터리 인터페이스에서 원격UserTransaction
을 조회하는 방법도 동일한 방식으로 작동합니다.참고org.jboss.ejb.client.EJBClient.getUserTransaction()
메서드는 더 이상 사용되지 않습니다.- 트랜잭션이 시작되면 모든 Jakarta Enterprise Beans 호출이 트랜잭션 기간 동안 해당 특정 노드에 바인딩되어 서버 선호도를 설정합니다.
- 트랜잭션이 종료되면 서버 선호도가 릴리스되고 Jakarta Enterprise Beans 프록시는 일반 클러스터 선호도로 돌아갑니다.
Jakarta Enterprise Beans Transactions Lazily Select a Node
클라이언트에서 트랜잭션과 관련된 첫 번째 호출 중에 트랜잭션을 처리하도록 클러스터 노드를 지연적으로 선택할 수 있습니다. 이를 통해 클러스터 전체에서 트랜잭션의 부하를 분산할 수 있습니다. 이 옵션을 사용하려면 아래 절차를 따르십시오.
-
Jakarta Enterprise Bean을 호출하는 데 사용되는
InitialContext
에PROVIDER_URL
속성을 지정하지 마십시오. 클라이언트에서
InitialContext
에서txn:RemoteUserTransaction
을 조회합니다.UserTransaction ut = (UserTransaction)ctx.lookup("txn:RemoteUserTransaction");
- 트랜잭션이 시작되면 하나의 클러스터 노드가 자동으로 선택되어 서버 선호도를 설정하고 모든 Jakarta Enterprise Beans 호출이 트랜잭션 기간 동안 해당 특정 노드에 바인딩됩니다.
- 트랜잭션이 종료되면 서버 선호도가 릴리스되고 Jakarta Enterprise Beans 프록시는 일반 클러스터 선호도로 돌아갑니다.