Java Simple Daemon
뭐에 쓰는 물건인고?
Java Simple Daemon은 자바를 이용해서 데몬 프로그램을 작성하도록 도와주는 프레임워크이다(비록 프레임워크라고 부르기엔 너무도 작지만.. ^^).
가끔씩 특정 디렉토리에 들어오는 파일을 감시해서 파일이 들어오면 그 파일을 DB에 넣기만 하거나, 혹은 어떤 방식으로든 메시지를 받아서 받은 메시지를 가공해 다른 쪽에 메시지로 넘겨 주거나 하는 등의 역할을 하는 그런 프로그램을 자바로 짤 경우가 있다.
이러한 프로그램들은 일반적으로 그래픽 사용자 인터페이스(GUI)나 화면 출력이 필요 없이 파일로 로그만 남기고 자기 할 작업을 한다. 이러한 프로그램을 데몬(Daemon)이라 부른다.
자바로 이러한 데몬을 작성할 경우, 데몬을 실행시키는 것은 문제가 없다.
$ nohup java some.Daemon &이러한 식으로 실행하면 된다. 헌데 문제는 종료이다. 프로그램과 의사 소통할 무슨 방법이 없기 때문에 Unix에서 ps -ef명령으로 "java" 프로세스를 찾아서 kill명령을 내리거나 윈도우의 경우에는 프로세스 종료를 시킬 수 밖에 없다. 이러한 문제를 해결하기 위해 만든 것이 Java Simple Daemon(이하 JSD)이다.
프로젝트 홈
다운로드
Java Simple Daemon 다운로드 목록어찌 작동하는고?
원리는 단순하다. 데몬 역할을 하는 자바 클래스를 실행시켜주면서 쓰레드가 하나 떠서 사용자의 홈 디렉토리(Unix에서 $HOME 환경변수가 가리키는 디렉토리)에 특별한 파일이 존재하는지를 검사한다. 만약 그 특별한 파일이 존재한다면 JVM을 자동으로 종료시켜준다. JSD는 그 특별한 파일이 있는지 검사하는 역할과, 그 파일을 생성 시켜주는 역할을 한다.
덤으로, JSD는 데몬 클래스에 따라 락(Lock) 파일도 생성해준다. 홈 디렉토리에 락 파일이 존재할 경우, 데몬을 다시 띄우려고 하면 데몬 띄우기를 거부한다.
사용하기
- 데몬 클래스는 net.kldp.jsd.SimpleDaemon 인터페이스를 구현해야 한다.
- public void startDaemon() : 데몬작업을 수행하는 메소드. 여기에 실제 작업 구현이 들어간다.
- public void shutdown() : 데몬이 종료하기 전에 수행할 작업을 기록한다.
- net.kldp.jsd.SimpleDaemonManager의 객체를 생성하고, 객체에 데몬 클래스를 등록해 준다.
- net.kldp.jsd.SimpleDaemonManager.start()를 실행하면 데몬이 시작된다.
- net.kldp.jsd.SimpleDaemonManager.shutdownDaemon()를 실행하면 데몬을 종료시키는 파일이 $HOME 디렉토리에 생성되어, 데몬을 종료시키게 된다.
예제 보기
아래 예제는 대책없이 화면에 시간을 출력하는 데몬이다.
- 데몬의 시작 :
java net.kldp.jsd.sample.ShowTime
- 데몬의 종료(다른 콘솔 창에서) :
java net.kldp.jsd.sample.ShowTime -shutdown
/* * Created on 2004. 11. 6. */ package net.kldp.jsd.sample; import java.io.IOException; import java.util.Date; import net.kldp.jsd.IllegalSimpleDaemonClassException; import net.kldp.jsd.SimpleDaemon; import net.kldp.jsd.SimpleDaemonManager; /** * SampleDaemon 예제. * * 현재 시간을 계속해서 보여주는 데몬이다. * */ public class ShowTime implements SimpleDaemon { public static void main(String args[]) { // -shutdown 옵션이 있을 경우 데몬을 종료시킨다. if (args.length > 0 && args[0].equals("-shutdown")) { System.out.println("ShowTime 종료시작."); try { SimpleDaemonManager sdm = SimpleDaemonManager.getInstance(ShowTime.class); sdm.shutdownDaemon(); } catch (IOException e1) { e1.printStackTrace(); } catch (IllegalSimpleDaemonClassException e) { e.printStackTrace(); } return; // 프로그램 종료. } SimpleDaemonManager sdm = null; try { sdm = SimpleDaemonManager.getInstance(ShowTime.class); sdm.start(); } catch (Exception e) { e.printStackTrace(); } } /** * 데몬 작업수행 : 현재 시간을 계속 보여준다. */ public void startDaemon() { while (true) { Date now = new Date(); System.out.println(now.toString()); try { Thread.sleep(5000); } catch (Exception ex) { ex.printStackTrace(); } } } /** * ShowTime 종료시 실행할 내용들. */ public void shutdown() { System.out.println("ShowTime을 종료합니다."); } }
[출처] Java Simple Daemon|작성자 승빈파파
'Dev > JAVA' 카테고리의 다른 글
Spring framework 설치 (0) | 2012.11.25 |
---|---|
자바 데몬(daemon) 만들기 (0) | 2011.06.09 |
자바 이미지 사이즈 추출 예제 (0) | 2011.04.23 |
자바 이미지 리사이즈(썸네일) (0) | 2011.04.06 |