kr.co.hit.live.transaction
Class Session

java.lang.Object
  extended by kr.co.hit.live.transaction.Session

public class Session
extends Object

Session은 하나의 local transaction branch를 관리하는 객체이다. 즉 분산 트랜젝션이 아닌 하나의 Connection 객체를 통한 local transaction를 관리한다. 분산 트랜젝션의 global transaction branch를 관리하기 위해서는 XASession을 사용한다.

이 Session은 Global transaction을 관리하는 Transaction 객체 내에서 사용되는데, Transaction 하나의 local transaction과 다수의 global transaction branch를 가지고 있으며, 여기에서 local transaction을 관리하기 위하여 이 Session 객체를 사용한다.
Session 객체는 내부적으로 DB 연결을 위한 Connection 객체를 가지고 있는데, 이 Connection 객체는 같은 트랜젝션 안에서는 공유되는 구조로 구현되어 있다.
즉, 하나의 트랜젝션 내에서는 동일한 DataSource에서 여러번 getConnection()를 호출해도 같은 Connection 객체를 참조하는 논리적인 핸들인 Connection 객체가 리턴된다. 이 핸들 객체로 close()를 호출해도 실제적으로 내부 Connection객체의 close()가 호출되지는 않으며, 진행 중인 트랜젝션이 종료될 때, 즉 Transactioncommit()rollback()가 호출 될때 비로서 실제 내부 Connection 객체가 close()된다. 하지만 이때에도 아직 내부 Connection 객체를 참조하고 있는 핸들이 남아 있을 경우에는 실제적으로 close() 하지는 않으며 마지막 핸들 객체가 close()할 때에 실제로 close()한다.

트랜젝션에는 최대 하나의 Session 만이 있을 수 있으므로, 만약에 이미 Session 객체가 이미 설정되어 있는 상태에서 datasource 명이 다른 DataSource를 사용하여 getConnection()가 호출 될 경우에는 javax.transaction.NotSupportedException가 발생된다.

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_INACTIVE
          트랜젝션에 연계되지 않은 상태를 나타낸다.
 
Constructor Summary
Session(String dsn, Connection con)
           생성자이다. datasource 명과 Connection 객체를 받아서 내부 변수로 저장해 놓는다.
 
Method Summary
 void close()
           Session을 종료한다.
 void closeConnection(Connection con)
           이 세션에서 얻어온 Connection객체를 close 한다.
 void commit()
           세션이 관리하는 local transaction의 commit을 수행한다.
 Connection getConnection(String dsn)
           세션과 연결된 Connection를 참조하는 Connection 객체를 리턴한다.
 String getDataSourceName()
           Connection 객체를 생성한 DataSource의 이름을 리턴한다.
 void rollback()
           세션이 관리하는 local transaction의 rollback을 수행한다.
 void start()
           Session을 Active 상태로 변경한다.
 
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
트랜젝션에 연계되지 않은 상태를 나타낸다. ACTIVE 상태에서 commit() 또는 rollback()을 호출한 경우이다.

See Also:
Constant Field Values

STATE_ACTIVE

public static final int STATE_ACTIVE
로칼 트렌젝션에 연계되어 트랜젝션이 진행 중이다. Inactive 상태에서 start() 가 호출된 경우이다.

See Also:
Constant Field Values
Constructor Detail

Session

public Session(String dsn,
               Connection con)

생성자이다. datasource 명과 Connection 객체를 받아서 내부 변수로 저장해 놓는다. 상태는 STATE_INACTIVE 상태가 된다.

Parameters:
dsn - Connection 객체 생성시 사용된 Datasource 명
con - Connection 객체
Method Detail

getDataSourceName

public String getDataSourceName()

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

Returns:
String Datasoruce 명

getConnection

public Connection getConnection(String dsn)
                         throws NotSupportedException

세션과 연결된 Connection를 참조하는 Connection 객체를 리턴한다. 최초에 정의된 Connection가 다른 Datasource 명으로 요청하면 NotSupportedException을 발생한다. 종료된 Session으로 요청하면 null이 리턴된다.

Parameters:
dsn - datasource 명
Returns:
현재 세션과 연결된 Connection 객체를 참조하는 Connection 객체, 세션이 종료되었으면 null을 리턴
Throws:
NotSupportedException - dsn이 최초 생성시 주어진 값과 다를 경우

closeConnection

public void closeConnection(Connection con)
                     throws SQLException

이 세션에서 얻어온 Connection객체를 close 한다. 파라메터로 입력된 Connection 객체가 내부 Connection 객체와 다른 경우에는 그냥 리턴된다. 세션이 이미 종료되었고 더 이상 참조하는 Connection 없는 경우에는 실제 Connection 객체를 close 한다.

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

commit

public void commit()
            throws SQLException

세션이 관리하는 local transaction의 commit을 수행한다. 내부적으로는 세션 내부 Connection 객체의 commit()을 수행하고, 세션을 종료 상태로 설정한다. 그리고, 더 이상 참조하는 Connection이 없는 경우에는 내부 Connection 객체의 close()를 수행한다. 아직 참조하는 Connection이 남아 있다면 내부 Connection 객체는 close 되지는 않지만 더 이상 세션에서 Connection을 얻어갈 수 없다.

Throws:
SQLException - 트랜젝션 commit 시 에러가 발생하는 경우

rollback

public void rollback()
              throws SQLException

세션이 관리하는 local transaction의 rollback을 수행한다. 내부적으로는 세션 내부 Connection 객체의 rollback()을 수행하고, 세션을 종료 상태로 설정한다. 그리고, 더 이상 참조하는 Connection이 없는 경우에는 내부 Connection 객체의 close()를 수행한다. 아직 참조하는 Connection이 남아 있다면 내부 Connection 객체는 close 되지는 않지만 더 이상 세션에서 Connection을 얻어갈 수 없다.

Throws:
SQLException - 트랜젝션 rollback 시 에러가 발생하는 경우

start

public void start()

Session을 Active 상태로 변경한다.

Throws:
IllegalStateException - 현재 상태가 STATE_INACTIVE가 아닐 경우

close

public void close()
           throws SQLException

Session을 종료한다. 상태는 STATE_CLOSED 상태로 변경되고 내부 Connection 객체는 close 된다. 하지만, 아직 참조하는 Connection이 남아 있을 경우에는 실제 내부 Connection를 close 하지 않는다. STATE_CLOSED 상태가 되면 새로 getConnection()를 호출 할 수 없으며, 이전에 참조하고 있던 Connection 객체만 closeConnection()를 호출하여 Connection을 close 할 수 있다.

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


Copyright © 2014. All Rights Reserved.