본 장에서는 JEUS 설정 파일이나 Deployment Descriptor(DD)에 JEUS Scheduler를 설정하는 방법에 대해서 설명한다.
JEUS Scheduler Service를 사용하기 위해서는 각 서비스별로 다음과 같이 설정해야 한다.
기본적으로 JEUS Scheduler에 대한 설정을 하지 않으면 기본값으로 JEUS Scheduler가 초기화되기 때문에 JEUS 노드 Scheduler Service 외에는 무설정으로 JEUS Scheduler를 사용할 수 있다.
원격에서 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 설정과 동일하다.
항목 | 설명 |
---|---|
min | Scheduler Service를 수행하는 Thread Pool의 최솟값이다. |
max | Scheduler Service를 수행하는 Thread Pool의 최댓값이다. |
period | Thread Pool의 개수를 <min> 값만큼 줄이는 정리 주기이다. |
설정 파일을 수정한 후에는 JEUS 서버를 재기동해야 반영된다. 자세한 사항은 "참고 자료"의 XML Reference를 참고한다.
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 서버를 재기동해야 반영된다.
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 안내서"를 참조한다.
프로그램 코드에서 작업을 등록하는 것 외에, 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>
다음은 각 태그에 대한 설명이다.
Job-list 방식으로 등록된 작업은 Fixed-rate 방식으로 반복된다. 따라서 비교적 정확한 시간에 호출되지만 작업 수행시간이 오래 걸릴 때는 작업이 동시에 진행될 수 있기 때문에 작업이 thread-safe하도록 고려해야 한다. 보다 자세한 설정 항목과 설명은 "참고 자료"를 참고한다.