ㅋ. 몇년만에 휴가도 다녀오고 기분좋게 출근했더니 그동안 잘 나오던 jfreechart로 만든 페이지에서 차트가 나오질 않아

로그를 확인해보았더니

java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.JFreeChart..어쩌구저ㅉ구

라는 에러문구를 확인할 수 있었다.

당연히 클래스파일을 찾지 못하는 거라 해당 클래스파일을 누군가 지웠나 하면서 확인해보았는데

이잉? jar 파일은 그대로 lib폴더에 있는게 아닌가..

다른 서버 설정이 바뀌었나 싶어 다른 직원들에게 물어봐도 손댄것은 없댄다.

당연 저문구로는 클래스파일을 못찾아서 나오는 거니 아무리 구글 검색을 해봐도 답변은 lib 밑에 관련jar파일을 넣으라는 말뿐..

웹서버까지도 다시 깔아보았지만 마찬가지...미친다...

최후의 수단 각 라인단위로 로그를 찍어보는 막가파 디버깅..

그러던차에 ChartFactory에서 차트를 생성하기 전단계에서 Could not initialize class sun.awt.X11GraphicsEnvironment

라는 문구를 찾아내었다.

X11이란건 리눅스에서 그래픽환경을 지원하는 것이라고 알고 있었는데 이게 왜 나온걸일까..

결국 환경설정문제였던 거같다.

역시 잘 운영되고 바꾼사람 없는 시스템에서 아무도 몰래 시스템 혼자서 설정이 변경되는 미스테리한 일을 또한번 경험하고 말았다.

 

여하튼 에러는 X11이 없는 리눅스 콘솔에서 발생하는 문제이기 때문에 간단히 java 실행시 headless 모드로 구동하면 끝.

아니면 라이브러리를 지정해도 된다. 환경설정파일에 CLASSPATH로 지정해도 상관없다.

방법 : java -Djava.awt.headless=true 

 

일단 간단하게 웹서버 구동시 -Djava.awt.headless=true 라는 옵션을 추가한후 재구동하는 것으로 해결..

(전에 어떤 분이 어느파일을 손보면 되는지 물어보신 분이 계셔서 톰캣인 경우 톰캣설치폴더 밑에 있는 bin 디렉토리의

catalina.sh 파일을 보면 옵션 설정하는 부분이 나오는데 그곳에 추가하면 된다.)

 

위 옵션은 java 1.4 이상에서고 그 외에는

http://products.davisor.com/chart/doc/headless.html 페이지를 참고하면 될듯..
 
참고로 라이브러리를 지정하고자 하는 경우에는 -Djava.library.path=/usr/local/lib 를 추가하면 된다.
 
 
 

JFreeChart를 Unix에서 사용할 때..

기타 | 2007. 12. 12. 09:44
Posted by 시반

흐음 테스트할때는 이상이 없었는데 서버에 올리니 JfreeChart에서 클래스를 찾을수 없다며 에러메세지만 뿌려대는게 아닌가..

예전에 서버에 올렸을 때는 이상없었는데..컴파일을 다시했다가 jar파일을 다시 올려봤다가..결국 다시 검색을...

ㅋ. 다음과 같은 사실을 발견하고 아연실색...

 

JFreeChart를 unix상에서 사용할 경우

java 옵션에 -Djava.awt.headless=true 를 추가해 줘야 한다는 사실...

 

이전에도 했던 거였는데...서버 셋팅후 설정은 건드릴 일이 있어야지...

뜨믐뜨믐 오라클 설치니 환경세팅이니 개발초기에만 할뿐이라...

한것두 잊어버리게 되는데 이럴때마다 하나를 알고 둘을 잊어버리는 내머리의 대담함을 새삼 느끼고 있는 중이다..

 

여하튼 잡설은 이제 그만..


-Djava.awt.headless=true 옵션이라는 것이 비윈도우 환경에서 GUI 클래스를 사용할수 있게 하는 옵션이라는데.
unix는 대부분 x-window를 기동하지 않고 사용하기 때문에 나오는 에러였던셈...


jfreechart를 사용하는 경우에는 서블릿 컨테이너에 아래와 같이 하면 된다.

 

Tomcat 사용할 경우  CATALINA.sh파일을 열어서 JAVA_OPTS을 찾아서

-Djava.awt.headless=true 을 추가

 

JEUS 를 사용할 경우 JEUSMain.xml 의 command-option에 추가

<engine-container>
<name>container2</name>
<command-option>-Xms256m -Xmx512m -Djava.awt.headless=true</command-option>

 

weblogic 인 경우 startWebLogic.sh 에 추가

${JAVA_OPTIONS}  -Djava.awt.headless=true

 

JBoss를 사용하는 경우에는 run.sh에 추가

JAVA_OPTS="-Dprogram.name=$PROGNAME $JAVA_OPTS -Djava.awt.headless=true"

 

단  JDK1.4 이상일 경우이며 jdk 1.3 이하인 경우 처리하는건 다르다는데 1.3을 써본지도 기억이 가물가물..

별 문제는 없을 거 같다..

 

 

 
블로그 이미지

시반

시반(詩伴)이란 함께 시를 짓는 벗이란 뜻을 가지고 있습니다. 함께 나눌수 있는 그런 공간이길 바라며...

카테고리

분류 전체보기 (233)
개발 이야기 (73)
WEB2.0 (57)
DB2 (24)
MySQL (6)
오라클 (26)
기타 (44)
취미 (0)
잡담 (2)