제3장 Scheduler 설정

내용 목차

3.1. 개요
3.2. JEUS 노드 설정
3.3. JEUS 엔진 컨테이너 설정
3.4. 클라이언트 컨테이너 설정
3.5. Job-list 설정

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

3.1. 개요

JEUS Scheduler Service를 사용하기 위해서는 각 서비스별로 다음과 같이 설정해야 한다.

  • JEUS 노드 Scheduler Service를 설정한다.

    • JEUS Scheduler를 사용하도록 JEUSMain.xml 설정 파일에 설정한다.

    • Thread Pool과 Job-list에 대해서 설정한다.

  • JEUS 엔진 컨테이너 Scheduler Service를 설정한다.

    • 엔진 컨테이너 Scheduler Service에 대한 Thread Pool과 Job-list를 설정한다.

  • 클라이언트 컨테이너 Scheduler Service를 설정한다.

    • DD에서 설정한다.

기본적으로 JEUS Scheduler에 대한 설정을 하지 않으면 기본값으로 JEUS Scheduler가 초기화되기 때문에 JEUS 노드 Scheduler Service 외에는 무설정으로 JEUS Scheduler를 사용할 수 있다.

3.2. JEUS 노드 설정

원격에서 JEUS 노드 Scheduler Service에 접근하는 경우나 Job-list를 이용하여 JEUS 서버에서 주기적인 작업을 수행하려면 JEUS 노드 Scheduler Service를 활성화시켜야 한다. JEUS 노드 Scheduler Service를 활성화하려면 다음과 같이 JEUSMain.xml 설정 파일에서 <enabled> 값을 true로 설정한다.

[예 3.1] JEUS 노드 Scheduler Service 활성 : <<JEUSMain.xml>>

<jeus-system>
    <node>
        . . .
        <scheduler>
          <enabled>true</enabled>
        </scheduler>
        . . .
    </node>
    . . .
</jeus-system>


또한 다음과 같이 Thread Pool에 대한 구체적인 설정도 가능하다.

<jeus-system>
    <node>
        . . .
        <scheduler>
          <enabled>true</enabled>

          <!-- Scheduler Thread-pool settings -->
          <thread-pool>
            <min>2</min>
            <max>30</max>
            <period>3600000</period>
          </thread-pool>

        </scheduler>
        . . .
    </node>
    . . .
</jeus-system>

Thread Pool 관련 설정은 일반적인 JEUS Thread Pool 설정과 동일하다.

항목설명
minScheduler Service를 수행하는 Thread Pool의 최솟값이다.
maxScheduler Service를 수행하는 Thread Pool의 최댓값이다.
periodThread Pool의 개수를 <min> 값만큼 줄이는 정리 주기이다.

참고

설정 파일을 수정한 후에는 JEUS 서버를 재기동해야 반영된다. 자세한 사항은 "참고 자료"의 XML Reference를 참고한다.

3.3. JEUS 엔진 컨테이너 설정

Java EE 컴포넌트에서 사용하는 JEUS Scheduler Service를 역시 JEUSMain.xml 설정 파일에서 설정할 수 있다. 설정하는 방식은 JEUS 노드 설정과 동일하게 JEUSMain.xml 설정 파일에서 <engine-container> 하위의 <scheduler>에서 <enabled> 값을 true로 설정해야 한다.

Thread Pool에 대해서도 JEUS 노드 설정 방식과 동일하게 설정한다.

[예 3.2] JEUS 엔진 컨테이너 설정 : <<JEUSMain.xml>>

<jeus-system>
    <node>
        . . .
        <engine-container>
            . . .
          <!-- Engine-Container Scheduler Service -->
          <scheduler>
            <enabled>true</enabled>
        
            <!-- Scheduler Thread-pool settings -->
            <thread-pool>
              <min>2</min>
              <max>30</max>
              <period>3600000</period>
            </thread-pool>
       
          </scheduler>
            . . .
        </engine-container>
        . . .
    </node>
    . . .
</jeus-system> 


참고

설정 파일을 수정한 후에는 JEUS 서버를 재기동해야 반영된다.

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

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

[예 3.3] 클라이언트 컨테이너 설정 : <<jeus-client-dd.xml>>

<?xml version="1.0"?>
<jeus-client-dd>
    <module-info>
        ...
    </module-info>
    ...
    <scheduler>
        <enabled>true</enabled>      
        <!-- Scheduler Thread-pool settings -->
        <thread-pool>
          <min>2</min>
          <max>30</max>
          <period>3600000</period>
        </thread-pool>       
    </scheduler>
</jeus-client-dd>


참고

위의 설정 파일을 수정한 후에 JEUS 서버를 재기동할 필요는 없지만, 클라이언트 모듈과 클라이언트 컨테이너는 재기동해야 수정한 설정 내용이 반영된다. 클라이언트 컨테이너와 애플리케이션 클라이언트에 대해서는 "JEUS Client Application 안내서"를 참조한다.

3.5. Job-list 설정

프로그램 코드에서 작업을 등록하는 것 외에, JEUS 설정 파일에 작업을 등록하면 JEUS 서버가 구동될 때 작업이 자동으로 Scheduling된다.

Job은 Scheduling될 하나의 작업 단위를 말한다. Job에 해당하는 클래스는 반드시 jeus.schedule.ScheduleListener를 구현해야 하며 해당 클래스와 관련 클래스를 jar 파일로 묶어 다음의 경로에 위치시켜야 한다.

JEUS_HOME\lib\application

Job은 JEUS 노드나 JEUS 엔진 컨테이너에 등록할 수 있고, 다음과 같이 등록하는 곳에 따라 수행되는 위치와 설정 방법이 달라진다.

  • JEUS 노드에 등록할 경우

    • JEUS 노드 Scheduler Service에서 작업을 수행한다.

    • JEUSMain.xml 설정 파일에서 <node><scheduler> 하위에 <job-list>를 추가하여 Job-list를 설정한다.

  • JEUS 엔진 컨테이너에 등록할 경우

    • JEUS 엔진 컨테이너 Scheduler Service에서 작업을 수행한다.

    • JEUSMain.xml 설정 파일에서 <engine-container><scheduler> 하위에 <job-list>를 추가하여 Job-list를 설정한다.

다음은 Job을 등록하는 예제이다.

[예 3.4] 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>


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

태그설명
<class-name>작업 클래스 파일 이름(fully-qualified class name)을 지정한다.
<name>옵션 파라미터로 작업에 대한 이름을 지정한다.
<description>옵션 파라미터로 작업에 대한 설명을 지정한다.
<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>이 과거인 경우에는 작업은 한번도 수행되지 않는다.

<interval>

작업 주기를 설정한다.

<millisecond>, <minutely>, <hourly>, <daily> element를 이용하여 입력한다.

<count>옵션 파라미터로 작업의 최대 수행 횟수를 지정한다. 설정되지 않거나 -1인 경우 최대 수행 횟수에 제한이 없다.

참고

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