날짜별 글 목록: 2009년 11월 24일

Exception StackTrace to a String

애플리케이션에서 Exception이 발생하면, 일반적으로 디버깅을 위해서 Exception의 Call Stack을 저장한다. 이 내용은 Exception의 Call Stack을 String으로 변환하는 코드이다. Save Exception StackTrace to a String 에서 Exception을 String으로 변환하는 쉬운 예를 보여주고 있다.

몇 개의 예가 있긴 한데, 아래의 코드가 간결하고 좋다..

public static String getException(Exception e ) {
  StringWriter w = new
  StringWriter();
  e.printStackTrace(new PrintWriter(w));
  return w.toString();
}

addShutdownHook() problem with java.util.Timer instance

java.util.Timer를 Logging 라이브러리에서 사용을 하고 있고, Logging라이브러리를 사용하고 있는 로깅서버에서 addShutdownHook() 메서드를 사용해서 등록한 쓰레드가 실행이 안 된다.. ^^;;

Java API 문서를 보면, 아래와 같은 내용이 있다.

Timer 객체의 마지막 라이브 참조가 종료해, 미 처리의 태스크가 모두 실행되면, 타이머의 태스크 실행 thread도 동시에 완료해, 가비지 컬렉트됩니다. 다만, 이것에는 한없고 긴 시간이 걸리는 경우가 있습니다. 디폴트에서는 태스크의 실행 thread는 「demon thread」로서는 실행되지 않기 때문에 어플리케이션이 종료하지 않게 할 수 있습니다. 타이머의 태스크 실행 thread를 즉시 완료시키는 경우, 호출측은 타이머의 cancel 메서드를 호출할 필요가 있습니다.

흠, 그렇다, 종료가 안된다..^^;;
그래서, Timer() 대신 daemon으로 Timer객체를 생성하면, addShutdownHook() 메쏘드에 등록된 쓰레드의 run() 메쏘드가 잘 동작한다. ^^;;

Timer()

새로운 타이머를 작성한다.

Timer(boolean isDaemon)
demon로서 실행되도록 지정할 수 있는 관련 thread를 가지는 새로운 타이머가 작성됩니다.