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 |