UserTransaction tx = new UserTransaction();
tx.begin();
Connection con1 = ds.getConnection(); //ds : DataSource
Connection con2 = ds.getConnection();
Connection con3 = ds.getConnection();
...
tx.commit();
위와 같은 Global Transaction 로직에서,
일반적인 경우, con1, con2, con3은 3개의 다른 connection 객체이다.
connection sharing이란,
동일 Global Transaction에서는 여러번 connection객체를 요청하더라도
WAS단에서 동일한 connection 객체를 리턴시켜 주는 기능이다.
즉, con1, con2, con3은 모두 1개(con1)의 동일한 connection 객체이다.
즉, 위의 Connection Sharing 기능을 어플리케이션 측면에서는
tx.begin();
Connection con1 = ds.sgetConnection();
con2=con1;
con3=con1;
tx.commit();
와 같이 Connection을 재사용하도록 코딩한 것과 같은 의미가 된다.
정리하면, Connection Sharing 기능이란,
하나의 Global Transaction에서
어플리케이션에서 명시적으로 connection 객체를 재사용하지 않더라도
WAS단에서 동일한 connection 객체를 리턴하여 공유(재사용)하도록 하는 기능이다.
[장점]
이와 같은 기능은 하나의 Global Transaction에서 빈번히 getConnection을 수행하는 어플리케이션에서는
connection open 시간이 줄어들어 전체 response time 감소한다.
(즉, XA DataSource를 이용한 다수건 connection 사용환경에서 개선효과 발생)
[단점]
하지만, 단일 connection만 이용하는 어플리케이션에서는 connection 관리기능 추가로 인한 overhead로
connection open 시간이 더 늘어나서 전체 response time 증가한다.
(즉, Non XA DataSource를 이용한 connection 사용환경에서는 역효과 발생)
댓글 없음:
댓글 쓰기