1. 미들웨어이야기/05. 상용미들웨어

WebLogic JEUS 간 Global Transaction

OSSW(Open Source System SoftWare 2009. 6. 16. 10:48

1 Transaction
1.1 JEUS Interposed Transaction Manager 기능
WebLogic Transaction Manager에 JEUS Transaction Manager를 XAResource 로 등록하여, WebLogic에서 JEUS의 Transaction Manager를 XAResource로 사용할 수 있는 기능이 추가 되었다.
이렇게 Transaction Manager를 XAResource로 사용할 수 있도록 한 것을 Interposed Transaction Manager라고 한다.
사용 방법은 다음과 같다.
WebLogic의 Transaction 관련해서 import 받는 WebLogic 클래스는 다음과 같다.
...
import WebLogic.transaction.TxHelper;
import WebLogic.transaction.TransactionManager;
import WebLogic.transaction.TransactionHelper;
...

1. XAResource 등록
먼저, WebLogic 의 startup class 등을 사용해서 JEUS Transaction Manager를 XAResource 에 등록한다.
반드시 startup class 에 등록할 필요는 없지만 WebLogic Transaction Manager 의 Transaction을 시작하기 전에, JEUS Interposed Transaction Manager를 WebLogic 의 XAResource 에 등록해야 한다.
다음과 같이 한다.
TransactionManager tm = TxHelper.getTransactionManager();
jeus.transaction.client.InterposedTransactionManager xar1 = new jeus.transaction.client.InterposedTransactionManager();
tm.registerResource("jeusTx", xar1); // jeusTx는 아무 이름이나 사용 가능


2. XAResource의 enlist/delist
WebLogic의 Transaction에서 다음 코드처럼 JEUS의 Interposed Transaction Manager를 enlist/delist해 준다.
...
utx.begin();
// enlist XAResource TransactionHelper.getTransactionHelper().getTransaction().enlistResource(xar1);
...
// Looks up EJB on JEUS and calls it.
initialcontext1 = new InitialContext(env);
home = initialcontext1.lookup(“...”);
home.create(“...”);
...
// delist XAResource TransactionHelper.getTransactionHelper().getTransaction().delistResource(xar1, XAResource.TMSUCCESS);
utx.commit();

3. XAResource 제거
더 이상 JEUS의 Interposed Transaction Manager를 사용하지 않는다면, WebLogic에서 XAResource를 등록 해제한다. 일반적으로 Shutdown Class 에서 제거해 준다.
TxHelper.getTransactionManager().unregisterResource("jeusTx");
반드시 제거해 줄 필요는 없지만, 해제해 주기를 권장한다.
참고로 tm.registerStaticResource("jeusTx", xar1); 을 사용하면 WebLogic이 모든 Transaction에 대해 자동으로 enlist, delist를 해주므로 application code에서 따로 해줄 필요가 없다 (recommend하는 사용법).
그외 사항은 WebLogic Programming JTA chapter 8장을 참고하기 바란다.

1.2 WebLogic의 Interposed Transaction Manager 사용법
WebLogic에서 JEUS의 Interposed Transaction Manager를 사용할 수 있듯이, JEUS에서도 WebLogic의 Interposed Transaction Manager를 사용할 수 있다.
다음 순서대로 사용한다.

1. WebLogic의 Interposed Transaction Manager 얻기
다음 예제처럼 WebLogic의 Interposed Transaction Manager를 얻어온다.
import jeus.transaction.*;
import weblogic.transaction.*;
...
UserTransaction ut;
Hashtable env;
XAResourceWrapper wlResource;
InterposedTransactionManager wlITM;
...
ut.begin // Begin transaction
...
env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
initialCtx = new InitialContext(env);
wlITM = TxHelper.getClientInterposedTransactionManager(initialCtx, "myserver");

2. WebLogic의 XAResource를 추출한다.
WebLogic의 Interposed Transaction으로부터 XAResource를 가져온다. 그리고, 이 XAResource를 jeus.transaction.XAResourceWrapper클래스로 Wrapping한다.
wlResource = new XAResourceWrapper(wlITM.getXAResource());