kr.co.hit.live.transaction
Class XASession

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

public class XASession
extends Object
implements XAResource

XASession은 하나의 global transaction branch를 관리하는 객체이다. XASession 은 내부에 하나의 XAConnection과 여기서 얻어진 XAResourceConnection 객체를 가지며 이것을 통하여 하나의 Branch Transaction을 관리한다.
XASession은 다른 XASession이 join하는 기능은 제공하지 않으므로 하나의 Branch Transaction과 XASession은 1:1의 관계를 갖는다. 즉, 새로운 Transaction branch가 생성되면 이를 관리하기 위한 XASession 객체를 새로 생성해야 한다.

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

Field Summary
static int STATE_ACTIVE
           트랜젝션이 진행 중이다.
static int STATE_CLOSED
           현재 초기화되지 않았거나, 사용이 완전히 종료된 상태이다.
static int STATE_ENDED
           트렌젝션이 정상적으로 종료된 상태를 나타낸다.
static int STATE_FAILED
           트렌젝션이 실패로 종료된 상태를 나타낸다.
static int STATE_INACTIVE
           트랜젝션에 연계되지 않은 상태를 나타낸다.
static int STATE_PREPARED
           트랜젝션이 prepare 된 상태이다..
static int STATE_RDONLY
           트랜젝션이 read only로 prepare 된 상태이다.
static int STATE_SUSPENDED
           트랜젝션과의 연결을 일시적으로 중지한 상태이다.
 
Fields inherited from interface javax.transaction.xa.XAResource
TMENDRSCAN, TMFAIL, TMJOIN, TMNOFLAGS, TMONEPHASE, TMRESUME, TMSTARTRSCAN, TMSUCCESS, TMSUSPEND, XA_OK, XA_RDONLY
 
Constructor Summary
XASession(String dsn, XAConnection xaconn)
           생성자이다.
 
Method Summary
 void close()
           XASession을 종료한다.
 void closeConnection(Connection con)
           이 XAsession에서 얻어온 Connection객체를 close 한다.
 void commit(boolean onePhase)
           내부에 저장하고 있는 현재 진행 중인 트랜젝션 아이디(brXid)를 사용하여 commit()를 호출한다.
 void commit(Xid xid, boolean onePhase)
           javax.transaction.xa.XAResourcecommit()의 구현이다.
 void end(int flags)
           내부에 저장하고 있는 현재 진행 중인 트랜젝션 아이디(brXid)를 사용하여 end()를 호출한다.
 void end(Xid xid, int flags)
           javax.transaction.xa.XAResourceend()의 구현이다.
 void endFail()
           현재 진핸 중인 트랜젝션과 연결을 실패 상태로 종료한다.
 void endSuccess()
           현재 진핸 중인 트랜젝션과 연결을 정상 종료한다.
 void forget(Xid xid)
           javax.transaction.xa.XAResourceforget()의 구현이다.
 Connection getConnection()
           XASession과 연결된 Connection를 참조하는 Connection 객체를 리턴한다.
 String getDataSourceName()
           XAConnection 객체를 생성한 DataSource의 이름을 리턴한다.
 int getState()
           현재 상태를 리턴한다.
 int getTransactionTimeout()
           javax.transaction.xa.XAResourcegetTransactionTimeout()의 구현이다.
 boolean hasEnded()
           end()가 이미 호출되어진 상태인지를 리턴한다.
 boolean hasSuspended()
           STATE_SUSPENDED 상태인지를 리턴한다.
 boolean isSameRM(XAResource xares)
           javax.transaction.xa.XAResourceisSameRM()의 구현이다.
 int prepare()
           내부에 저장하고 있는 현재 진행 중인 트랜젝션 아이디(brXid)를 사용하여 prepare()를 호출한다.
 int prepare(Xid xid)
           javax.transaction.xa.XAResourceprepare()의 구현이다.
 Xid[] recover(int flag)
           javax.transaction.xa.XAResourcerecover()의 구현이다.
 void rollback()
           내부에 저장하고 있는 현재 진행 중인 트랜젝션 아이디(brXid)를 사용하여 rollback()를 호출한다.
 void rollback(Xid xid)
           javax.transaction.xa.XAResourcerollback()의 구현이다.
 boolean setTransactionTimeout(int seconds)
           javax.transaction.xa.XAResourcesetTransactionTimeout()의 구현이다.
 void start(Xid xid)
           주어진 트랜젝션 아이디로 새로운 Transaction branch를 시작한다.
 void start(Xid xid, int flags)
           javax.transaction.xa.XAResourcestart()의 구현이다.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

STATE_CLOSED

public static final int STATE_CLOSED

현재 초기화되지 않았거나, 사용이 완전히 종료된 상태이다.

See Also:
Constant Field Values

STATE_INACTIVE

public static final int STATE_INACTIVE

트랜젝션에 연계되지 않은 상태를 나타낸다. 최초 생성된 상태, XAResource의 rollback()을 호출한 경우, STATE_ENDED 상태에서 commit(xid, true)를 호출한 경우(1-PC commit), 또는 STATE_PREPARED 상태에서 commit(xid, false)를 호출한 경우(2-PC commit) 이다.

See Also:
Constant Field Values

STATE_ACTIVE

public static final int STATE_ACTIVE

트랜젝션이 진행 중이다. STATE_INACTIVE 상태에서 XAResource의 start(xid, TMNOFLAGS) 또는 start(xid, TMJOIN)을 호출 한 경우, 또는 STATE_SUSPENDED 상태에서 XAResource의 start(xid, TMRESUME)를 호출한 경우이다. 여기에서 xid는 연결된 트랜젝션 아이디 값이다.

See Also:
Constant Field Values

STATE_SUSPENDED

public static final int STATE_SUSPENDED

트랜젝션과의 연결을 일시적으로 중지한 상태이다. STATE_ACTIVE 상태에서 XAResource의 end(xid, TMSUSPEND)를 호출한 경우이다. XASession에서는 트랜젝션의 suspend가 구현되지 않았으므로 실제로는 사용되지 않는 상태이다.

See Also:
Constant Field Values

STATE_ENDED

public static final int STATE_ENDED

트렌젝션이 정상적으로 종료된 상태를 나타낸다. 아직 commit이 된 것은 아니다. STATE_ACTIVE 또는 STATE_SUSPENDED 상태에서 XAResource의 end(xid, TMSUCCESS)를 호출한 경우이다.

See Also:
Constant Field Values

STATE_FAILED

public static final int STATE_FAILED

트렌젝션이 실패로 종료된 상태를 나타낸다. 아직 rollback이 된 것은 아니다. STATE_ACTIVE 또는 STATE_SUSPENDED 상태에서 XAResource의 end(xid, TMFAIL)를 호출한 경우이다.

See Also:
Constant Field Values

STATE_PREPARED

public static final int STATE_PREPARED

트랜젝션이 prepare 된 상태이다.. STATE_ENDED 상태에서 XAResource의 prepare(xid)를 호출한 결과 XA_OK가 리턴된 경우이다.

See Also:
Constant Field Values

STATE_RDONLY

public static final int STATE_RDONLY

트랜젝션이 read only로 prepare 된 상태이다. STATE_ENDED 상태에서 XAResource의 prepare(xid)를 호출한 결과 XA_RDONLY 가 리턴된 경우이다.

See Also:
Constant Field Values
Constructor Detail

XASession

public XASession(String dsn,
                 XAConnection xaconn)
          throws SQLException

생성자이다. XAConnection 객체와 이를 생성할 때 사용한 Datasource 명을 넘긴다. 상태는 STATE_INACTIVE가 된다.

Parameters:
dsn - xaconn 객체를 생성한 DataSource 명
xaconn - Transaction에 참여할 XAConnection 객체
Throws:
SQLException
Method Detail

getDataSourceName

public String getDataSourceName()

XAConnection 객체를 생성한 DataSource의 이름을 리턴한다.

Returns:
String Datasoruce 명

getState

public int getState()

현재 상태를 리턴한다.

Returns:
int 현재 XASession의 상태

hasEnded

public boolean hasEnded()

end()가 이미 호출되어진 상태인지를 리턴한다.

Returns:
boolean XASession.end()가 이전에 호출되었다면 true, 아니면 false

hasSuspended

public boolean hasSuspended()

STATE_SUSPENDED 상태인지를 리턴한다.

Returns:
boolean STATE_SUSPENDED 상태이면 true, 아니면 false

getConnection

public Connection getConnection()

XASession과 연결된 Connection를 참조하는 Connection 객체를 리턴한다.

Returns:
현재 XASession과 연결된 Connection 객체를 참조하는 Connection 객체
Throws:
IllegalStateException - 현재 상태가 STATE_ACTIVE가 아닌 경우

closeConnection

public void closeConnection(Connection con)
                     throws SQLException

이 XAsession에서 얻어온 Connection객체를 close 한다. 파라메터로 입력된 Connection 객체가 내부 Connection 객체와 다른 경우에는 그냥 리턴된다. XASession이 STATE_CLOSED 상태이고 더 이상 참조하는 Connection 없는 경우에는 내부 Connection 객체를 close 한다.

Throws:
SQLException - 실제 connection을 close() 시 오류가 발생했을 경우

close

public void close()
           throws SQLException

XASession을 종료한다. 상태는 STATE_INACTIVE에서 STATE_CLOSED 상태로 변경되고 내부 Connection 객체는 close 된다. 하지만, 아직 참조하는 Connection이 남아 있을 경우에는 실제 내부 Connection를 close 하지 않는다. STATE_CLOSED 상태가 되면 새로 transaction을 시작하거나 조인(join) 할 수 없으며, closeConnection() 호출을 통하여 아직 사용 중인 Connection 객체의 close 만 가능하다.

Throws:
SQLException - Connection 객체 close()시 오류가 발생한 경우
IllegalStateException - 현재 상태가 STATE_INACTIVE가 아닐 경우

start

public void start(Xid xid)
           throws XAException

주어진 트랜젝션 아이디로 새로운 Transaction branch를 시작한다. TMNOFLAGS 로 start()를 호출한다.

Parameters:
xid - transaction branch의 Xid
Throws:
XAException - 트랜젝션 관련 에러 발생시

end

public void end(int flags)
         throws XAException

내부에 저장하고 있는 현재 진행 중인 트랜젝션 아이디(brXid)를 사용하여 end()를 호출한다.

Parameters:
flags - TMSUCCESS, TMFAIL, or TMSUSPEND
Throws:
XAException

endFail

public void endFail()
             throws XAException

현재 진핸 중인 트랜젝션과 연결을 실패 상태로 종료한다. 내부에 저장하고 있는 현재 진행 중인 트랜젝션 아이디(brXid)를 사용하여 end()를 TMFAIL flag 값으로 호출한다.

Throws:
XAException

endSuccess

public void endSuccess()
                throws XAException

현재 진핸 중인 트랜젝션과 연결을 정상 종료한다. 내부에 저장하고 있는 현재 진행 중인 트랜젝션 아이디(brXid)를 사용하여 end()를 TMSUCCESS flag 값으로 호출한다.

Throws:
XAException

rollback

public void rollback()
              throws XAException

내부에 저장하고 있는 현재 진행 중인 트랜젝션 아이디(brXid)를 사용하여 rollback()를 호출한다.

Throws:
XAException

commit

public void commit(boolean onePhase)
            throws XAException

내부에 저장하고 있는 현재 진행 중인 트랜젝션 아이디(brXid)를 사용하여 commit()를 호출한다.

Parameters:
onePhase - true 이면 1-phase commit을 실행, false 이면 2-phase commit 을 실행
Throws:
XAException

prepare

public int prepare()
            throws XAException

내부에 저장하고 있는 현재 진행 중인 트랜젝션 아이디(brXid)를 사용하여 prepare()를 호출한다.

Returns:
XA_OK 또는 XA_RDONLY
Throws:
IllegalStateException - prepare()를 실행할 수 없는 상태인 경우
XAException - prepare 중 트랜젝션 관련 오류가 발생한 경우

commit

public void commit(Xid xid,
                   boolean onePhase)
            throws XAException

javax.transaction.xa.XAResourcecommit()의 구현이다. 실제로는 내부 XAResource 객체의 commit()을 호출한다. commit() 후에는 XASession을 close() 한다.

Specified by:
commit in interface XAResource
Parameters:
onePhase - true 이면 1-phase commit을 실행, false 이면 2-phase commit 을 실행
Throws:
XAException

rollback

public void rollback(Xid xid)
              throws XAException

javax.transaction.xa.XAResourcerollback()의 구현이다. 실제로는 내부 XAResource 객체의 rollback()을 호출한다. rollback() 후에는 XASession을 close() 한다.

Specified by:
rollback in interface XAResource
Throws:
XAException

start

public void start(Xid xid,
                  int flags)
           throws XAException

javax.transaction.xa.XAResourcestart()의 구현이다. 실제로는 내부 XAResource 객체의 start()을 호출한다.

Specified by:
start in interface XAResource
Parameters:
xid - transaction branch의 Xid
flags - TMNOFLAGS, TMRESUME, TMJOIN
Throws:
XAException - 트랜젝션 관련 에러 발생시

end

public void end(Xid xid,
                int flags)
         throws XAException

javax.transaction.xa.XAResourceend()의 구현이다. 실제로는 내부 XAResource 객체의 end()을 호출함으로써 XAResource 객체를 통하여 연결되어 있는 transaction brach와의 관계를 끊는다.

Specified by:
end in interface XAResource
Parameters:
xid - 트랜젝션 아이디
flags - TMSUCCESS, TMFAIL, or TMSUSPEND
Throws:
IllegalStateException - end()를 실행할 수 없는 상태인 경우
XAException - 트랜젝션 관련 오류가 발생한 경우

forget

public void forget(Xid xid)
            throws XAException

javax.transaction.xa.XAResourceforget()의 구현이다. 실제로는 내부 XAResource 객체의 forget()을 호출한다. forget() 후에는 XASession을 close() 한다.

Specified by:
forget in interface XAResource
Parameters:
xid - 트랜젝션 아이디
Throws:
IllegalStateException - forget()를 실행할 수 없는 상태인 경우
XAException - 트랜젝션 관련 오류가 발생한 경우

prepare

public int prepare(Xid xid)
            throws XAException

javax.transaction.xa.XAResourceprepare()의 구현이다. 실제로는 내부 XAResource 객체의 prepare()을 호출한다. prepare() 호출 결과 XA_OK가 리턴되면 STATE_PREPARED 상태가 되고, XA_RDONLY가 리턴되면 STATE_RDONLY 상태가 된다.

Specified by:
prepare in interface XAResource
Parameters:
xid - 트랜젝션 아이디
Returns:
int XA_RDONLY 또는 XA_OK
Throws:
IllegalStateException - prepare()를 실행할 수 없는 상태인 경우
XAException - prepare 중 트랜젝션 관련 오류가 발생한 경우

recover

public Xid[] recover(int flag)
              throws XAException

javax.transaction.xa.XAResourcerecover()의 구현이다. 실제로는 내부 XAResource 객체의 recover()을 호출한다.

Specified by:
recover in interface XAResource
Returns:
연결된 DB에서 prepare되었거나 heuristic하게 완료된 transaction branch의 Xid 목록
Throws:
XAException

setTransactionTimeout

public boolean setTransactionTimeout(int seconds)
                              throws XAException

javax.transaction.xa.XAResourcesetTransactionTimeout()의 구현이다. 실제로는 내부 XAResource 객체의 setTransactionTimeout()을 호출한다.

Specified by:
setTransactionTimeout in interface XAResource
Throws:
XAException

getTransactionTimeout

public int getTransactionTimeout()
                          throws XAException

javax.transaction.xa.XAResourcegetTransactionTimeout()의 구현이다. 실제로는 내부 XAResource 객체의 getTransactionTimeout()을 호출한다.

Specified by:
getTransactionTimeout in interface XAResource
Throws:
XAException

isSameRM

public boolean isSameRM(XAResource xares)
                 throws XAException

javax.transaction.xa.XAResourceisSameRM()의 구현이다. 실제로는 내부 XAResource 객체의 isSameRM()을 호출한다.

Specified by:
isSameRM in interface XAResource
Throws:
XAException


Copyright © 2014. All Rights Reserved.