제10장 EJB Timer Service

내용 목차

10.1. Timer Service의 설정
10.1.1. Persistent Timer Service 설정(EJBMain.xml)
10.1.2. Persistent Timer 처리(jeus-ejb-dd.xml)
10.2. Timer Service 사용 주의사항
10.2.1. Persistence Timer와 JDBC 커넥션

EJB Timer Service는 EJB가 특정한 시간 또는 주기적으로 callback을 받을 수 있도록 하는 서비스이다. 기본적인 사용 방법은 EJB 스펙에 설명되어 있으므로 본 장에서는 JEUS EJB에서 제공하는 Timer Service와 이를 사용하기 위한 설정에 대해서 설명한다.

10.1. Timer Service의 설정

JEUS EJB Timer Service는 기본적으로 스펙을 따르지만 persistence하게 Timer를 관리하는 기능은 성능과 사용자의 필요에 따라 선택적으로 사용할 수 있다.

Timer Service는 다음의 2개의 XML에 관련 설정을 한다.

  • EJBMain.xml

    Timer Service를 사용하는 모든 Bean에 적용되는 공통적인 설정과 Persistence한 Timer Service를 가능하게 하는 설정을 한다.

  • jeus-ejb-dd.xml

    각 Bean이 Deploy/Uneploy될 때 Persistent Timer들을 어떻게 관리하는지에 대한 설정을 한다.

10.1.1. Persistent Timer Service 설정(EJBMain.xml)

Persistent Timer Service는 EJBMain.xml에 <ejb-engine>의 하위 항목인 <timer-service>에 설정한다.

다음은 Persistent Timer Service를 설정한 XML 예이다.

[예 10.1] Persistent Timer Service 설정 : <<EJBMain.xml>>

<ejb-engine>    
    . . .
    <timer-service>
        <min-delivery-interval>7000</min-delivery-interval>
        <max-redelivery-count>1</max-redelivery-count>
        <redelivery-interval>4000</redelivery-interval>
        <thread-pool>
            <min>2</min>
            <max>30</max>
            <period>3600000</period>
        </thread-pool>
        <durable-setting>
            <db-vendor>oracle</db-vendor>
            <data-source-name>jdbc/DB1</data-source-name>
            <engine-type>SINGLE_OBJECT</engine-type>            
            <table-name>jeusTimerTable</table-name>
        </durable-setting>
    </timer-service>
    . . .
</ejb-engine>


다음은 설정 태그에 대한 설명이다.

  • <timer-service>

    하위 항목 중 Timer Service의 공통적인 설정에 대한 설명은 다음과 같다.

    • <min-delivery-interval>

      특정 Timer가 생성된 후에 Timer Event가 발생하기까지의 최소시간이다. 이 값이 작을수록 EJB 엔진에 가해지는 부하는 커질 수 있으므로 사용하는 Timer의 Interval에 맞게 크게 설정하면 좋다. (기본값: 7000, 단위: ms )

    • <max-redelivery-count>

      Timer Callback 함수에서 exception이 발생하거나 트랜잭션이 Rollback되어 재전송이 발생하는 상황에서 최대 재전송 횟수를 나타낸다. (기본값: 1)

    • <redelivery-interval>

      재전송해야 할 상황이 발생했을 때부터 재전송하기까지의 시간이다. (기본값: 5000, 단위: ms)

    • <thread-pool>

      Timer service가 timeout() 메소드를 실행할때 사용하는 Thread Pool에 대한 설정이다.

      하위 태그에 대한 자세한 설명은 다음과 같다.

      태그설명
      <min>Pooling되는 스레드의 최솟값이다.
      <max>Pooling되는 스레드의 최댓값이다.
      <period>Pooling되는 스레드를 정리하는 시간이다.
    • <durable-setting>

      Persistent Timer Service를 사용한다면 꼭 있어야 할 항목이다.

      Persistent Timer는 DB를 사용하기 위해 내부적으로 CMP Bean을 사용하므로 이 CMP Bean이 <durable-setting>의 하위 항목들을 통해 설정된다. 따라서 각 항목은 CMP Bean의 스키마 설정과 같다.

      하위 태그에 대한 자세한 설명은 다음과 같다.

      태그설명
      <db-vendor>Timer CMP Bean이 사용하는 DB의 벤더를 지정한다.
      <data-source-name>Timer CMP Bean이 사용하는 Datasource Resource의 이름을 지정한다.
      <engine-type>Timer CMP Bean이 사용하는 엔진 타입을 지정한다. 자세한 것은 CMP 설정을 참고한다.
      <table-name>Timer CMP Bean이 사용할 DB 테이블 이름을 지정한다. (기본값: JEUS_Timer)

10.1.2. Persistent Timer 처리(jeus-ejb-dd.xml)

Persistent Timer Service를 사용하도록 EJB 엔진에 설정되어 있을 때 사용자는 각 EJB Bean별로 Persistent Timer Service의 사용 여부와 디플로이하기 전에 DB에 남아있는 Persistent Timer를 사용/제거여부 등의 동작을 설정할 수 있다. 해당 설정은 jeus-ejb-dd.xml을 통해서 이루어진다.

다음은 Persistent Timer 처리 설정을 jeus-ejb-dd.xml 예로 <jeus-bean><durable-timer-service> 태그 내에 구성한다.

[예 10.2] Persistent Timer의 처리 : <<jeus-ejb-dd.xml>>

<jeus-ejb-dd>
    . . .
    <beanlist>
        . . .
        <jeus-bean>
            . . .
             <durable-timer-service>
                <enable-durable-timers>
                    true
                </enable-durable-timers>
                <ignore-durable-timers-at-deploy>
                    false
                </ignore-durable-timers-at-deploy>
                <delete-durable-timers-at-undeploy>
                    false
                </delete-durable-timers-at-undeploy>
            </durable-timer-service>
            . . .
        </jeus-bean>
             . . .
    </beanlist>
      . . .
</jeus-ejb-dd>


다음은 설정 태그에 대한 설명이다.

태그설명
<enable-durable-timers>Bean이 사용하는 Timer를 Persistent하게 생성할지 여부를 결정한다.
<ignore-durable-timers-at-deploy>Bean이 디플로이될 때 DB의 Timer 테이블에 존재하는 이 Bean에 대한 Timer들을 살리지 않고 무시하고 싶을 때 사용한다. (기본값: false)
<delete-durable-timers-at-undeploy>Bean이 Undeploy될 때 현재 존재하는 Timer들을 DB의 Timer 테이블에서 제거하고 싶을 때 사용한다. 제거하지 않으면 다음 디플로이할 때 DB에 저장된 Timer들이 다시 생성될수 있다. (기본값: true)

10.2. Timer Service 사용 주의사항

10.2.1. Persistence Timer와 JDBC 커넥션

Persistent Timer는 DB에 저장되고 이 Timer들을 관리하는 CMP Bean은 EJBMain.xml의 <timer-service>/<durable-setting>/<data-source-name>값을 사용한다. Persistent Tmer를 사용하는 Bean이 포함된 트랜잭션은 Timer CMP Bean이 사용하는 데이터소스도 관리하게 된다. 따라서 이를 고려해서 데이터소스를 LocalXAResource로 사용할지 XAResource로 사용할지를 결정해야 한다.

참고

데이터소스에 대한 자세한 설명은 "JEUS Server 안내서"를 참고한다.