EJB Timer Service

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

1. Timer Service 설정

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

Timer Service는 다음 2개의 설정을 한다.

  • EJB 엔진의 Timer Service

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

  • jeus-ejb-dd.xml

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

1.1. Persistent Timer Service 설정(EJB 엔진)

domain.xml을 사용하여 다음 예시와 같이 EJB 엔진의 Persistent Timer Service를 설정할 수 있다.

EJB 엔진의 Persistent Timer Service 설정: <domain.xml>
<ejb-engine>
    <resolution>1000</resolution>
    <use-dynamic-proxy-for-ejb2>true</use-dynamic-proxy-for-ejb2>
    <enable-user-notify>false</enable-user-notify>
    <timer-service>
        <support-persistence>true</support-persistence>
        <max-retrial-count>1</max-retrial-count>
        <retrial-interval>5000</retrial-interval>
        <thread-pool>
            <min>2</min>
            <max>30</max>
            <period>3600000</period>
        </thread-pool>
        <database-setting>
            <data-source-id>tibero_XA1</data-source-id>
            <db-vendor>tibero</db-vendor>
        </database-setting>
    </timer-service>
</ejb-engine>

고급 선택사항에서 Persistent Timer Service의 각 설정 항목 대한 설명은 다음과 같다.

  • Thread Pool

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

    항목 설명

    Min

    Pooling되는 스레드의 최솟값이다.

    Max

    Pooling되는 스레드의 최댓값이다.

    Period

    Pooling되는 스레드를 정리하는 시간이다.

  • Database Setting

    Persistent Timer Service를 사용한다면 반드시 설정해야 하는 항목이다. Persistent Timer는 DB를 사용하기 위해 내부적으로 CMP Bean을 사용하므로 이 CMP Bean이 아래 항목들을 통해 설정된다. 따라서 각 항목은 CMP Bean의 스키마 설정과 같다.

    항목 설명

    Db Vendor

    Timer CMP Bean이 사용하는 DB의 벤더를 지정한다.

    Data Source Id

    Timer CMP Bean이 사용하는 데이터소스 리소스의 이름을 지정한다.

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

Persistent Timer Service를 사용하도록 EJB 엔진에 설정되어 있을 때 사용자는 각 EJB Bean별로 Persistent Timer Service를 사용할지, deploy하기 전에 DB에 남아있는 Persistent Timer를 사용할지 제거할지 등의 동작을 설정할 수 있다. 이는 jeus-ejb-dd.xml을 통해서 설정한다. Persistent Timer Service의 설정은 domain.xml에서 가능하다. domain.xml에서의 설정 방법에 대한 자세한 내용은 Persistent Timer Service 설정(EJB 엔진)을 참고한다.

다음은 jeus-ejb-dd.xml에 Persistent Timer 처리를 설정한 예제로, <jeus-bean><timer-service> 태그 내에 설정한다.

Persistent Timer의 처리 : <jeus-ejb-dd.xml>
<jeus-ejb-dd>
    . . .
    <beanlist>
        . . .
        <jeus-bean>
            . . .
             <timer-service>
                <support-persistence>
                    true
                </support-persistence>
            </timer-service>
            . . .
        </jeus-bean>
             . . .
    </beanlist>
      . . .
</jeus-ejb-dd>

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

태그 설명

<support-persistence>

해당 Bean의 Timer를 persistent하게 관리할 것인지를 결정한다.

1.3. Cluster-Wide Timer Service 설정

클러스터의 경우에는 모든 EJB 엔진이 동일한 EJB Timer Service를 사용해야 하므로 공통된 설정을 해야 한다. 따라서 각 MS에 설정된 값은 무시된다.

다음은 domain.xml을 사용하여 Cluster-Wide Timer Service를 설정하는 과정에 대한 예시이다.

Cluster-Wide Timer Service 설정: <domain.xml>
<cluster>
    <cluster-wide-timer-service>
        <database-setting>
            <data-source-id>tibero_XA1</data-source-id>
            <db-vendor>tibero</db-vendor>
        </database-setting>
    </cluster-wide-timer-service>
</cluster>

각 설정 항목에 대한 설명은 Persistent Timer Service 설정(EJB 엔진)'Database Setting' 항목과 동일하다.

2. Timer 모니터링

콘솔 툴을 사용하여 동작 중인 EJB Timer에 대한 모니터링 및 동작 취소가 가능하다.

콘솔 툴 사용

Timer의 모니터링 및 동작 취소는 콘솔 툴을 사용할 수도 있다.

  • 모니터링

    ejb-timer-info 명령어를 사용해서 특정 서버의 EJB Timer 정보를 확인할 수 있다.

    ejb-timer-info -server <server-name>
  • 동작 취소

    cancel-ejb-timer 명령어를 사용해서 특정 서버의 EJB Timer를 취소할 수 있다.

    cancel-ejb-timer -server <server-name>

위의 2가지 명령어 및 EJB 엔진 관련 명령어에 대한 자세한 내용은 JEUS Reference 안내서의 EJB 엔진 관련 명령어를 참고한다.

3. Timer Service 사용 주의사항

다음은 Timer Service를 사용하는 경우 고려해야할 주의사항에 대한 설명이다.

  • Persistent Timer와 JDBC Connection

    Persistent Timer는 DB에 저장되고 이 Timer들을 관리하는 CMP Bean은 EJB 엔진의 Time Service - Database Setting - Data Source Id 값을 사용한다.

    Persistent Timer를 사용하는 Bean이 포함된 트랜잭션은 Timer CMP Bean이 사용하는 데이터소스도 관리하게 된다. 따라서 이를 고려해서 데이터소스를 LocalXAResource로 사용할지 XAResource로 사용할지를 결정해야 한다.

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