Say! 머니곰/IT

Transaction

moneygom 2010. 6. 15. 18:38
반응형
1.1 ProFrame Transaction
  • TFC ( Transaction Flow Controller ) 가 Transaction 관리 및 거래 흐름을 제어
  • ProFrame이 Transaction처리를 담당함으로써 일관성을 보장하며, 개발자는 Local Transaction, Global Transaction 에 관여 하지 않는다.

1.2 Declarative Transaction
  • 기본적으로 EJB Declarative Transaction model 을 따르며, 서비스 별로 개별 Transaction 속성을 가진다.
  • Required / RequiredNew / NotSupported 을 제공
  • Service - Service 연동 거래일 경우 other service 시점에서 transaction 유형을 설정한다.

1.3 Global Session
  • EMB Designer 에서 operation 별로 Global Session 을 선언하여 DB Transaction 수행 시 선택적으로 사용할 수 있다.


2. Declarative Transaction
2.1 정의

2.2 종류
1) Required
  • Required 속성으로 정의된 서비스들은 모두 transaction 내에서 수행되게 된다.
  • 해당 서비스가 호출되었을 때, 이미 transaction이 수행되고 있을 경우에는 그 transaction 내에서 서비스가 수행되고, 없을 경우에는 새로운 transaction 을 만들어 서비스를 수행한다.
  • update, delete 작업에 유용하다.
2) RequiredNew
  • RequiredNew 속성으로 정의된 서비스들은 언제나 새로운 transaction 내에서 수행된다.
  • 해당 서비스가 호출되었을 때, 호출한 클라이언트가 transaction을 시작하지 않은 상태이면 새로운 transaction을 수행한다.
  • 클라이언트가 transaction을 시작해서, 해당 서비스가 호출되는 시점이 transaction 중 이라면, 이미 수행 중인 transaction을 잠시 중단하고 호출된 서비스를 처리하기 위해 새로운 transaction을 처리하여, 서비스가 수행된 후에 이전에 중지된 transaction을 다시 수행한다.
  • 이로 인해 overhead가 발생하므로 남용하지 않는 것을 추천한다.
3) NotSupported
  • NotSupported 속성으로 정의된 서비스는 transaction 범위 밖에서 수행된다.
  • 호출하는 클라이언트가 transaction을 가지고 있지 않고 서비스를 호출하였다면 마찬가지로 transaction 없이 서비스가 호출된다.
  • 만약, 클라이인트가 transaction 범위 내에서 NotSupported 속성으로 정의된 서비스를 호출하면, 기존의 transaction은 중지한 후, 메서드 내용을 처리하고 다시 재개한다.
2.3 Declarative Transaction 정의 방법
  • ProBuilder의 각 Application 별로 proframe-application.xml 이 존재한다.
  • proframe-application.xml 의 Properites(특성) view 에서 Transaction(트랜잭션) 탭으로 이동하면, Required / RequiredNew / NotSupported 을 선택할 수 있다.

2.4 Global Transaction
  2.4.1 개요
  • Global Transaction 을 구성하는 분산된 여러 RM ( Resource Manager ) 의 작업은 논리적인 단일 작업으로 처리된다.
  • 즉, 여러 개의 서버에서 일어난 RM 관련 작업을 단일 Transaction으로 처리한다.
 2.4.2 ProFrame을 이용한 Global Transaction 처리
  • ProFrame의 Transaction 관리는 TFC / Call Manager 가 있어 다음과 같은 기능을 담당한다.
    • TFC 담당 ( tx.begin, tx.end )
    • Runtime 시 Service Registry 를 참조하여 해당 Service 위치에 따라 Local Call / Remote Call 결정
    • target 서비스가 분산, 클러스터링 되어 있는 경우 라우팅, Load Balancing, Fail Over 처리
    • 후행 처리를 위한 Task를 후행 매니저 quere 에 적재

  • Node 1의 지급 service 와 Node 2의 입금 service를 하나의 Transaction으로 2 Phase Commit 를 보장하기 위해 XA datasource를 선택하고 지급 service와 입금 service 모두 "Required" Transaction 속성을 사용한다.
  • rollback 되는 service가 있다면 한 Transaction 상의 services 는 모두 rollback 된다.

2.5 Service Call 유형
  • SO ( Service Object ) to SO : 연동 모듈을 통한 호출
  • SO to BO ( Business Object ) : Application Context 를 통한 객체 생성 후 Reference Call
  • BO to BO : Application Context를 통한 객체 생성 후 Reference Call
  • BO to DBIO Obj : DBIO API 를 이용하여 호출
2.5.1 ProFrame Service Call 유형에 따른 transaction 처리
  • SO 1 -> SO 2 ( Required )
    • 같은 transaction 에서 처리
  • SO 1 -> SO 2 ( RequiredNew )
    • SO1 의 Transaction 중지하고 SO 2의 Transaction 을 수행한 후, 이전에 중지하였던 Transaction을 다시 실행
  • SO 1 -> SO 2 ( NotSupported)
    • SO1 stop, transaction 밖에서 SO2 내용을 처리한 후, 기존의 Transaction을 재개한다.


3. Global Session
 3.1 개요
  • Global Session을 정의하면 기존 DBIO Session 명 정의하는 부분을 개발자 편의와 업무 특성에 맞도록 할 수 있다. 이를 통해 DBIO 의 사용도 편해진다. EMB Designer 의 Business Object 에서 operation 별로 Global Session을 정의한다. 이를 통해 Global Session을 선택적으로 사용할 수 있다.
 3.2 Global Session 선언 및 관리 방법
  • EMB Designer 에서 BO 의 Operation 을 선택하여 Properties(특성) View의 "Session (세션)" 탭을 선택한다.
  • 추가버튼을 클릭하여 추가할 세션정보를 추가
  • 윈하는 세션명, 별칭 및 데이터소스(dbio_config.xml에서 설정된 data-source의 conn-name과 동일) 를 입력
  • 자동 빌드 된 소스를 보면
    • .... cb.putServiceSession("non-xa", "proframe");   cb.putServiceSession("xa", "proframeXA"); ...
 
 3.3 Global Session 사용
  • 같은 session 을 사용하지만 DB Object 를 호출할 때마다 session을 선언해줘야 했던 불편함을 같은 session에서 순차적으로 쿼리가 실행되어야 하는 업무 특성을 반영하기 위한 기능으로 사용된다.
  • 사용방법
    • EMB Designer에서 Operation을 선택하고 DBIO 를 선택한다.
    • 선택한 DBIO의 Properties(특성) 의 DBIO Call(DBIO 호출) 탭을 선택
    • 선언한 Global Session을 사용할 경우, Global Session ComboBox에서 원하는 session을 지정.




4. User Transaction
 4.1 개요
  • NotSupported 속성을 사용하는 경우, TM ( Transaction Manager ) 이 transaction 에 관여하지 않음을 의미하므로 User Transaction에 의해 직접 관리해야 한다.
 4.2 User Transaction 사용
  • Non-XA 를 사용하나 하나의 transaction 단위에서 transaction 수행 성공을 보장할 수 있도록 user transaction 사용하는 방법을 소개한다.
 4.2.1 Global Session 을 지정한다.
  • Non-XA 의 DataSource를 Global Session으로 선언하고, DBIO 호출 시 선언한 Global Session을 지정한다.
 
 4.2.2 User Transaction을 적용한다.


  • DBIO 처리 전에 setAutoCommit 속성을 false 로 지정
    • ProFrame 에서 Non-XA의 경우 default로 setAutoCommit 는 true 로 지정된다.
  • 해당 모든 DBIO 수행 후에 사용자 지정 Connection 을 Commit 한다.
  • 예외 발생시에 사용자 지정 Connection 을 Rollback 한다.








 


반응형

'Say! 머니곰 > IT' 카테고리의 다른 글

[Eclipse Project] Common Navigator Framework  (0) 2010.06.20
전문설정 및 사용방법  (0) 2010.06.16
vi 명령어 정리  (1) 2010.06.15
[GEF] 초심자를 위한 자료 목록  (0) 2010.06.15
RPM  (0) 2010.06.15