JEUS

Similar documents
JEUS

Tmax

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에

개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다.

Interstage5 SOAP서비스 설정 가이드

rmi_박준용_final.PDF

Microsoft Word - AnyLink Introduction v3.2.3.doc

교육2 ? 그림

Network Programming

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

untitled

개발및운영 Tibero DB Link (Tibero To Oracle) - Local 방식

PowerPoint 프레젠테이션

PowerPoint Presentation

JUNIT 실습및발표

C++ Programming

제11장 프로세스와 쓰레드

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

Microsoft PowerPoint - 04-UDP Programming.ppt

Tibero

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

Intro to Servlet, EJB, JSP, WS

PowerPoint Presentation

Chap12

API 매뉴얼

PowerPoint 프레젠테이션

Microsoft PowerPoint - RMI.ppt

[JEUS 7] eclipse plug-in 연동 1. 개요 Eclipse 와 JEUS 7 연동시필요한 plug-in 제공및환경설정에관한가이드제공하여 Eclipse 에서 JEUS 7 기동및 종료테스트할수있는방법을기술하였습니다. 2. Plug-in 설치 2.1 [Step

1

마리오와 소닉 리우 올림픽™

제8장 자바 GUI 프로그래밍 II

설치및환경설정 JEUS Thread State Notify 설정

비긴쿡-자바 00앞부속

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint 프레젠테이션

Design Issues

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

gnu-lee-oop-kor-lec06-3-chap7

MasoJava4_Dongbin.PDF

인디쓔피-IOM핸돜벁닄큐1014pdf, page Preflight ( IOM핸돜벁닄큐__1014 )

JVM 메모리구조

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

API 매뉴얼

슬라이드 1

No Slide Title

09 강제근로의 금지 폭행의 금지 공민권 행사의 보장 중간착취의 금지 41 - 대판 , 2006도7660 [근로기준법위반] (쌍용자동차 취업알선 사례) 11 균등대우의 원칙 43 - 대판 , 2002도3883 [남녀고용평등법위

개발및운영 Tibero Perl 연동

Windows 8에서 BioStar 1 설치하기

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

목차 1. 노드매니저종류 Java Type SSH Type 노드설정파일및로깅 nodes.xml jeusnm.properties <servername>.properties...

PowerPoint 프레젠테이션

歯Writing_Enterprise_Applications_2_JunoYoon.PDF

Spring Boot

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

(Microsoft PowerPoint - Chapter17 RMI.ppt [\310\243\310\257 \270\360\265\345])

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 09. 예외처리

목차 JEUS JNLP Client Sample 가이드 JNLP 란 JNLP의이점 TEST TEST 환경 TEST Sample sample application 셋팅 (ser

어댑터뷰

JMF2_심빈구.PDF

개발및운영 Eclipse 를이용한 ANT 활용방법

자바 프로그래밍

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 03-TCP Programming.ppt

fundamentalOfCommandPattern_calmglow_pattern_jstorm_1.0_f…

ALTIBASE 사용자가이드 Templete

쉽게 풀어쓴 C 프로그래밊


Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

튜닝및모니터링 HP JVM 튜닝옵션

교육자료

JMF3_심빈구.PDF

JEUS 소개

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

JEUS

JavaGeneralProgramming.PDF

PowerPoint 프레젠테이션

PowerPoint Presentation

신림프로그래머_클린코드.key

Cluster management software

JEUS

C# Programming Guide - Types

untitled

.

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

BSC Discussion 1

설치및환경설정 Tibero tbprobe 사용법과원격지포트체크

gnu-lee-oop-kor-lec10-1-chap10

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

[Brochure] KOR_TunA

쉽게 풀어쓴 C 프로그래밍

J2EE Concepts

Transcription:

JEUS Scheduler 안내서 JEUS v6.0 Fix#8 Copyright 2011 TmaxSoft Co., Ltd. All Rights Reserved.

Copyright Notice Copyright 2011 TmaxSoft Co., Ltd. All Rights Reserved. 대한민국경기도성남시분당구서현동 272-6 우 ) 463-824 Restricted Rights Legend All TmaxSoft Software (JEUS ) and documents are protected by copyright laws and the Protection Act of Com puter Programs, and international convention. TmaxSoft software and documents are made available under the terms of the TmaxSoft License Agreement and may only be used or copied in accordance with the terms of this agreement. No part of this document may be transmitted, copied, deployed, or reproduced in any form or by any means, electronic, mechanical, or optical, without the prior written consent of TmaxSoft Co., Ltd. 이소프트웨어 (JEUS ) 사용설명서의내용과프로그램은저작권법, 컴퓨터프로그램보호법및국제조약에의해서보호받고있습니다. 사용설명서의내용과여기에설명된프로그램은 TmaxSoft Co., Ltd. 와의사용권계약하에서만사용이가능하며, 사용권계약을준수하는경우에만사용또는복제할수있습니다. 이사용설명서의전부또는일부분을 TmaxSoft의사전서면동의없이전자, 기계, 녹음등의수단을사용하여전송, 복제, 배포, 2차적저작물작성등의행위를하여서는안됩니다. Trademarks JEUS is registered trademark of TmaxSoft Co., Ltd. Other products, titles or services may be registered trademarks of their respective companies. JEUS 는 TmaxSoft Co., Ltd. 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Open Source Software Notice This product includes open source software developed and/or licensed by "OpenSSL", "RSA Data Security, Inc.", "Apache Foundation", and "Jean-loup Gailly and Mark Adler". Information about the aforementioned and the related open source software can be found in the "${INSTALL_PATH/license/oss_licenses" directory. 본제품은 OpenSSL, RSA Data Security, Inc., Apache Foundation 및 Jean-loup Gailly와 Mark Adler 에의해개발또는라이선스된오픈소스소프트웨어를포함합니다. 관련상세정보는제품의디렉터리 ${IN STALL_PATH/license/oss_licenses 에기재된사항을참고해주십시오. 안내서정보안내서제목 : JEUS Scheduler 안내서발행일 : 2011-11-04 소프트웨어버전 : JEUS v6.0 Fix #8 안내서버전 : v2.1.3

내용목차 안내서에대하여... ix 제1장 소개... 1 1.1. 개요... 1 1.2. Scheduler 컴포넌트구조... 2 1.3. Scheduler 서버... 3 제2장 Scheduler 프로그래밍... 5 2.1. 개요... 5 2.2. JEUS Scheduler 클래스... 6 2.3. 작업정의... 7 2.3.1. ScheduleListener 인터페이스구현... 7 2.3.2. Schedule 클래스상속... 8 2.3.3. RemoteSchedule 클래스상속... 9 2.4. Scheduler 객체얻기... 10 2.4.1. 로컬환경에서 Scheduler 객체얻기... 10 2.4.2. 원격환경에서 Scheduler 객체얻기... 11 2.5. 작업등록... 11 2.5.1. 한번수행되는작업등록... 11 2.5.2. 반복되는작업등록... 12 2.5.3. Schedule 작업객체등록... 13 2.6. 작업제어... 14 2.7. Scheduler 사용... 15 2.7.1. Standalone 환경에서사용... 15 2.7.2. JEUS 노드에서사용... 17 2.7.3. Java EE 컴포넌트에서사용... 19 2.8. Job-list 사용... 20 제3장 Scheduler 설정... 21 3.1. 개요... 21 3.2. JEUS 노드설정... 21 3.3. JEUS 엔진컨테이너설정... 22 3.4. 클라이언트컨테이너설정... 23 3.5. Job-list 설정... 24 용어해설... 27 색인... 29 JEUS iii

그림목차 [ 그림 1.1] JEUS에서의 Scheduler Component... 2 [ 그림 1.2] Scheduler 서버별수행방식... 3 [ 그림 2.1] Scheduler API 클래스... 6 JEUS v

예목차 [ 예 2.1] Task object example... 8 [ 예 2.2] Schedule object example... 9 [ 예 2.3] RemoteSchedule object example... 9 [ 예 2.4] 한번수행되는작업등록... 12 [ 예 2.5] 반복되는작업등록... 13 [ 예 2.6] Schedule 작업객체등록... 14 [ 예 2.7] ScheduleController.cancel 메소드사용... 14 [ 예 2.8] Standalone 클라이언트에서 Scheduler 사용... 15 [ 예 2.9] 리모트클라이언트에서 Scheduler 사용... 17 [ 예 2.10] EJB에서 JEUS Scheduler 사용... 19 [ 예 3.1] JEUS 노드 Scheduler Service 활성 : <<JEUSMain.xml>>... 21 [ 예 3.2] JEUS 엔진컨테이너설정 : <<JEUSMain.xml>>... 22 [ 예 3.3] 클라이언트컨테이너설정 : <<jeus-client-dd.xml>>... 23 [ 예 3.4] Job-list 설정 : <<jeus-client-dd.xml>>... 24 JEUS vii

안내서에대하여 안내서의대상 본안내서는 JEUS Scheduler 기능을사용하고자하는관리자나프로그래머를대상으로한다. 안내서의전제조건 본안내서는 JEUS 시스템에대한전반적인이해와 JEUS 시스템이제공하는각종기능및특성에대한습득을위한기본서이다. 본안내서를원활하게이해하기위해서는다음과같은사항을미리알고있어야한다. RMI 및 JNDI에대한이해 JEUS의기본개념이해 Java에대한기본적인이해 안내서의제한조건 본안내서는제품특성상언급되는 Java EE나 Java 스펙에대해서자세히다루지않는다. 따라서해당내용은 Java 관련문서를참고한다. 실무에서의구체적인사용방법이나관리및운용에관한사항은각제품의안내서를참고한다. 참고 JEUS 시스템에대한기본적인내용은 "JEUS 소개 " 나 "JEUS 설치및시작하기 " 를참고한다. 안내서에대하여 ix

안내서구성 본안내서는총 3개의장으로구성되어있다. 제1장소개 JEUS Scheduler의기능과사용가능한환경, 여러가지수행방식에대해서설명한다. 제2장 Scheduler 프로그래밍 JEUS Scheduler 프로그래밍에필요한기본지식과사용방법에대해서설명한다. 제3장 Scheduler 설정 JEUS Scheduler를설정하는방법에대해서설명한다. x JEUS Scheduler 안내서

안내서규약 표기 <<AaBbCc123>> <Ctrl>+C [Button] 진하게 " "( 따옴표 ) ' 입력항목 ' 하이퍼링크 > +---- ---- 참고주의 [ 그림 1.1] [ 표 1.1] AaBbCc123 의미프로그램소스코드의파일명 Ctrl과 C를동시에누름 GUI의버튼또는메뉴이름강조다른관련안내서또는안내서내의다른장및절언급화면 UI에서입력항목에대한설명메일계정, 웹사이트메뉴의진행순서하위디렉터리또는파일있음하위디렉터리또는파일없음참고또는주의사항주의할사항그림이름표이름 Java 코드, XML 문서 [ command argument ] < xyz > 옵션파라미터 < 와 > 사이의내용이실제값으로변경됨선택사항. 예 ) A B: A나 B 중하나파라미터등이반복되어서나옴 안내서에대하여 xi

시스템사용환경 본안내서는모든예제와환경구성을 Microsoft Windows 의스타일을따랐다. UNIX와같은다른환경에서작업하는사람은몇가지사항만고려하면별무리없이사용할수있다. 대표적인것이디렉터리구분자인데, Windows 스타일인 \ 를 UNIX 스타일인 / 로바꿔서사용하면무리가없다. 이외에환경변수도 UNIX 스타일로변경해서사용하면된다. 그러나 Java 표준을고려해서문서를작성했기때문에, 대부분의내용은동일하게적용된다. 관련안내서 안내서 JEUS 소개 JEUS 설치및시작하기 JEUS Server 안내서 JEUS Application Client 안내서 JEUS WebAdmin 안내서 설명 JEUS 6 서버에대한전반적인소개와 JEUS의아키텍처를포함하여각구성요소들에대해설명한안내서이다. JEUS에대한소개와설치및시작방법에대해기술한안내서이다. JEUS 시스템과서버의개요와시스템관리를위한안내서이다. Java EE 클라이언트와 JEUS 사이의상호운용에대해기술한안내서이다. JEUS의웹관리툴인 WebAdmin을사용한 JEUS 의설정및제어, 모니터링, 클러스터링, 리소스설정및관리에대해기술한안내서이다. 참고자료 Javadoc JEUS API JEUS_HOME\docs\api\jeusapi\index.html XML Reference - Scheduler JEUSMain.xml 설정 JEUS_HOME\docs\reference\schema\index.html xii JEUS Scheduler 안내서

연락처 Korea TmaxSoft Co., Ltd 272-6, Seohyeon-dong, Bundang-gu, Seongnam-si, Gyeonggi-do, 463-721 South Korea Tel: +82-31-8018-1000 Fax: +82-31-8018-1115 Email: info@tmax.co.kr Web (Korean): http://www.tmax.co.kr 기술지원 : http://technet.tmaxsoft.com USA TmaxSoft, Inc. 560 Sylvan Avenue Englewood Cliffs, NJ 07632 U.S.A Tel: +1-201-567-8266 Fax: +1-201-567-7339 Email: info@tmaxsoft.com Web (English): http://www.tmaxsoft.com Japan TmaxSoft Japan Co., Ltd. 5F Sanko Bldg, 3-12-16 Mita, Minato-Ku, Tokyo, 108-0073 Japan Tel: +81-3-5765-2550 Fax: +81-3-5765-2567 Email: info@tmaxsoft.co.jp Web (Japanese): http://www.tmaxsoft.co.jp 안내서에대하여 xiii

China TmaxSoft China Co., Ltd. Beijing Silver Tower, RM 1508, 2# North Rd Dong San Huan, Chaoyang District, Beijing, China, 100027 China Tel: +86-10-6410-6145~8 Fax: +86-10-6410-6144 Email: info.cn@tmaxsoft.com Web (Chinese): http://www.tmaxsoft.com.cn xiv JEUS Scheduler 안내서

제 1 장소개 본장에서는 JEUS Scheduler 의사용방법에대해서설명한다. 1.1. 개요 JEUS Scheduler는정해진시간에수행되거나반복적으로수행되는작업을스케줄링할수있는기능을제공한다. Scheduler는 JEUS의확장된기능으로, 정해진시간에혹은주기적으로작업을수행해야할때사용할수있다. EJB의경우 Timer Service와같은기능을제공하는데, 이와유사한목적을지니고있으며, EJB 환경이아니더라도사용할수있다. 예를들어, 주기적으로임시파일을삭제한다거나, 주기적으로데이터베이스커넥션을체크하는등의시스템관리에사용할수도있다. Java EE 환경에서 Timer Service를이용하고자할때 Java SE Timer(java.util.Timer) 를직접사용할수없으므로 EJB Timer Service를사용하거나 JEUS에서제공하는 JEUS Scheduler를사용해야한다. EJB Timer Service는 EJB 환경에서만사용할수있는데반하여, JEUS Scheduler는모든 Java EE 환경에서사용할수있고일반 Java SE 애플리케이션에서도사용이가능하다. JEUS Scheduler는 Java SE Timer(java.util.Timer) 와유사하기때문에 Java SE Timer에익숙하다면 JEUS Scheduler를쉽게사용할수있다. 또한 Java SE Timer에는없는작업종료시점 (end time) 과최대수행횟수 (max count) 를지정할수있는기능도제공한다. JEUS Scheduler는다음과같이다양한환경에서사용이가능하다. Java SE 애플리케이션에서 Standalone Scheduler 사용 Java EE 애플리케이션클라이언트에서 Standalone Scheduler 사용 JEUS 노드 Scheduler Service를원격에서접속하여사용 JEUS 노드설정파일에 Job을등록해서사용 JEUS 엔진컨테이너 Scheduler Service를 Java EE 컴포넌트에서사용 JEUS 엔진컨테이너설정파일에 Job을등록해서사용 제 1 장소개 1

1.2. Scheduler 컴포넌트구조 JEUS Scheduler는사용자애플리케이션내에서사용할수도있고 JEUS 서버에서사용할수도있다. JEUS 서버는원격에서접속할수있는 Scheduler Service를구동시킬수있으며설정파일을통해스케줄링될작업을등록할수도있다. JEUS Scheduler의컴포넌트는다음과같은구조를갖는다. [ 그림 1.1] JEUS에서의 Scheduler Component JEUS Manager JNDI Server (JNS serv) Security Server External sources Data source / pool Mail/ URL source Other sources JEUS Node Session Server JMX manager ClassFTP server Scheduler server JNLP server Web Admin Server Logging Active Mngmnt. Misc. settings JEUS Engine Container (one or more) JEUS EJB Engine JEUS Servlet Engine JEUS JMS Engine JEUS WS Engine Security Client TX manager JMX manager Scheduler server Logging/A ctive Mngmnt. Misc. settings JNDI Client (JNSLocal) 2 JEUS Scheduler 안내서

1.3. Scheduler 서버 Scheduler 서버의종류에따라 Scheduler의수행방식이달라지고, Scheduler Service가구분된다. 다음은 Scheduler 서버의종류에따른수행방식을나타낸다. [ 그림 1.2] Scheduler 서버별수행방식 Client VM Scheduler Server Client App JEUS Node VM Scheduler Server Client VM Client App Engine Container VM Scheduler Server Servlet EJB 1. Local VM use 2. JEUS node use 3. Engine container use 각각의 Scheduler Service를사용하는경우를살펴보자. 클라이언트 Scheduler Service 애플리케이션클라이언트에서 Standalone 방식으로구동되는 JEUS Scheduler Service는애플리케이션클라이언트내부에서어떠한작업을주기적으로수행하는경우주로사용한다. 또한애플리케이션클라이언트가종료되면더이상수행될필요가없는작업인경우에사용한다. 노드 Scheduler Service 애플리케이션클라이언트에관계없이항상주기적으로수행되어야할작업을스케줄링할때주로사용한다. 서버에서항상수행되어야할주기적인작업이있다면 Joblist에미리등록하여서버가구동할때수행되도록할수도있다. 엔진컨테이너 Scheduler Service JEUS 엔진컨테이너 Scheduler Service는주로 Java EE 컴포넌트들 (Servlet/JSP, EJB 등 ) 이주기적으로수행되는작업을스케줄링할때주로사용한다. 제 1 장소개 3

제 2 장 Scheduler 프로그래밍 본장에서는 JEUS Scheduler 프로그래밍에필요한기본지식과사용방법에대해서설명한다. 2.1. 개요 JEUS 5.0 이후버전에서는이전 (4.x) 에사용되던방식과비교하여다음과같이몇가지사항이변경및추가되었다. 하지만 JEUS 5.0 Scheduler는기존버전과호환성을유지하고있기때문에기존에작성된프로그램도별도의수정없이운영가능하다. SchedulerListener 인터페이스추가작업을정의하기위한인터페이스로 ScheduleListener 인터페이스가추가되었다. ScheduleListener 인터페이스는최상위작업인터페이스로모든작업은이인터페이스를구현 (imple ments) 해야한다. 기존에존재하던스케줄작업클래스도이제는 ScheduleListener에서구현하고있다. 따라서이제는스케줄작업클래스를상속해서작업을정의하지않아도 ScheduleListener를구현해서작업을정의할수있다. SchedulerFactory 클래스추가기존에사용되던클라이언트와서버용 SchedulerManager는더이상사용되지않으며 (deprecated), 새롭게 SchedulerFactory 클래스가추가되었다. SchedulerFactory는 Scheduler 객체를얻는데사용되며 Scheduler 객체를통해클라이언트환경, 서버환경, 리모트클라이언트환경의구별없이작업을등록할수있다. 다양한메소드추가 Scheduler 인터페이스에는작업을등록하는다양한메소드들이추가되었다. 이제작업을등록할때시작시간, 주기, 종료시간, 최대수행횟수를지정할수있다. Thread Pool을이용한멀티스레드방식으로변경기존의 JEUS Scheduler는기본적으로싱글스레드방식으로작업을수행했지만새로운 JEUS Scheduler 는 Thread Pool을이용하여각작업을별도의스레드로동작시킨다. 따라서어떤한작업이수행중에블록되더라도다른작업수행에영향이없다. Job-list 기능추가프로그래밍방식으로작업을등록하지않고 JEUS 서버설정에작업을등록할수있는 Job-list 기능이추가되었다. JEUS Scheduler 프로그래밍을이해하기위해먼저 JEUS Scheduler를구성하고있는클래스들을살펴보고, 스케줄링작업을정의하는방법, 작업을등록하는방법, 등록된작업을제어하는방법에대해설명한다. 이후에 JEUS Scheduler를어떤경우에사용할수있는지를알아본다. 제 2 장 Scheduler 프로그래밍 5

본장에서설명하는모든예제는 JEUS samples 디렉터리에서찾아볼수있다. 예제파일들은 JEUS_HOME\samples\scheduler 디렉터리를참조한다. 2.2. JEUS Scheduler 클래스 기본적으로 JEUS Scheduler는 J2SE Timer와개념적인부분뿐만아니라유사한인터페이스를가지고있다. 작업을나타내는 java.util.timertask 클래스는 JEUS Scheduler의 jeus.schedule.schedulelistener 인터페이스와동일하고, 작업을등록하는 java.util.timer 클래스는 JEUS Scheduler의 jeus.schedule.scheduler 인터페이스와동일하다. 따라서, 이러한유사성을고려하여 JEUS Scheduler를사용한다면좀더쉽게익숙해질수있을것이다. 다음은각 API 클래스에대한설명이다. [ 그림 2.1] Scheduler API 클래스 SchedulerFactory get instances ScheduleListener registered Scheduler implements Schedule extends RemoteSchedule returns ScheduleController JeusScheduler Exception API 클래스 설명 package jeus.schedule interface ScheduleListener JEUS Scheduler의모든클래스와인터페이스는 jeus.schedule 패키지와그하위패키지에소속되어있다. 정해진시간에수행되어야할작업은 ScheduleListener 인터페이스를구현 (implements) 하여클래스로정의된다. ScheduleLis tener는하나의 Callback 메소드인 ontime() 을가지고있어해당시간이되었을때이메소드가호출된다. 6 JEUS Scheduler 안내서

API 클래스 abstract class Schedule 설명 Schedule 클래스는 ScheduleListener 를구현한추상클래스로 JEUS 5.0 이전에사용하던작업클래스이다. 이클래스는 ontime() 이외에도 nexttime() Callback 메소드가있어서작업을등록할때호출될시간을예약하는것이아니라작업을등록한후에동적으로다음호출될시간을결정할수있다. abstract class RemoteSchedule class SchedulerFactory interface Scheduler RemoteSchedule 추상클래스는특수한 Schedule 클래스로 ini tialize() Callbak 메소드를가지고있어객체생성시에초기화파라미터값을받을수있다. SchedulerFactory 클래스는실제 (concrete) Scheduler 객체를얻어오기위해사용된다. Scheduler 인터페이스는 JEUS Scheduler에작업을등록하기위한핵심인터페이스이다. 다양한 registerschedule() 메소드를정의하고있다. interface ScheduleController Scheduler 에작업을등록하면 ScheduleController 인터페이스를 구현한객체를리턴받는다. 이핸들객체는작업에대한정보를얻거나작업을취소할때사 용된다. exception JeusSchedulerException JEUS Scheduler 에작업등록하거나취소할때에내부적으로문 제가발생하는경우 JeusSchedulerException 이발생할수있다. 참고 각인터페이스나클래스에대한자세한설명은 JEUS Scheduler Javadoc API 를참고한다. 2.3. 작업정의 작업을수행하기위해서는먼저, 작업클래스를정의하고작업의수행시간및주기에따라알맞은방법으 로작업을정의해야한다. 2.3.1. ScheduleListener 인터페이스구현 정해진시간에수행되어야할작업은 ScheduleListener 인터페이스를구현 (implements) 하여클래스로정의된다. ScheduleListener는하나의 Callback 메소드인 ontime() 을가지고있어해당시간이되었을때이메소드가호출된다. 따라서작업클래스를정의하기위해서는 ontime() 메소드를구현하고메소드내에서작업을수행하도록프로그램을작성한다. 제 2 장 Scheduler 프로그래밍 7

[ 예 2.1] Task object example public class SimpleTask implements ScheduleListener { private String name; private int count; // no-arg constructor is required if classname is used for task registration public SimpleTask() { public SimpleTask(String name) { this.name = name;... public void ontime() { count++; echo("##### " + name + " is waked on " + new Date()); 2.3.2. Schedule 클래스상속 ScheduleListener를바로구현하지않고 Schedule 클래스나 RemoteSchedule 클래스를상속하여작업클래스를정의할수도있다. Schedule 클래스나 RemoteSchedule 클래스는 JEUS 5.0 이전 Scheduler에서사용되던작업클래스이다. JEUS 5.0 에서는일반적인작업을정의할때는 ScheduleListener를구현하도록하고있지만하위호환성을위해기존작업클래스를그대로제공하고있다. Schedule 추상클래스는 ontime() 이외에도 nexttime() 이라는 Callback 메소드가있어서작업을등록할때호출될시간을예약하지않고작업클래스내에서다음호출될시간을결정하도록한다. 따라서고정적인주기를갖는작업보다는가변적인주기를갖는작업의경우에좀더효휼적으로사용된다. JEUS Scheduler는 Schedule 작업객체의처음수행시간을결정하기위해작업객체를등록한후에먼저 nexttime() 을호출하여처음수행시간을정한다. 그런다음해당시간이되면 ontime() 을호출하여작업을수행하고 ontime() 이종료되면다시 nexttime() 을호출하여다음수행시간을정하게된다. nexttime() 은다음번에작업이수행될절대시간을 Milli-Second 값으로넘겨주어야한다. 이때 0을리턴하면작업이더이상수행되지않게된다. Schedule 작업객체는 ontime() 이수행된후에 nexttime() 을호출하기때문에 ontime() 에서작업을수행한시간만큼 nexttime() 호출이지체된다. 따라서정확한간격으로작업을호출하도록프로그래밍하기가쉽지않다. 그렇기때문에되도록작업내에서 nexttime() 을통해반복주기를구현하기보다는작업을등록할때반복주기를설정하는것이좋다. 8 JEUS Scheduler 안내서

[ 예 2.2] Schedule object example public class SimpleSchedule extends Schedule { private String name; private int count; private long period = 2000; // 2 seconds // no-arg constructor is required if classname is used for task registration public SimpleSchedule() { public SimpleSchedule(String name) { this.name = name; public void ontime() { count++; echo("##### " + name + " is waked on " + new Date());... public long nexttime(long currenttime) { return currenttime + period; 2.3.3. RemoteSchedule 클래스상속 RemoteSchedule 클래스는원격으로작업을등록할때초기화변수를지정할수있는 Schedule 객체이다. 주로원격에서클래스이름을통해작업객체를등록할때사용한다. 이클래스는 initialize() Callback 메소드를가지고있는데작업등록후에초기화파라미터로이메소드가한번호출된다. 따라서원격에서클래스이름으로작업을등록할때초기화값을주고싶을경우사용할수있다. initialize() Callback은 Scheduler.registerSchedule(classname, hashtable, daemon_flag) 메소드를이용하여 RemoteSchedule 작업객체를등록하는경우에만호출된다. [ 예 2.3] RemoteSchedule object example public class SimpleRemoteSchedule extends RemoteSchedule { private String name; private int count; private long period; // no-arg constructor is required if classname is used for task registration public SimpleRemoteSchedule() { 제 2 장 Scheduler 프로그래밍 9

// this is called by scheduler after creation public void initialize(hashtable parameters) { name = (String) parameters.get("name"); Long interval = (Long) parameters.get("interval"); if (interval!= null) period = interval.longvalue(); else period = 2000; public void ontime() { count++; echo("##### " + name + " is waked on " + new Date());... public long nexttime(long currenttime) { return currenttime + period; 참고작업을 Job-list를사용하여등록하거나 classname을사용하는 API를통해등록하는경우에는컨터이너가해당클래스를초기화하기때문에작업클래스에는 no-arg(default) constructor가반드시필요하다. 2.4. Scheduler 객체얻기 본절에서는 Scheduler 객체를얻는방법에대해서알아본다. JEUS Scheduler 는로컬환경과원격환경 에서모두구동된다. 2.4.1. 로컬환경에서 Scheduler 객체얻기 로컬환경에서구동된다는것은프로그램이구동되고있는로컬 JVM 내에 Scheduler 인스턴스가생성되며, 등록된모든작업이같은 JVM 내에서구동된다는것을의미한다. JEUS Scheduler는 JVM 내에서현재하나의인스턴스만생성되며이인스턴스를 Default Scheduler라고한다. 따라서현재는 JVM 내에모든클라이언트들이 Default Scheduler를공유하게된다. 로컬환경의 JEUS Scheduler는일반 J2SE 애플리케이션이나 Java EE 애플리케이션클라이언트, Java EE 컴포넌트등에서사용된다. 로컬환경의 JEUS Scheduler를사용하기위해서 SchedulerFactory를이용한다. 10 JEUS Scheduler 안내서

다음과같이간단하게 Default Scheduler 인스턴스를얻을수있다. // Get the default scheduler Scheduler scheduler = SchedulerFactory.getDefaultScheduler(); 2.4.2. 원격환경에서 Scheduler 객체얻기 원격환경에서구동된다는것은프로그램이구동되고있는 JVM이아닌원격의다른 JVM에서 Scheduler 인스턴스가생성되고등록된모든작업이원격 JVM 내에서구동된다는것을의미한다. 원격 Scheduler는 RMI 객체형태로나타나기때문에클라이언트는 RMI 콜을통해 JEUS Scheduler를사용하게된다. JEUS 환경에서는 JEUS 노드에원격 Scheduler Service가기동된다. 원격환경의 JEUS Scheduler는원격클라이언트가 JEUS 노드에작업을등록할때사용된다. JEUS 노드에있는원격 JEUS Scheduler를사용하기위해서 JNDI Lookup을이용한다. 다음과같이 JEUS 노드 Scheduler 인스턴스 (Stub) 를얻을수있다. // Get the remote scheduler InitialContext ic = new InitialContext(); Scheduler scheduler = (Scheduler)ic.lookup( Scheduler.NODE_SCHEDULER_NAME); 참고 JEUS 5.0 이전에사용되던 jeus.schedule.server.schedulermanager와 jeus.schedule.client.sched ulermanager는더이상사용되지않는다 (deprecated). 대신 SchedulerFactory를통해 Scheduler 객체를얻어서사용하기를권장한다. 하지만하위호환성을유지하기위해위클래스들은그대로제공된다. 2.5. 작업등록 본절에서는 Scheduler 인터페이스를이용하여작업을등록하는방법에대해서알아본다. 로컬환경이나원격환경에서 Scheduler 인스턴스를얻어왔다면작업을등록하는방법은동일하다. 단, 원격 JEUS Scheduler는작업객체가원격으로전송 (serialization) 되어원격으로운용된다. 2.5.1. 한번수행되는작업등록 단지특정시간에한번만수행되어야할작업의경우에는하나의수행시간만설정하여작업을등록할수있다. 이때수행시간은 java.util.date 객체로절대시간을설정거나, Milli-Second 값으로현재시간을기준으로얼마의시간이지난후에수행되어야하는지설정할수있다. 다음의메소드를이용하여작업을등록한다. registerschedule(schedulelistener task, Date time, boolean isdaemon) registerschedule(schedulelistener task, long delay, boolean isdaemon) 제 2 장 Scheduler 프로그래밍 11

참고 메소드의파라미터에대한설명은 2.5.2. 반복되는작업등록 을참고한다. 다음은메소드사용에대한예이다. [ 예 2.4] 한번수행되는작업등록 SimpleTask task1 = new SimpleTask("task1"); Date firsttime1 = new Date(System.currentTimeMillis() + 2000); ScheduleController handle1 = scheduler.registerschedule(task1, firsttime1, false); 2.5.2. 반복되는작업등록 반복되는작업의경우첫수행시간, 주기, 종료시간, 최대수행횟수등을주어작업을등록할수있다. 반복되는작업의특성에따라반복주기를 Fixed-delay 방식이나 Fixed-rate 방식으로결정해야한다. Fixed-delay 작업이수행되는간격이일정하게유지된다. 작업의다음수행시간은이전수행시간과주기에의해서결정된다. 만약작업의수행이지체 ( 작업수행시간이오래걸리거나 garbage collection과같은외부이유에의해서지체되는경우 ) 되어다음작업이수행되어야할시기가지난경우에다음작업은바로수행되며, 그이후에수행되는작업들은그만큼지체된다. 따라서장기적으로는작업의수행시간이조금씩뒤쳐질수있다. Fixed-rate 작업이수행되는비율이일정하게유지된다. 작업의다음수행시간은첫수행시간과주기에의해서결정된다. 작업의수행이지체되더라도다음작업은바로뒤따라수행되며시간당수행되는비율을유지한다. 장기적으로작업의수행시간이초기에지정한주기에따라계속유지된다. JEUS Scheduler는 Fixed-rate로작업을등록하면비교적정확한호출시간을보장해주기위해작업수행이지체되더라도시간이되면다른스레드에의해작업을호출한다. 따라서작업수행이지체되는경우에같은작업이동시에 (concurrently) 수행된다. 따라서이러한경우에는작업객체가 thread-safe 한지고려해야한다. 다음의메소드를이용하여작업을등록한다. registerschedule(schedulelistener task, Date firsttime, long period, Date endtime, long maxcount, boolean isdaemon) registerschedule(schedulelistener task, long delay, long period, Date endtime, long maxcount, boolean isdaemon) registerscheduleatfixedrate(schedulelistener task, Date firsttime, long period, Date endtime, long maxcount, boolean isdaemon) 12 JEUS Scheduler 안내서

registerscheduleatfixedrate(schedulelistener task, long delay, long period, Date endtime, long maxcount, boolean isdaemon) 작업을등록할때사용하는파라미터들은다음과같다. 파라미터 Date firsttime long delay long period Date endtime long maxcount boolean isdaemon 의미시작시간으로처음수행될시간을지정한다. 시작시간이다. 현재이후에처음수행될시간을지정한다 ( 단위 : Milli-Seconds). 반복수행주기를지정한다 ( 단위 : Milli-Seconds). 종료시간이다. 이시간이후에는작업이더이상수행되지않고 null인경우에는종료시간의제약이없다. 최대수행횟수이다. Scheduler.UNLIMITED인경우에는제한이없다. 원격으로 Schedule을등록하는경우에만의미가있으며 true 값으로설정하면클라이언트와의연결이종료되었을때작업이종료된다. 현재 RMI Runtime의 DGC(Distrubuted Garbage Collection) 정책에의해클라이언트가연결이종료되었음을판단하기때문에실제로클라이언트의연결이종료되고 15분정도가지나야종료되었음을탐지하게되어 Scheduling 이취소된다. boolean isthreaded 더이상사용되지않는다 (deprecated). 다음은작업을등록하는예제이다. [ 예 2.5] 반복되는작업등록 SimpleTask task2 = new SimpleTask("task2"); ScheduleController handle2 = scheduler.registerschedule( task2, 2000, 2000, null, Scheduler.UNLIMITED, false); SimpleTask task3 = new SimpleTask("task3"); Date firsttime3 = new Date(System.currentTimeMillis() + 2000); Date endtime3 = new Date(System.currentTimeMillis() + 10 * 1000); ScheduleController handle3 = scheduler.registerscheduleatfixedrate( task3, firsttime3, 2000, endtime3, 10, false); 2.5.3. Schedule 작업객체등록 Schedule 이나 RemoteSchedule 작업객체를등록하는것은하위호환성을유지하기위해제공된다. 제 2 장 Scheduler 프로그래밍 13

작업의처음수행시간과이후에반복되는수행시간은 Schedule 작업객체의 nexttime() 메소드를이용하기때문에등록할때는별도의파라미터를줄필요가없다. 이경우다음메소드를이용하여작업을등록한다. registerschedule(schedule task, boolean isdaemon) registerschedule(string classname, Hashtable params, boolean isdaemon) 다음은작업을등록하는예제이다. [ 예 2.6] Schedule 작업객체등록 Hashtable params = new Hashtable(); params.put("name", "task3"); params.put("interval", new Long(3000)); ScheduleController handle3 = scheduler.registerschedule( "samples.scheduler.simpleremoteschedule", params, true); SimpleSchedule task4 = new SimpleSchedule("task4"); ScheduleController handle4 = scheduler.registerschedule(task4, true); 주의 Scheduler 는 JEUS Manager 에서제공하는주요서비스이므로설정에주의한다. 만약설정이잘못 되어 Scheduler 를생성할수없다면, JEUS Manager 는에러메시지를표시하고기동을중지한다. 2.6. 작업제어 JEUS Scheduler에작업을등록하면핸들 (handle) 인 ScheduleController 객체를리턴한다. 이객체는등록된작업하나당만들어지는데등록된작업을제어하기위해사용한다. 이핸들을이용하여작업에대한정보를얻어오거나작업을취소할수있다. 다음은 ScheduleController.cancel() 메소드를호출하여작업을취소하는예제이다. [ 예 2.7] ScheduleController.cancel 메소드사용 SimpleTask task2 = new SimpleTask("task2"); ScheduleController handle2 = scheduler.registerschedule( task2, 2000, 2000, null, Scheduler.UNLIMITED, false); Thread.sleep(10 * 1000); handle2.cancel(); 14 JEUS Scheduler 안내서

2.7. Scheduler 사용 작업정의, Scheduler 객체얻기, 작업등록, 작업제어까지완료하였다면, JEUS Scheduler를사용할준비가모두되었다. 본절에서는환경에따른 Schduler의사용방법에대해설명한다. 2.7.1. Standalone 환경에서사용 일반 J2SE 애플리케이션이나 Java EE 애플리케이션클라이언트에서 JEUS Scheduler를사용할수있다. 이경우에는 JEUS 서버와별개로 JEUS Scheduler를 J2SE Timer와같이라이브러리처럼사용할수있다. Scheduler 객체를얻기위해서는 SchedulerFactory 클래스를이용한다. 또한로컬환경에서작업을등록할때 daemon flag는사용되지않으므로어떤값을넣어도무방하다. 다음은 Standalone 클라이언트예제이다. [ 예 2.8] Standalone 클라이언트에서 Scheduler 사용 public class StandAloneClient { public static void main(string args[]) { try { // Get the default scheduler Scheduler scheduler = SchedulerFactory.getDefaultScheduler(); // Register SimpleTask which runs just one time echo("register task1 which runs just one time..."); SimpleTask task1 = new SimpleTask("task1"); Date firsttime1 = new Date( System.currentTimeMillis() + 2000); ScheduleController handle1 = scheduler.registerschedule(task1, firsttime1, false); Thread.sleep(5 * 1000); echo(""); // Register SimpleTask which is repeated // with fixed-delay echo("register task2 which is repeated " + "until it is canceled..."); SimpleTask task2 = new SimpleTask("task2"); ScheduleController handle2 = scheduler.registerschedule( task2, 2000, 2000, null, Scheduler.UNLIMITED, false); Thread.sleep(10 * 1000); handle2.cancel(); 제 2 장 Scheduler 프로그래밍 15

echo(""); // Register SimpleTask which is repeated // with fixed-rate echo("register task3 which is repeated " + "for 10 seconds..."); SimpleTask task3 = new SimpleTask("task3"); Date firsttime3 = new Date( System.currentTimeMillis() + 2000); Date endtime3 = new Date( System.currentTimeMillis() + 10 * 1000); ScheduleController handle3 = scheduler.registerscheduleatfixedrate( task3, firsttime3, 2000, endtime3, 10, false); Thread.sleep(12 * 1000); echo(""); // Register SimpleSchedule which is repeated // every 2 seconds echo("register task4 which is repeated " + "every 2 seconds..."); SimpleSchedule task4 = new SimpleSchedule("task4"); ScheduleController handle4 = scheduler.registerschedule(task4, false); Thread.sleep(10 * 1000); echo(""); // Cancel all tasks echo("cancel all tasks registerd on the scheduler..."); scheduler.cancel(); Thread.sleep(5 * 1000); System.out.println("Program terminated."); catch (Exception e) { e.printstacktrace(); private static void echo(string s) { System.out.println(s); 16 JEUS Scheduler 안내서

Java EE 애플리케이션클라이언트에서 JEUS Scheduler 를사용하는경우에는 Deployment Descriptor(jeusclient-dd.xml) 에 JEUS Scheduler 의 Thread Pool 에관련된설정을할수있다. 참고 1. Scheduler의 Thread Pool과관련된설정은 "JEUS Reference Book" 을참조한다. 2. Scheduler를사용한코드를컴파일하거나기동시키기위해서는 JEUS 관련클래스 (jeus.jar 등 ) 가클래스패스에지정되어있어야한다. 2.7.2. JEUS 노드에서사용 JEUS 노드에 Scheduler Service가기동되어있다면원격클라이언트가이것을사용할수있는데그러기위해서는먼저 JEUS 노드에 Scheduler Service가기동되도록설정되어있어야한다. JEUS 노드 Scheduler Service는 RMI Scheduler 객체를 JNDI에등록한다. 따라서클라이언트에서는 JNDI Lookup을통해서원격 Scheduler 객체 ( 실제로는 Stub 객체 ) 를얻을수있다. 이객체의 JNDI 이름은 jeus_service/scheduler 로 Scheduler.NODE_SCHEDULER_NAME 상수을사용한다. 일단 Scheduler 객체를얻으면작업을등록하는방법은동일하다. 단, 등록된작업객체는전송 (Serialization) 되어원격 Scheduler에서실제로운용된다. 즉, JEUS 노드에서수행된다. 이경우, 등록할때 daemon flag는의미가있으며 daemon flag를 true로등록하면원격클라이언트가종료되었을때원격작업도종료된다. 참고 JEUS 노드에 Scheduler Service 가기동되도록설정하는방법은 "JEUS Reference Book" 을참고한 다. 다음은리모트클라이언트예제이다. [ 예 2.9] 리모트클라이언트에서 Scheduler 사용 public class RemoteClient { public static void main(string args[]) { try { // Get the remote scheduler InitialContext ic = new InitialContext(); Scheduler scheduler = (Scheduler)ic.lookup( Scheduler.NODE_SCHEDULER_NAME); // Register SimpleTask which runs just one time echo("register task1 which runs just one time..."); SimpleTask task1 = new SimpleTask("task1"); Date firsttime1 = new Date( System.currentTimeMillis() + 2000); 제 2 장 Scheduler 프로그래밍 17

ScheduleController handle1 = scheduler.registerschedule(task1, firsttime1, true); Thread.sleep(5 * 1000); echo(""); // Register SimpleTask which is repeated // with fixed-delay echo("register task2 which is repeated " + "until it is canceled..."); SimpleTask task2 = new SimpleTask("task2"); ScheduleController handle2 = scheduler.registerschedule(task2, 2000, 2000, null, Scheduler.UNLIMITED, true); Thread.sleep(10 * 1000); handle2.cancel(); echo(""); // Register SimpleRemoteSchedule which is repeated // every 3 seconds echo("register task3 which is repeated " + "every 3 seconds..."); Hashtable params = new Hashtable(); params.put("name", "task3"); params.put("interval", new Long(3000)); ScheduleController handle3 = scheduler.registerschedule( "samples.scheduler.simpleremoteschedule", params, true); Thread.sleep(10 * 1000); echo(""); // Cancel all tasks echo("cancel all tasks registerd on the scheduler..."); scheduler.cancel(); Thread.sleep(5 * 1000); System.out.println("Program terminated."); catch (Exception ex) { ex.printstacktrace(); private static void echo(string s) { 18 JEUS Scheduler 안내서

System.out.println(s); 주의 위예제를실행하려면해당작업클래스파일을 jar 파일로묶어서 JEUS_HOME\lib\application 에복 사하여위치시켜야한다. JEUS 노드가해당작업을수행하기위해서는해당클래스를로딩해야하 기때문에 JEUS 가이미기동되어있는상태라면반드시재기동해야한다. 2.7.3. Java EE 컴포넌트에서사용 EJB나서블릿과같은 Java EE 컴포넌트에서 JEUS Scheduler를사용할수있다. 이때 JEUS Scheduler 는 JEUS 엔진컨테이너에서기동된다. EJB 2.1 표준에는 EJB Timer Service를명시하고있으며 JEUS 5.0에서도 EJB Timer Service를제공하고있다. 따라서 EJB 컴포넌트의경우 Java EE 표준을준수하려면 JEUS Scheduler 보다는 EJB Timer Service 를사용하는것을권장한다. 하지만 EJB외의 Java EE 컴포넌트에서는 EJB Timer Service를사용할수없으므로 JEUS Scheduler를사용해야한다. Java EE 컴포넌트에서 JEUS Scheduler를사용하는것은 Standalone JEUS Scheduler를사용하는방식과동일하다. SchedulerFactory 클래스를이용하여엔진컨테이너에서기동되는 Scheduler 객체를얻어온후에필요한등록메소드를호출하여작업을등록하면된다. 다음은 EJB에서 JEUS Scheduler 사용예제이다. [ 예 2.10] EJB에서 JEUS Scheduler 사용 public class HelloEJB implements SessionBean { private SimpleTask task; private ScheduleController taskhandler; private boolean isstarted; public HelloEJB() { public void ejbcreate() { task = new SimpleTask("HelloTask"); isstarted = false; public void trigger() throws RemoteException { if (!isstarted) { Scheduler scheduler = SchedulerFactory.getDefaultScheduler(); taskhandler = scheduler.registerschedule( task, 2000, 2000, null, Scheduler.UNLIMITED, false); 제 2 장 Scheduler 프로그래밍 19

isstarted = true; public void ejbremove() throws RemoteException { if (isstarted) { taskhandler.cancel(); isstarted = false; public void setsessioncontext(sessioncontext sc) { public void ejbactivate() { public void ejbpassivate() { public class HelloClient { public static void main(string args[]) { try { InitialContext ctx = new InitialContext(); HelloHome home = (HelloHome) ctx.lookup("helloapp"); Hello hello = (Hello) home.create(); hello.trigger(); catch (Exception e) { e.printstacktrace(); 참고 JEUS 엔진컨테이너에서동작하는 JEUS Scheduler 에대해 Thread Pool 과 Job-list 를설정할수있 다. 설정에대해서는 "JEUS Reference Book" 을참고한다. 2.8. Job-list 사용 Job-list는 JEUS 서버에프로그래밍방식으로작업을등록하지않고설정파일을이용하여작업을등록하는것이다. Job-list는 JEUS 노드 Scheduler와 JEUS 엔진컨테이너 Scheduler에등록할수있다. Job-list 로작업을등록하면작업은 Fixed-rate 방식으로반복수행된다. Job-list를등록하기위해필요한설정은 3.5. Job-list 설정 을참고한다. 20 JEUS Scheduler 안내서

제 3 장 Scheduler 설정 본장에서는 JEUS 설정파일이나 Deployment Descriptor 에 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 설정 Deployment Descriptor에서설정기본적으로 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> 제 3 장 Scheduler 설정 21

또한다음과같이 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 max period 설명 Scheduler Service를수행하는 Thread Pool의최소값이다. Scheduler Service를수행하는 Thread Pool의최대값이다. Thread 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> 22 JEUS Scheduler 안내서

... <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 Deployment Descriptor인 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> 제 3 장 Scheduler 설정 23

</scheduler> </jeus-client-dd> 위의설정파일을수정한후에 JEUS 서버를재기동할필요는없지만, 클라이언트모듈과클라이언트컨 테이너는재기동해야수정한설정내용이반영된다. 참고 클라이언트컨테이너와애플리케이션클라이언트에대해서는 "JEUS Client Application 안내서 " 를 참조한다. 3.5. Job-list 설정 프로그램코드에서작업을등록하는것외에, JEUS 설정파일에작업을등록하면 JEUS 서버가구동될때작업이자동으로스케줄링된다. Job이란스케줄링될하나의작업단위를말한다. Job에해당하는클래스는반드시 jeus.schedule.sched ulelistener를구현해야하며해당클래스와관련클래스를 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> 24 JEUS Scheduler 안내서

<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> <name> <description> <begin-time> 설명작업클래스파일이름 (fully-qualified class name) 을지정한다. 옵션파라미터로작업에대한이름을지정한다. 옵션파라미터로작업에대한설명을지정한다. 옵션파라미터로작업이최초로수행될시간을지정한다. 설정하지않을경우 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> <count> 작업주기를설정한다. <millisecond>, <minutely>, <hourly>, <daily> element를이용하여입력한다. 옵션파라미터로작업의최대수행횟수를지정한다. 설정되지않거나 -1인경우최대수행횟수에제한이없다. 참고 Job-list 방식으로등록된작업은 Fixed-rate 방식으로반복된다. 따라서비교적정확한시간에호출되지만작업수행시간이오래걸릴때는작업이동시에진행될수있기때문에작업이 thread-safe하도록고려해야한다. 보다자세한설정항목과설명은 " 참고자료 " 를참고한다. 제 3 장 Scheduler 설정 25

용어해설 fixed-delay 작업이고정된간격으로수행되는것을말한다. fixed-rate 작업이고정된비율로수행되는것을말한다. JEUS 노드 scheduler service JEUS 노드에서구동되는 JEUS Scheduler로원격사용자에게서비스된다. stand-alone scheduler JEUS의 Scheduler Service 형태가아닌애플리케이션내에서라이브러리처럼동작하는 Scheduler이다. 용어해설 27

색인 Symbols <job> <begin-time>, 25 <class-name>, 25 <count>, 25 <description>, 25 <end-time>, 25 <interval>, 25 <name>, 25 <thread-pool> <max>, 22 <min>, 22 <period>, 22 A abstract class RemoteSchedule, 7 abstract class Schedule, 7 C cancel, 14 class SchedulerFactory, 7 D daemon, 9, 15, 17 E EJB Timer Service, 1, 19 exception JeusSchedulerException, 7 F Fixed-delay, 12 Fixed-rate, 12 I initialize() Callback, 9 interface ScheduleController, 7 interface ScheduleListener, 6 interface Scheduler, 7 J JEUS Scheduler, 1 Job-list, 5, 20, 21, 24 L Lookup, 11 N nexttime, 7, 8 NODE_SCHEDULER_NAME, 11, 17 O ontime, 6, 7, 8 P package jeus.schedule, R registerschedule, 12 registerscheduleatfixedrate, 12 boolean isdaemon, 13 boolean isthreaded, 13 Date endtime, 13 Date firsttime, 13 long delay, 13 long maxcount, 13 long period, 13 RemoteSchedule, 7, 8, 9 S ScheduleFactory, 15 SchedulerFactory, 5, 7, 10, 11, 19 Standalone Scheduler, 19 ㅇ 엔진컨테이너, 21 색인 29

ㅋ 클라이언트컨테이너, 23 30 JEUS Scheduler 안내서