[Spring framework 설치] 

-- 이클립스 플러그인 설치

1. 상위 help탭 > install new software 선택 후 Add 눌러서 http://springide.org/updatesite 입력

 

2. Core / Spring IDE & Extensions / Spring IDE 추가 후 Next

 

3. Next 클릭

 

4. I accept 클릭 

 

5. Install Software


-- Spring Container 설치

1. 스프링 사이트(http://www.springsource.org/download)에 접속, 하단의 Spring Framework 클릭.


2. 최근 버젼 다운로드 클릭. [용량이 커서 파일 공유는 못함..ㅈㅅ]


3. 회원 가입

4. 다운로드


5. jar 파일을 관리할 Project를 추가하여 받은 zip 파일의 압축을 푼 내용 중 jar파일을 넣어준다.


3. Working Set을 관리한다.


출처 : http://blog.daum.net/gunsu0j

'Dev > JAVA' 카테고리의 다른 글

자바 데몬(daemon) 만들기  (0) 2011.06.09
Java Simple Daemon  (0) 2011.06.05
자바 이미지 사이즈 추출 예제  (0) 2011.04.23
자바 이미지 리사이즈(썸네일)  (0) 2011.04.06

1. 데몬(daemon) 이란?
주기적인 서비스 요청을 처리하기 위해서 커널상에 백그라운드 모드로 실행되는 프로세스로, 메모리 관리 방법에 따라 단독 데몬과 xinetd로 분리된다.

  • 단독데몬
    항상 백그라운드 모드로 실행되고 메모리를 상대적으로 많이 소비한다. 그러나 서비스(응답속도)가 빠르다. httpd와 같은 웹서비스 데몬이 대표적.
  • xinetd(슈퍼데몬)
    요청이 있을때마다 xinetd가 서비스를 싱행시켜주므로 메모리 소비가 적다. 그러나 단독데몬에 비해 상대적으로 서비스 속도가 느리다.


2. 간단한 자바 데몬 만들기
nohup을 이용해서 java를 실행시킨다.

터미널이 종료될 때(쉘이 종료될 때) 프로세스가 죽는 이유는 해당 프로세스가 쉘의 자식 프로세스 이기 때문이다. 따라서, 부모 프로세스가 죽을대 던지는 SIGHUP을 자식 프로세스가 받게 된다.

nohup은 부모 프로세스가 죽을때 자식 프로세스에게 SIGHUP을 던지지 않는 프로세스를 말한다.

$ nohup java 클래스명 & 
 
사용하기 편한 장점은 있으나, 문제는 중지를 시킬수 없다. 즉, 해당 프로세스 ID를 찾아내 kill하는 수 밖에 없다. 물론 파일 체크 기법, 소켓을 이용한 제어 방법등을 사용할 수 있지만 스스로 구현해야 하는 번거로움이 있다.


3. apache commons daemon 이용하기
Java는 UNIX의 시그널 처리를 할수 없기때문에, 중지 신호(TERM signal)를 처리하기 위해서는 따로 구현을 해야한다. 이런 번거로움을 해결하기 위해 자카르타의 하위 프로젝트중의 commons daemon을 이용한다. commons daemon은 중지 신호를 받으면 미리 지정된 메소드를 실행한다.


UNIX용 Jsvc와 윈도우용 Procrun 있다.
여기서는 Jsvc를 이용해보도록 하겠다.


commons daemon을 다운로드해 압축을 해제하면 위 그림과 같다.
commons-daemon.jar 파일은 Java프로젝트 lib폴더에 복사해둔다.


bin폴더의 압축파일을 해제하면 jsvc-src라는 폴더가 나온다.
폴더의 내용은 위와 같다.
commons daemon을 사용하기 위해서는 바로 여기서 jsvc를 빌드해줘야 한다.
빌드환경은 다음과 같다.(리눅스에서 빌드해야한다.)

  • GNU AutoConf(at least 2.53)
  • ANSI-C compliant compiler(GCC is good)
  • GNU Make
  • A Java Platform 2 compliant SDK

여기서부터는 ubuntu 8.10 환경에서 진행하도록 한다.

먼저 JDK가 설치되어 있지 않다면 JDK를 설치한다.

 $ sudo apt-get install sun-java6-jdk

JDK가 설치되는 경로는 /usr/lib/jvm/java-6-sun 이다.

gcc 및 make 가 설치되있지 않다면 아래 명령를 이용해 한방에 설치한다.

 $ sudo apt-get install build-essential

AutoConf가 설치되있지 않다면 AutoConf를 설치한다.

 $ sudo apt-get install autoconf

Jsvc를 빌드하는 방법은 다음과 같다.

  • support/buildconf.sh
  • ./configure --with-java=/usr/lib/jvm/java-6-sun
  • make


빌드가 성공적으로 이루어졌다면 위 그림과 같이 jsvc가 만들어진것을 확인할 수 있다. 이후 이 파일을 가지고 Java 데몬을 실행한다.

Java 데몬을 만들려면 org.apache.commons.daemon.Daemon 인터페이스의 init, start, stop, destory 메소드를 구현해야 한다.

샘플 코드는 아래와 같다.
  1. import org.apache.commons.daemon.Daemon;   
  2. import org.apache.commons.daemon.DaemonContext;   
  3.   
  4. public class DaemonTest implements Daemon {   
  5.   
  6.     Thread t = null;   
  7.        
  8.     @Override  
  9.     public void init(DaemonContext arg0) throws Exception {   
  10.         System.err.println("daemonTest init");   
  11.         t = new DaemonThread();   
  12.     }   
  13.   
  14.     @Override  
  15.     public void start() throws Exception {   
  16.         System.err.println("daemonTest start");   
  17.         t.start();   
  18.     }   
  19.   
  20.     @Override  
  21.     public void stop() throws Exception {   
  22.         System.err.println("daemonTest stop");   
  23.         t.interrupt();   
  24.     }   
  25.        
  26.     @Override  
  27.     public void destroy() {   
  28.         System.err.println("daemonTest destroy");   
  29.     }   
  30. }  
  1. public class DaemonThread extends Thread {   
  2.   
  3.     @Override  
  4.     public void run() {   
  5.         while( Thread.interrupted() ) {   
  6.             System.err.println("run");   
  7.             try {   
  8.                 Thread.sleep(5000);   
  9.             } catch (InterruptedException e) {   
  10.                 Thread.currentThread().interrupt();   
  11.                 return;   
  12.             }   
  13.         }   
  14.     }      
  15. }  
init에서 초기화, start에서 처리할 작업을 별도의 쓰레드로 생성해서 실행한다. start 메소드 호출후 반드시 return 되어야 데몬이 시그널 처리를 제대로 할 수 있다.
stop, destroy 는 중지 신호가 오면 차례되로 호출된다.

이제 실행/중지 스크립트를 작성한다.
Jsvc를 싱행하는데 필요한것은 실행하는 계정(user), JAVA_HOME(-home), 프로세스ID 파일(-pidfile), 출력지정(-outfile, -errfile), 클래스파일(-cp) 등이 있다.
  1. #!/bin/sh   
  2. JAVA_HOME=/usr/lib/jvm/java-6-sun   
  3. DAEMON_HOME=/home/lyb1495/commons-daemon-1.0.1/bin/jsvc-src   
  4. DAEMON_USER=lyb1495   
  5. DAEMONTEST_HOME=/home/lyb1495/workspace/Daemon   
  6. PID_FILE=$DAEMONTEST_HOME/daemon_test.pid   
  7.   
  8. CLASSPATH=\   
  9. $DAEMONTEST_HOME/bin:\   
  10. $DAEMONTEST_HOME/lib/commons-daemon.jar   
  11.   
  12. case "$1" in   
  13.   
  14.     start)   
  15.     #   
  16.     # Start Daemon   
  17.     #   
  18.     $DAEMON_HOME/jsvc \   
  19.     -user $DAEMON_USER \   
  20.     -home $JAVA_HOME \   
  21.     -wait 10 \   
  22.     -pidfile $PID_FILE \   
  23. -errfile '&1' \   
  24.     -cp $CLASSPATH \   
  25.     DaemonTest   
  26.     #   
  27.     # To get a verbose JVM   
  28.     #-verbose \   
  29.     # To get a debug of jsvc.   
  30.     #-debug \   
  31.     exit $?   
  32.     ;;   
  33.   
  34.   stop)   
  35.     #   
  36.     # Stop PostMan   
  37.     #   
  38.     $DAEMON_HOME/jsvc \   
  39.     -stop \   
  40.     -pidfile $PID_FILE \   
  41.     DaemonTest   
  42.     exit $?   
  43.     ;;   
  44. #   
  45.   *)   
  46.     echo "Usage DaemonTest.sh start/stop"  
  47.     exit 1;;   
  48. esac  
이제 Java 데몬을 실행하기 위한 모든 준비를 마쳤다.


위에서 작성한 스크립트 파일을 이용해 Java 데몬을 실핸한다.
정상적으로 데몬이 시작된다면 PID_FILE에 지정한 파일이 생성된것을 확인할 수 있다.


데몬을 중지하려면 start 대신 stop을 입력으로 스크립트를 실행하면 된다.

'Dev > JAVA' 카테고리의 다른 글

Spring framework 설치  (0) 2012.11.25
Java Simple Daemon  (0) 2011.06.05
자바 이미지 사이즈 추출 예제  (0) 2011.04.23
자바 이미지 리사이즈(썸네일)  (0) 2011.04.06

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

import java.io.File;
import java.awt.Image;
import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class Test {

    public static void main(String[] args) {
  // 방법1
  Image img = new ImageIcon(이미지경로).getImage();
  System.out.println( img.getWidth(null) + "," + img.getHeight(null) );

 

  // 방법2
  try
  {
   File file = new File(이미지경로);
   BufferedImage bi = ImageIO.read( file );
   System.out.println( bi.getWidth() + "," + bi.getHeight() );
  } catch( Exception e ) {
   System.out.println("이미지 파일이 아닙니다.");
  }
    }
}

 

Image 를 쓰는 방법과 BufferedImage 를 쓰는 방법이 있는데

둘다 결과는 똑같지만 후자를 쓰는 이유는...

JSP에서 전자를 쓰면 이미지 파일이 아닌 파일(avi나 exe 같은)은 한동안 파일 락이 걸려서

삭제나 이동이 불가하였고 flush 도 해봤지만 똑같은 증상이 발생하였습니다.

반면 후자는 아무 문제 없었습니다. JAVA 로 실행시에는 문제가 발생하진 않습니다.

문제의 원인과 해결 방법을 아시는 분은 댓글 부탁드립니다.

'Dev > JAVA' 카테고리의 다른 글

Spring framework 설치  (0) 2012.11.25
자바 데몬(daemon) 만들기  (0) 2011.06.09
Java Simple Daemon  (0) 2011.06.05
자바 이미지 리사이즈(썸네일)  (0) 2011.04.06

자바에서 Java Advanced Imaging 클래스를 제공한다.


사이트는 https://jai-imageio.dev.java.net/ 여긴데 다운로드를 뒤져봐도

api 명세에 있는 javax.media.jai.JAI 클래스를 찾을수가 없더라...

그래서 따로 검색...

 

JAI apidocs는 http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/index.html 에서 볼 수 있다.


그럼, 간단하게 이미지를 리사이즈하는 방법을 알아보자,


  ParameterBlock pb = new ParameterBlock();
  pb.add("source_image.jpg");

  RenderedOp rOp = JAI.create("fileload", pb);


JAI.create()의 두번째 인자로 각각을 넣어줄 수도 있지만 JAI 1.1 이후 deprecated되었으므로 ParameterBlock를 생성하여 넘기는 방법을 쓰자,

생성한 ParameterBlock객체에 .add로 파일명을 넣어주면 된다.


  BufferedImage im = rOp.getAsBufferedImage();


입력 파일에 대해 BufferedImage형식으로 받아오고,


  BufferedImage thumb = new BufferedImage(50, 50, BufferedImage.TYPE_INT_RGB);


썸네일(리사이즈)이미지를 위한 공간을 만든다. 50,50은 width, height되겠다.


  Graphics2D g2 = thumb.createGraphics();
  g2.drawImage(im, 0, 0, 50, 50, null);


썸네일 버퍼공간에 대해 Graphics2D객체를 얻어와서 입력이미지에 있는 내용을 그린다.(0,0위치에 50,50크기로 복사)


  File outfile = new File("thumb.jpg");
  ImageIO.write(thumb, "jpg", outfile);


출력파일에 대한 객체를 만들고 ImageIO.write로 출력.

 

이미지 리사이즈 이외에도 입력 이미지를 BufferedImage형식으로 받아올 수 있기 때문에

이미지에 대한 작업이 전반적으로 가능하다.

 

참고로 각 필요 클래스의 위치는 다음과 같다.

 

java.io.File

java.awt.Graphics2D

java.awt.image.BufferedImage

javax.imageio.ImageIO

javax.media.jai.JAI

javax.media.jai.RenderedOp

 

JAI클래스들은 첨부파일을 다운받아 압축을 풀면 나오는 세 jar파일을 jdk홈/jre/lib/ext에 넣으면 된다.

톰캣에서 서비스를 위해서는 톰캣홈/common/lib에 마찬가지로 복사


'Dev > JAVA' 카테고리의 다른 글

Spring framework 설치  (0) 2012.11.25
자바 데몬(daemon) 만들기  (0) 2011.06.09
Java Simple Daemon  (0) 2011.06.05
자바 이미지 사이즈 추출 예제  (0) 2011.04.23

+ Recent posts