|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectkr.co.hit.live.transaction.Session
public class Session
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()가 호출되지는 않으며, 진행 중인 트랜젝션이 종료될 때,
즉 Transaction의 commit()나 rollback()가 호출 될때 비로서 실제
내부 Connectionclose()된다.
하지만 이때에도 아직 내부 Connection 객체를 참조하고 있는 핸들이 남아 있을 경우에는 실제적으로 close() 하지는 않으며
마지막 핸들 객체가 close()할 때에 실제로 close()한다.
트랜젝션에는 최대 하나의 Session 만이 있을 수 있으므로, 만약에 이미 Session 객체가 이미 설정되어 있는 상태에서
datasource 명이 다른 DataSource를 사용하여 getConnection()가 호출 될 경우에는
javax.transaction.NotSupportedException가 발생된다.
| 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 |
|---|
public static final int STATE_CLOSED
public static final int STATE_INACTIVE
public static final int STATE_ACTIVE
| Constructor Detail |
|---|
public Session(String dsn,
Connection con)
생성자이다. datasource 명과 Connection 객체를 받아서 내부 변수로 저장해 놓는다.
상태는 STATE_INACTIVE 상태가 된다.
dsn - Connection 객체 생성시 사용된 Datasource 명con - Connection 객체| Method Detail |
|---|
public String getDataSourceName()
Connection 객체를 생성한 DataSource의 이름을 리턴한다.
public Connection getConnection(String dsn)
throws NotSupportedException
세션과 연결된 Connection를 참조하는 Connection 객체를 리턴한다.
최초에 정의된 Connection가 다른 Datasource 명으로 요청하면 NotSupportedException을 발생한다.
종료된 Session으로 요청하면 null이 리턴된다.
dsn - datasource 명
Connection 객체를 참조하는 Connection 객체,
세션이 종료되었으면 null을 리턴
NotSupportedException - dsn이 최초 생성시 주어진 값과 다를 경우
public void closeConnection(Connection con)
throws SQLException
이 세션에서 얻어온 Connection객체를 close 한다.
파라메터로 입력된 Connection 객체가 내부 Connection 객체와 다른 경우에는 그냥 리턴된다.
세션이 이미 종료되었고 더 이상 참조하는 Connection 없는 경우에는 실제 Connection 객체를 close 한다.
SQLException - 실제 connection을 close() 시 오류가 발생했을 경우
public void commit()
throws SQLException
세션이 관리하는 local transaction의 commit을 수행한다.
내부적으로는 세션 내부 Connection 객체의 commit()을 수행하고, 세션을 종료 상태로 설정한다.
그리고, 더 이상 참조하는 Connection이 없는 경우에는
내부 Connection 객체의 close()를 수행한다.
아직 참조하는 Connection이 남아 있다면
내부 Connection 객체는 close 되지는 않지만 더 이상 세션에서 Connection을 얻어갈 수 없다.
SQLException - 트랜젝션 commit 시 에러가 발생하는 경우
public void rollback()
throws SQLException
세션이 관리하는 local transaction의 rollback을 수행한다.
내부적으로는 세션 내부 Connection 객체의 rollback()을 수행하고, 세션을 종료 상태로 설정한다.
그리고, 더 이상 참조하는 Connection이 없는 경우에는
내부 Connection 객체의 close()를 수행한다.
아직 참조하는 Connection이 남아 있다면
내부 Connection 객체는 close 되지는 않지만 더 이상 세션에서 Connection을 얻어갈 수 없다.
SQLException - 트랜젝션 rollback 시 에러가 발생하는 경우public void start()
Session을 Active 상태로 변경한다.
IllegalStateException - 현재 상태가 STATE_INACTIVE가 아닐 경우
public void close()
throws SQLException
Session을 종료한다. 상태는 STATE_CLOSED 상태로 변경되고
내부 Connection 객체는 close 된다.
하지만, 아직 참조하는 Connection이 남아 있을 경우에는
실제 내부 Connection를 close 하지 않는다.
STATE_CLOSED 상태가 되면 새로 getConnection()를 호출 할 수 없으며,
이전에 참조하고 있던 Connection 객체만
closeConnection()를 호출하여 Connection을 close 할 수 있다.
SQLException - Connection 객체 close()시 오류가 발생한 경우
IllegalStateException - 현재 상태가 STATE_INACTIVE가 아닐 경우
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||