kr.co.hit.live.transaction
Class Transaction

java.lang.Object
  extended by kr.co.hit.live.transaction.Transaction
All Implemented Interfaces:
Transaction

public class Transaction
extends Object
implements Transaction

분산 트랜젝션을 구현한 Transaction의 구현 클래스이다. Transaction은 내부에 하나의 Session 객체와 XASession 객체의 ArrayList를 가지고 있다. SimpleDataSourcePooledDataSource

Since:
3.0
Version:
$Revision: 1.1 $ $Date: 2006/09/26 08:20:18 $
Author:
김형도

Constructor Summary
Transaction(TransactionManager otm)
           생성자이다.
 
Method Summary
 void commit()
           Global transaction을 commit 한다.
 boolean delistResource(XAResource res, int flag)
           주어진 리소스를 이 트랜젝션 객체에서 분리한다.
 boolean delistResource(XASession xasession, int flag)
           주어진 리소스를 이 트랜젝션 객체에서 분리한다.
 boolean enlistResource(XAResource res)
           주어진 리소스를 이 트랜젝션 객체에 연계시킨다.
 boolean enlistResource(XASession xasession)
           주어진 XASession 객체를 이 트랜젝션 객체에서 연결시킨다.
 Session getSession()
           트랜젝션의 Session 객체를 리턴한다.
 int getStatus()
           현재 Transaction의 상태를 리턴한다.
 XASession getXASession(String dsn)
           주어진 DataSource 명을 가진 XASession이 Branch Transaction용 XASession 리스트에 있는지 찾아서 리턴한다.
 XASession getXASession(XASession target)
           주어진 XASession이 현재 Branch Transaction용 XASession 목록에 있는지 찾아서 리턴한다.
 Xid getXid()
           현재 설정된 Global Transaction ID 를 리턴한다.
 void registerSynchronization(Synchronization sync)
           주어진 동기화 객체를 이 트랜젝션 객체에 등록한다.
 void rollback()
           Global transaction을 rollback 한다.
 void setRollbackOnly()
           현재 트랜젝션 상태를 rollback-only 상태로 설정한다.
 void setSession(Session s)
           Local transaction용 Session 객체를 트랜젝션에 연결하고 local transaction을 start 한다.
 void setTransactionTimeout(int sec)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Transaction

public Transaction(TransactionManager otm)

생성자이다. 트랜젝션 관리자인 TransactionManager 객체를 받아서 설정하고, 트랜젝션 관리자를 통하여 Global transaction ID를 생성하여 저장한다. 트랜젝션을 active 상태로 설정한다.

Parameters:
otm - 생성되는 Transaction을 관리하는 트랜젝션 관리자 객체
Method Detail

setTransactionTimeout

public void setTransactionTimeout(int sec)

getXid

public Xid getXid()

현재 설정된 Global Transaction ID 를 리턴한다.

Returns:
Xid 현재 설정된 Global Transaction ID

getSession

public Session getSession()

트랜젝션의 Session 객체를 리턴한다.

Returns:
Session 연결된 local transaction Session 객체

setSession

public void setSession(Session s)
                throws NotSupportedException

Local transaction용 Session 객체를 트랜젝션에 연결하고 local transaction을 start 한다. 이미 설정되어 있다면 NotSupportedException이 발생한다.

Parameters:
s - 트랜젝션에 연결할 Session 객체
Throws:
NotSupportedException - 이미 다른 Session 객체가 연결되어 있는 경우

getXASession

public XASession getXASession(String dsn)

주어진 DataSource 명을 가진 XASession이 Branch Transaction용 XASession 리스트에 있는지 찾아서 리턴한다. 없다면 null을 리턴한다.

Parameters:
dsn - 찾을 datasource 명
Returns:
XASession 주어진 datasource 명을 갖는 XASession 객체, 없으면 null

getXASession

public XASession getXASession(XASession target)

주어진 XASession이 현재 Branch Transaction용 XASession 목록에 있는지 찾아서 리턴한다. 없다면 null을 리턴한다.

Parameters:
target - 찾을 XASession 객체
Returns:
XASession 주어진 XASession 객체, 없으면 null

commit

public void commit()
            throws RollbackException,
                   HeuristicMixedException,
                   HeuristicRollbackException,
                   IllegalStateException,
                   SystemException

Global transaction을 commit 한다. 트랜젝션에 연결된 local transaction의 Session과 global transaction branch의 XASession들의 commit 이 실행되고 이들과의 연결관계는 모두 clear 된다.

Specified by:
commit in interface Transaction
Throws:
RollbackException - 트랜젝션이 commit되지 않고 rollback 되었다.
IllegalStateException - 트랜젝션이 ACTIVE 상태가 아니다.
HeuristicMixedException
HeuristicRollbackException
SystemException

rollback

public void rollback()
              throws SystemException,
                     IllegalStateException

Global transaction을 rollback 한다. 트랜젝션에 연결된 local transaction의 Session과 global transaction branch의 XASession들의 rollback 이 실행되고 이들과의 연결관계는 모두 clear 된다.

Specified by:
rollback in interface Transaction
Throws:
IllegalStateException - rollback 할 수 있는 상태가 아니다.
SystemException

getStatus

public int getStatus()

현재 Transaction의 상태를 리턴한다.

Specified by:
getStatus in interface Transaction
Returns:
현재 트랜젝션의 상태 값, javax.transaction.Status 를 참고

delistResource

public boolean delistResource(XAResource res,
                              int flag)
                       throws IllegalStateException,
                              SystemException

주어진 리소스를 이 트랜젝션 객체에서 분리한다. 트랜젝션 분리 중 오류가 발생하면 트랜젝션 상태를 STATUS_MARKED_ROLLBACK 상태로 변경한다. 입력된 XAResource 객체가 XASession 객체가 아니라면 Exception이 발생한다.

Specified by:
delistResource in interface Transaction
Throws:
IllegalStateException - 현재 트랜젝션이 STATUS_ACTIVE 또는 STATUS_MARKED_ROLLBACK 상태가 아닌 경우
SystemException - res가 XASession 객체가 아닌 경우

delistResource

public boolean delistResource(XASession xasession,
                              int flag)
                       throws IllegalStateException,
                              SystemException

주어진 리소스를 이 트랜젝션 객체에서 분리한다. 내부의 XASession 목록에서 입력된 XASession을 찾아서 그 객체를 현재 트랜젝션에서 분리한다. 이때 해당 XASession 객체가 목록에서 삭제되는 것은 아니다. 트랜젝션 분리 중 오류가 발생하면 트랜젝션 상태를 STATUS_MARKED_ROLLBACK 상태로 변경한다.

Parameters:
xasession - XASession 객체
flag - TMSUCCESS 또는 TMFAIL.(TMSUSPEND는 지원하지 않음)
Returns:
성공 또는 실패
Throws:
IllegalStateException - 현재 트랜젝션이 STATUS_ACTIVE 또는 STATUS_MARKED_ROLLBACK 상태가 아닌 경우
SystemException

enlistResource

public boolean enlistResource(XAResource res)
                       throws RollbackException,
                              IllegalStateException,
                              SystemException

주어진 리소스를 이 트랜젝션 객체에 연계시킨다. 입력된 XAResource 객체가 XASession 객체가 아니라면 Exception이 발생한다.

Specified by:
enlistResource in interface Transaction
Throws:
RollbackException
IllegalStateException
SystemException

enlistResource

public boolean enlistResource(XASession xasession)
                       throws RollbackException,
                              IllegalStateException,
                              SystemException

주어진 XASession 객체를 이 트랜젝션 객체에서 연결시킨다. 내부의 XASession 목록에서 입력된 XASession을 찾아서 그 객체가 없을 경우 목록에 추가하고 현재 트랜젝션의 branch Transaction용 Xid를 생성하여 그 Xid로 XASession을 start 한다.
주어진 XASession 객체가 이미 목록에 존재하고 그 상태가 SUSPENED 상태라면 다시 RESUME 한다. 트랜젝션 연결 중 오류가 발생하면 SystemException이 발생한다.

Parameters:
xasession - XASession 객체
Returns:
성공 또는 실패
Throws:
IllegalStateException - 현재 트랜젝션이 STATUS_ACTIVE 상태가 아닌 경우
SystemException - 트랜젝션 연결 중 오류가 발생, 최대 branch transaction 수를 초과 했을 경우
RollbackException

setRollbackOnly

public void setRollbackOnly()
                     throws IllegalStateException

현재 트랜젝션 상태를 rollback-only 상태로 설정한다. 이 상태로 설정된 후에 commit()을 하면 RollbackException이 발생된다.

Specified by:
setRollbackOnly in interface Transaction
Throws:
IllegalStateException - 현재 상태가 active 상태가 아닌 경우

registerSynchronization

public void registerSynchronization(Synchronization sync)
                             throws RollbackException,
                                    IllegalStateException

주어진 동기화 객체를 이 트랜젝션 객체에 등록한다. 트랜젝션 관리자는 commit을 진행하기 전에 등록된 동기화 객체의 beforCompletion()를 호출하고, 트랜젝션이 완료된 후에 등록된 동기화 객체의 afterCompletion()를 호출한다.

Specified by:
registerSynchronization in interface Transaction
Parameters:
sync - javax.transaction.Synchronization 객체
Throws:
RollbackException - 현재 트랜젝션 상태가 STATUS_MARKED_ROLLBACK 인 경우
IllegalStateException - 현재 트랜젝션 상태가 STATUS_ACTIVE 상태가 아닌 경우


Copyright © 2014. All Rights Reserved.