본문 바로가기

Programming/JAVA

EJB Transaction의 이해, Transaction 속성/선언

▩ EJB Transaction의 이해
   - INSERT, DELETE, UPDATE의 경우를 트랜잭션이라고 합니다.
     이런 기능들은 EJB 콤포넌트의 대상이 됩니다.

   - EJB는 강력하고 안정적인 트랜잭션을 Application Server층에서 지원함으로
     개발자가 전혀 트랜잭션을 구현할 필요가 없습니다.
     하지만 JSP단에서는 모든 트랜잭션이 요구되는 메소드를 개발자가 파악하여
     5줄 정도의 코드가 전부 추가되나 EJB에서는 그럴 필요가 없습니다.

   - 일반적으로 모든 메소드를 트랜잭션 상태로 지정하며 'Requird 속성'을
     이용합니다.

   - Weblogic Builder상에서 'Transaction Type'을 'Bean'으로 하면 JSP와 같은
     방법으로 트랜잭션을 지정하여 EJB 서버가 지원하는 트랜잭션을 제공받으려면
     'Container'타입으로 지정합니다.(권장)
  

 


 
▩ 트랜잭션 속성

1. Not Supported 속성
   - 트랜잭션을 사용하지 않습니다.


2. Supports 속성
   - 메소드가 2개 있을 경우 1번째 메소드가 트랜잭션 상태이면 2번째 호출되는
     관련 메소드도 트랜잭션 상태로 진입합니다.
     메소드1이 트랜잭션 상태가 아니면 트랜잭션이 적용되지 않습니다.

     EJB Method1  ---> EJB Method2
     Transaction       Transaction 진입
    
     EJB Method1  ---> EJB Method2
     Not Transaction   Transaction 진입 안함


3. Requird 속성(권장)
   - 무조건 모든 EJB메소드를 트랜잭션 상태로 진입 시킵니다.
   - 메소드1이 트랜잭션 상태가 아니면 트랜잭션을 생성해서 실행합니다.  

     EJB Method1  ---> EJB Method2
     Transaction       Transaction 진입
    
     EJB Method1  ---> EJB Method2
     Not Transaction   Transaction 진입


4. Requires New
   - 호출되는 관련 메소드가 전부 새로운 트랜잭션을 생성합니다.
     메소드마다 독립적으로 트랜잭션을 지정하는 것으로 많이 사용되지 않습니다.
     많은 부하가 발생합니다.

 


▩ 트랜잭션 구현 방법

1. 모든 메소드를 트랜잭션을 적용하는 경우

   - Weblogic Builder가 자동으로 생성하는 스크립트, 'META-INF/ejb-jar.xml'

  <assembly-descriptor>
    <container-transaction>
      <method>
        <ejb-name>MemberEJB</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>

 

 

2. 모든 메소드를 트랜잭션을 적용하면 SELECT만 하는 메소드도 트랜잭션 상태에 진입
   함으로 이런 경우는 트랜잭션과 관련있는 메소드(INSERT, DELETE, UPDATE)만
   명시합니다.

   - Weblogic Builder가 자동으로 생성하는 스크립트 'META-INF/ejb-jar.xml'를
     수정합니다.


  <assembly-descriptor>
    <container-transaction>
      <method>
        <ejb-name>MemberEJB</ejb-name>
        <method-name>method-name1</method-name>
        <method-name>method-name2</method-name>
        <method-name>method-name3</method-name>
      </method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>