내용 목차
본 장에서는 JEUS 설정 파일이나 Deployment Descriptor(DD)에 JEUS Scheduler를 설정하는 방법에 대해서 설명한다.
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 설정을 해야 한다.
본 절에서는 실제 작업을 수행할 Job을 등록하는 방법에 대해 설명한다.
프로그램 코드에서 작업을 등록하는 것 외에 JEUS 설정 파일에 작업을 등록하면 JEUS 서버가 구동될 때 작업이 자동으로 scheduling된다. Job은 scheduling될 하나의 작업 단위를 의미한다. Job에 해당하는 클래스는 반드시 jeus.schedule.ScheduleListener를 구현해야 하며 해당 클래스와 관련 클래스를 JAR 파일로 묶어 다음의 경로에 위치시켜야 한다.
아래 디렉터리는 Domain Administration Server(이하 DAS)와 Managed Server(이하 MS) 사이에 동기화되지 않기 때문에 사용자가 수동으로 동기화해야 한다.
DOMAIN_HOME/lib/application
아래 디렉터리는 JEUS를 설치했을 때 생성되는 디렉터리가 아니므로 사용자가 직접 생성해서 위치시켜야 한다.
SERVER_HOME/lib/application
Job은 서버에 설정하면 JEUS Scheduler Service에서 작업이 수행된다.
다음은 Job을 설정할 때 주의해서 작성해야 할 항목에 대한 설명이다.
항목 | 설명 |
---|---|
Begin Time | 작업이 최초로 수행될 시간을 지정한다. 설정하지 않을 경우 JEUS 서버가 기동할 때 시작한다.
만약 등록한 작업의 Begin Time이 과거이면 주기적으로 현재 시간 이후에 최초의 수행되어야 할 시간에 최초 수행되도록 조정된다. |
End Time | 작업이 끝날 시간을 지정한다. 설정되지 않을 경우 종료하지 않는다.
End Time이 과거인 경우에 작업은 한 번도 수행되지 않는다. |
Count | 작업의 최대 수행 횟수를 지정한다. 설정되지 않거나 -1인 경우 최대 수행 횟수에 제한이 없다. |
Job-list 방식으로 등록된 작업은 Fixed-rate 방식으로 반복된다. 따라서 비교적 정확한 시간에 호출되지만 작업 수행시간이 오래 걸릴 때는 작업이 동시에 진행될 수 있기 때문에 작업이 Thread-safe하도록 고려해야 한다.
본 절에서는 WebAdmin을 통해 실제 서버에 Scheduler를 설정하는 방법에 대해서 설명한다.
원격에서 JEUS 서버 Scheduler Service에 접근하거나 Job-list를 이용하여 JEUS 서버에서 주기적인 작업을 수행하려면 서버에 Scheduler Service를 활성화시켜야 한다. Scheduler Service를 활성화하려면 다음과 같이 WebAdmin에서 Scheduler Service를 사용하겠다는 설정을 해야 한다. 이 설정이 되어 있어야 서버가 부팅할 때 Scheduler Service를 시작시킨다.
다음은 “2.3.2. Schedule 클래스 상속”에서 작성한 예제를 서버에 Job으로 추가하는 과정이다.
WebAdmin의 왼쪽 메뉴에서 [Servers]를 선택하면, 서버 목록 조회 화면으로 이동한다. 서버 목록에서 Scheduler 설정을 변경할 서버(server1)을 선택한다.
Server 설정화면에서 [Resource] > [Scheduler] 메뉴를 선택하면 Scheduler 설정화면으로 이동한다.
WebAdmin 왼쪽 메뉴 하단에 위치한 [LOCK & EDIT] 버튼을 클릭하여 Scheduler 설정변경을 위한 Lock을 가져와야 한다. Lock 설정변경에 대한 자세한 설명은 “JEUS WebAdmin 안내서”의 “2.4.4. Lock 기능”을 참고한다.
Lock을 설정한 후에 Scheduler 설정을 변경할 수 있다.
'Enabled' 항목이 체크하고 고급 선택사항 영역에서 Scheduler에서 사용할 Thread Pool 정보를 설정한다. Scheduler의 Thread Pool에 관한 내용은 “3.4. Thread Pool 설정”을 참고한다.
설정이 완료되면 [확인] 버튼을 클릭한다. 저장이 완료되면 화면 상단에는 설정변경 저장에 대한 결과 메시지가 나타난다. 'Enabled' 항목이 체크되어 있는 상태라면 이 과정은 생략한다.
Job을 추가하기 위해서는 화면 하단에 Job 목록에서 [ADD] 버튼을 클릭한다.
Job 설정화면에서 Job의 이름과 Job을 수행할 클래스 이름, Job이 수행될 주기를 입력하고 [확인] 버튼을 클릭한다.
다음은 [확인] 버튼을 클릭하여 변경한 내용이 임시 저장된 후의 결과 화면이다. 화면 상단에서 임시저장 결과에 대한 메시지와 Job 목록에서 추가한 Job을 확인할 수 있다.
[Activate Changes] 버튼을 클릭해서 Scheduler를 추가한 내용을 반영한다.
운영 중인 서버에 Scheduler를 추가하거나 변경하는 작업은 동적으로 반영되지 않는다. 설정만 저장해 두었다가 서버가 재기동될 때 반영된다.
서버를 재기동하면 추가한 Job이 수행되면서 서버 로그에 로깅된 결과를 조회할 수 있다.
##### waked on Tue Apr 23 14:50:19 KST 2013 ##### waked on Tue Apr 01 15:20:19 KST 2013
Scheduler Service는 Thread Pool을 설정하여 Scheduler Service를 수행하는 데 필요한 Thread의 개수를 조절한다. Thread Pool은 System Thread Pool을 공유해서 사용하는 공용 Thread Pool과 별도의 Thread Pool을 설정하는 전용 Thread Pool로 나뉜다.
본 절에서는 WebAdmin과 콘솔 툴을 사용해서 Thread Pool을 설정하는 방법에 대해서 설명한다. 항목에 대한 자세한 내용은 “JEUS Server 안내서”의 “2.3.3. Thread Pool 설정”을 참고한다.
Scheduler Service에서 공용 Thread Pool을 사용할 경우는 Thread 개수만 미리 할당해 놓으면 된다.
다음은 WebAdmin을 사용해서 Thread Pool을 설정하는 과정에 대한 설명이다. Thread Pool을 설정하기 전에 Lock 설정을 변경해야 한다.
Scheduler 설정화면에서 고급 선택사항에서 Thread Pool 설정을 변경할 수 있다.
고급 선택사항의 Pooling 설정에서 'Shared' 항목을 선택하고, 'Reserved Thread Num'의 개수를 10으로 설정한다. [확인] 버튼을 클릭하면 변경한 설정이 임시 저장되고, 화면 상단에서 저장 결과에 대한 메시지를 확인할 수 있다.
[Activate Changes] 버튼을 클릭해서 서버에 반영한다. 서버에 Activate가 완료되면 설정한 Scheduler의 Thread Pool 설정이 서버에 반영되고, 반영에 대한 결과를 WebAdmin 화면 상단에 자세한 메시지로 보여준다.
Thread Pool 설정은 동적 반영 가능한 항목이므로 운영 중인 서버에 변경된 설정이 적용된다.
다음은 콘솔 툴(jeusadmin)을 통해 Scheduler의 Thread Pool을 설정하는 방법이다.
[예 3.1] jeusadmin에서 공용 Thread Pool 설정
[DAS]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 appli ed after restarting. Check the results using "show-system-thread-pool server1 -service scheduler or modify-system-thread-pool server1 -service scheduler" [DAS]domain1.adminServer>show-system-thread-pool server1 -service scheduler Show the current configuration. The sheduler thread pool of the server (server1). ================================================================================ +---------------------------------------------------------------------+--------+ | Reserved Threads for the Service scheduler | 10 | +---------------------------------------------------------------------+--------+ ================================================================================
Scheduler Service에서 전용 Thread Pool을 사용할 경우 WebAdmin과 콘솔 툴(jeusadmin)을 통해 설정할 수 있다. 본 절에서는 WebAdmin과 콘솔 툴을 사용하여 전용 Thread Pool을 설정하는 방법에 대해 설명한다.
다음은 WebAdmin을 사용해서 Thread Pool을 설정하는 과정에 대한 설명이다. Thread Pool을 설정하기 전에 Lock 설정을 변경해야 한다.
WebAdmin의 왼쪽 메뉴에서 [Servers]를 선택하면, 서버 목록 조회 화면으로 이동한다. ([그림 3.1])
서버 목록에서 설정할 서버(server1)를 선택하고, [Resource] > [Scheduler] 메뉴를 선택해서 Scheduler 화면으로 이동한다.
WebAdmin의 왼쪽 메뉴에서 [LOCK & EDIT] 버튼을 클릭해서 설정변경 모드로 전환한 후에 고급 선택사항에서 Thread Pool 설정을 변경할 수 있다. Lock 설정변경 모드에 대한 자세한 설명은 “JEUS WebAdmin 안내서”의 “2.4.4. Lock 기능”을 참고한다.
고급 선택사항에서 'Pooling'을 체크하고 'Dedicated' 항목을 선택한다. 'Min'에 0, 'Max'를 20으로 설정하고 [확인] 버튼을 클릭하면 변경한 설정이 임시 저장되고, 화면 상단에서 저장 결과에 대한 메시지를 확인할 수 있다.
[Activate Changes] 버튼을 클릭해서 서버에 반영한다. 서버에 Activate가 완료되면 설정한 Scheduler의 Thread Pool 설정이 서버에 반영되고, 반영에 대한 결과를 WebAdmin 화면 상단에 자세한 메시지로 보여준다.
Thread Pool 설정은 동적 반영 가능한 항목이므로 운영 중인 서버에 변경된 설정이 적용된다.
다음은 콘솔 툴(jeusadmin)을 통해 Scheduler의 Thread Pool을 설정하는 방법이다.
[예 3.2] jeusadmin을 통해 Scheduler Service 공용 Thread Pool 설정
[DAS]domain1.adminServer>show-service-thread-pool server1 -service scheduler Shows the current configuration. ================================================== +------+-----------------------------------------+ (No data available) ================================================== [DAS]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 appli ed after restarting. Check the results using "show-service-thread-pool server1 -service scheduler or modify-service-thread-pool server1 -service scheduler" [DAS]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 | | Stuck Thread Action | NONE | +--------------------------------------------------------+---------+ ====================================================================
Scheduler Service의 Thread Pool 설정을 수정하는 것은 동적 반영 가능하기 때문에 서버를 재기동하지 않아도 된다. 하지만 공용 Thread Pool을 사용하다가 전용 Thread Pool을 사용하도록 Thread Pool의 타입을 변경하는 경우 동적 반영되지 않기 때문에 서버를 재기동해야 한다.
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 -->
<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 설정 예제이다.
[예 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>