Scheduler 설정

본 장에서는 JEUS 설정 파일이나 Deployment Descriptor(DD)에 JEUS Scheduler를 설정하는 방법에 대해서 설명한다.

1. 개요

JEUS Scheduler Service를 사용하기 위해서는 각 서비스별로 필요한 내용을 설정해야 한다.

  • JEUS 서버에 Scheduler Service 설정

    원격에서 JEUS 서버 Scheduler Service에 접근하는 경우나 Job-list를 이용하여 JEUS 서버에서 주기적인 작업을 수행할 서버에 Scheduler Service를 활성화시켜야 한다. Scheduler Service를 활성화하려면 WebAdmin에서 Scheduler Service를 사용하겠다는 설정을 해야 한다. 이 설정이 되어 있어야 서버가 부팅할 때 Scheduler Service를 시작한다.

    • Scheduler Service를 사용하도록 설정한다.

    • Scheduler Service에서 사용할 Thread Pool을 설정한다.

    • 서버에서 scheduling되어 수행할 Job-list에 대해서 설정한다.

  • 클라이언트 컨테이너에 Scheduler Service 설정

    • Deployment Descriptor(DD)에서 설정한다.

Scheduler를 사용하려면 서비스를 활성화시키는 설정과 Thread Pool 설정 그리고 실제 작업을 수행할 Job-list 설정을 해야 한다.

2. Job-list 설정

본 절에서는 실제 작업을 수행할 Job을 등록하는 방법에 대해 설명한다.

프로그램 코드에서 작업을 등록하는 것 외에 JEUS 설정 파일에 작업을 등록하면 JEUS 서버가 구동될 때 작업이 자동으로 scheduling된다. Job은 scheduling될 하나의 작업 단위를 의미한다. Job에 해당하는 클래스는 반드시 jeus.schedule.ScheduleListener를 구현해야 하며 해당 클래스와 관련 클래스를 JAR 파일로 묶어 다음의 경로에 위치시켜야 한다.

  • 아래 디렉터리는 Master Server와 Managed Server(이하 MS) 사이에 동기화되지 않기 때문에 사용자가 수동으로 동기화해야 한다.

    DOMAIN_HOME/lib/application
  • 아래 디렉터리는 JEUS를 설치했을 때 생성되는 디렉터리가 아니므로 사용자가 직접 생성해서 위치시켜야 한다.

    SERVER_HOME/lib/application

Job은 서버에 설정하면 JEUS Scheduler Service에서 작업이 수행된다.

다음은 Job을 설정할 때 주의해서 작성해야 할 항목에 대한 설명이다.

항목 설명

Begin Time

작업이 최초로 수행될 시간을 지정한다. 설정하지 않을 경우 JEUS 서버가 기동할 때 시작한다.

  • 타입 : XML dateTime type

  • 형식 : yyyy-mm-ddThh:mm:ss.sss

만약 등록한 작업의 Begin Time이 과거이면 주기적으로 현재 시간 이후에 최초의 수행되어야 할 시간에 최초 수행되도록 조정된다.

End Time

작업이 끝날 시간을 지정한다. 설정되지 않을 경우 종료하지 않는다.

  • 타입 : XML dateTime type

  • 형식 : yyyy-mm-ddThh:mm:ss.sss

End Time이 과거인 경우에 작업은 한 번도 수행되지 않는다.

Count

작업의 최대 수행 횟수를 지정한다. 설정되지 않거나 -1인 경우 최대 수행 횟수에 제한이 없다.

Job-list 방식으로 등록된 작업은 Fixed-rate 방식으로 반복된다. 따라서 비교적 정확한 시간에 호출되지만 작업 수행시간이 오래 걸릴 때는 작업이 동시에 진행될 수 있기 때문에 작업이 Thread-safe하도록 고려해야 한다.

3. 서버 스케줄러 설정

본 절에서는 WebAdmin을 통해 실제 서버에 Scheduler를 설정하는 방법에 대해서 설명한다.

원격에서 JEUS 서버 Scheduler Service에 접근하거나 Job-list를 이용하여 JEUS 서버에서 주기적인 작업을 수행하려면 서버에 Scheduler Service를 활성화시켜야 한다. Scheduler Service를 활성화하려면 다음과 같이 WebAdmin에서 Scheduler Service를 사용하겠다는 설정을 해야 한다. 이 설정이 되어 있어야 서버가 부팅할 때 Scheduler Service를 시작시킨다.

다음은 Schedule 클래스 상속에서 작성한 예제를 서버에 Job으로 추가하는 과정이다.

  1. WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [서버]을 선택한다.

  2. 서버 목록 화면에서 설정을 변경할 서버를 선택한 후 [Resource] > [Scheduler] 메뉴를 선택한다.

  3. Scheduler 설정 화면에서 [수정] 버튼을 클릭해서 'Enabled' 항목의 '적용’을 체크하고, 'Pooling' 항목의 '사용’을 체크하여 Scheduler에서 사용할 Thread Pool 정보를 설정한다. Scheduler의 Thread Pool에 관한 내용은 Thread Pool 설정을 참고한다. 설정이 완료되면 [저장] 버튼을 클릭한다.

  4. Job을 추가하기 위해서는 Scheduler 설정 화면Job 목록에서 [추가] 버튼을 클릭한다.

  5. Job 추가 화면에서 Job의 이름과 Job을 수행할 클래스 이름, Job이 수행될 주기를 입력하고 [추가] 버튼을 클릭한다.

    운영 중인 서버에 Scheduler를 추가하거나 변경하는 작업은 동적으로 반영되지 않는다. 설정만 저장해 두었다가 서버가 재기동될 때 반영된다.

  6. 서버를 재기동하면 추가한 Job이 수행되면서 서버 로그에 로깅된 결과를 조회할 수 있다.

    ##### waked on Tue Apr 23 14:50:19 KST 2013
    ##### waked on Tue Apr 01 15:20:19 KST 2013

4. Thread Pool 설정

Scheduler Service는 Thread Pool을 설정하여 Scheduler Service를 수행하는 데 필요한 Thread의 개수를 조절한다. Thread Pool은 System Thread Pool을 공유해서 사용하는 공용 Thread Pool과 별도의 Thread Pool을 설정하는 전용 Thread Pool로 나뉜다.

본 절에서는 WebAdmin과 콘솔 툴을 사용해서 Thread Pool을 설정하는 방법에 대해서 설명한다. 항목에 대한 자세한 내용은 JEUS Server 안내서의 Thread Pool 설정을 참고한다.

4.1. 공용 Thread Pool

Scheduler Service에서 공용 Thread Pool을 사용할 경우는 Thread 개수만 미리 할당해 놓으면 된다.

WebAdmin 사용

다음은 WebAdmin을 사용해서 Thread Pool을 설정하는 과정에 대한 설명이다.

  1. WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [서버]을 선택한다.

  2. 서버 목록 화면에서 설정을 변경할 서버를 선택한 후 [Resource] > [Scheduler] 메뉴를 선택한다.

  3. Scheduler 설정 화면에서 [수정] 버튼을 클릭한 후 'Pooling' 항목의 '사용’을 체크한다. Thread Pool 설정은 'Pooling' 항목이 체크되어 있는 경우 표시된다. 'Thread Pool Type' 항목은 'Shared’를 선택하고, 'Reserved Thread Num'의 개수를 10으로 설정한다.

  4. [저장] 버튼을 클릭하면 변경한 설정이 저장된다.

콘솔 툴 사용

다음은 콘솔 툴(jeusadmin)을 통해 Scheduler의 Thread Pool을 설정하는 방법이다.

[MASTER]domain1.adminServer>modify-system-thread-pool server1 -service scheduler -r 10
Successfully performed the MODIFY operation for The scheduler thread pool of the server (server1).,
but all changes were non-dynamic. They will be applied after restarting.
Check the results using "show-system-thread-pool server1 -service scheduler or modify-system-thread-pool server1 -service scheduler".

[MASTER]domain1.adminServer>show-system-thread-pool server1 -service scheduler
Shows the current configuration.
the system thread pool of the server (server1)
================================================================================
+---------------------------------------------------------+--------------------+
| Min                                                     | 0                  |
| Max                                                     | 100                |
| Keep-Alive Time                                         | 300000             |
| Queue Size                                              | 4096               |
| Max Stuck Thread Time                                   | 3600000            |
| Action On Stuck Thread                                  | IGNORE_AND_REPLACE |
| Stuck Thread Check Period                               | 300000             |
| Reserved Threads for the Service transaction            | 0                  |
| Reserved Threads for the Service scheduler              | 10                 |
| Reserved Threads for the Service namingserver           | 0                  |
+---------------------------------------------------------+--------------------+
================================================================================

4.2. 전용 Thread Pool

Scheduler Service에서 전용 Thread Pool을 사용할 경우 WebAdmin과 콘솔 툴(jeusadmin)을 통해 설정할 수 있다.

Scheduler Service의 Thread Pool 설정을 수정하는 것은 동적 반영 가능하기 때문에 서버를 재기동하지 않아도 된다. 하지만 공용 Thread Pool을 사용하다가 전용 Thread Pool을 사용하도록 Thread Pool의 타입을 변경하는 경우 동적 반영되지 않기 때문에 서버를 재기동해야 한다.

WebAdmin 사용

다음은 WebAdmin을 사용해서 Thread Pool을 설정하는 과정에 대한 설명이다.

  1. WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [서버]을 선택한다.

  2. 서버 목록 화면에서 설정을 변경할 서버를 선택한 후 [Resource] > [Scheduler] 메뉴를 선택한다.

  3. Scheduler 설정 화면으로 이동한 후 [수정] 버튼을 클릭한한 후 'Pooling' 항목의 '사용’을 체크한다. Thread Pool 설정은 'Pooling' 항목이 체크되어 있는 경우 표시된다. 'Thread Pool Type' 항목은 'Dedicated’을 선택하고, 'Min' 항목은 '0', 'Max' 항목은 '20’으로 설정한다.

  4. [저장] 버튼을 클릭하면 변경한 설정이 저장된다.

콘솔 툴 사용

다음은 콘솔 툴(jeusadmin)을 통해 Scheduler의 Thread Pool을 설정하는 방법이다.

[MASTER]domain1.adminServer>show-service-thread-pool server1 -service scheduler
Shows the current configuration.
==================================================
+------+-----------------------------------------+
(No data available)
==================================================

[MASTER]domain1.adminServer>modify-service-thread-pool server1 -service scheduler -min 0 -max 20
Successfully performed the MODIFY operation for The scheduler thread pool of the server (server1).,
but all changes were non-dynamic. They will be applied after restarting.
Check the results using "show-service-thread-pool server1 -service scheduler or modify-service-thread-pool server1 -service scheduler".

[MASTER]domain1.adminServer>show-service-thread-pool server1 -service scheduler
Shows the current configuration.
=====================================================================
+---------------------------------------------------------+---------+
| Min                                                     | 0       |
| Max                                                     | 20      |
| Keep-Alive Time                                         | 60000   |
| Queue Size                                              | 4096    |
| Max Stuck Thread Time                                   | 3600000 |
| Action On Stuck Thread                                  | NONE    |
| Stuck Thread Check Period                               | 300000  |
+---------------------------------------------------------+---------+
=====================================================================

5. 클라이언트 컨테이너 설정

Jakarta EE 애플리케이션을 사용하는 경우 클라이언트 컨테이너에서 구동되는 JEUS Scheduler에 대해 설정한다. 애플리케이션 클라이언트를 위한 JEUS DD인 jeus-client-dd.xml 파일에 다음과 같이 <scheduler> 설정을 추가한다.

클라이언트 컨테이너 설정 : <jeus-client-dd.xml>
<?xml version="1.0"?>
<jeus-client-dd>
    <module-info>
        ...
    </module-info>
    ...
    <scheduler>
        <enabled>true</enabled>
        <!-- Scheduler Thread-pool settings -->
        <pooling>
            <dedicated>
                <min>2</max>
                <max>10</max>
                <keep-alive-time>60000</keep-alive-time>
                <queue-size>4096</queue-size>
                <stuck-thread-handler>
                    <max-stuck-thread-time>3600000</max-stuck-thread-time>
                    <action-on-stuck-thread>None</action-on-stuck-thread>
                </stuck-thread-handler>
            </dedicated>
        </pooling>
    </scheduler>
  ...
</jeus-client-dd>

위의 설정 파일을 수정한 후에 JEUS 서버를 재기동할 필요는 없지만, 클라이언트 모듈과 클라이언트 컨테이너는 재기동해야 수정한 설정 내용이 반영된다.

  1. 클라이언트 컨테이너에서 Scheduler Service를 사용할 때는 공용 Thread Pool은 사용할 수 없다.

  2. 클라이언트 컨테이너와 애플리케이션 클라이언트에 대해서는 JEUS Application Client 안내서를 참고한다.

다음은 클라이언트 컨테이너에서 수행할 Job 설정 예제이다.

Job-list 설정 : <jeus-client-dd.xml>
<scheduler>
    ...
    <job-list>
        <job>
            <class-name>samples.ScheduleJob</class-name>
            <name>ScheduleJob</name>
            <description>This is a sample for scheduler service</description>
            <begin-time>2011-02-01T00:00:00</begin-time>
            <end-time>2011-03-01T00:00:00</end-time>
            <interval>
                <minutely>30</minutely>
            </interval>
            <count>-1</count>
        </job>
    </job-list>
</scheduler>