수요일, 7월 28, 2010

HP-UX에서 GCC로 JNI 어플리케이션을 만들 수 있을까?

누구 경험있는 사람이 있으면 좋겠다는 생각이다.

HP-UX용 Java Virtual Machine은 aCC로 컴파일이 되었다는 확인되지 않은 정보를 접했고,
GCC로 빌드한 라이브러리와 aCC로 빌드한 라이브러리를 혼합해서 사용할 수 없다는 정보도 접했다.

이것이 문제다.

표준 C++ 함수를 GCC로 구현한 shared library(so)인 libstdc++.so 와 HP-UX의 aCC로 구현한 libstd_v2.so 를 혼합해서 사용할 수 없었다.

결국은 aCC로 모든 static library를 다시 빌드했고 JNI에서 호출 할 수 있었다.

참고로, aCC를 이용해서 64bit shared library를 빌드하는 방법이다.

aCC +DD64 +Z -AA -mt -c -D_REENTARANT jniapp.cpp
aCC +DD64 +Z -b -o jniapp.so jniapp.o -lstd_v2 -lstream -lCsup -lc -lm


정말로 GCC로는 빌드할 수 없을까?

조금 더 구체적인 내용은 HP-UX Java - Using Java 2 JNI on HP-UX 를 참고한다.

목요일, 2월 04, 2010

Apache Tomcat 5.x의 HttpServletRequest 클래스의 getParameter([key string]) 버그


String value = request.getParameter("key");

try {
value = new String(value.getBytes(), "UTF-8");
} catch (java.io.UnSupportedEncodingException uee) {
// 지원하지 않는 문자셋
}

을 했을때, 제대로된 결과가 나와야 하지만, Tomcat의 버그로 인해서 제대로된 값이 나오지 않는다.

이유는
HttpServletRequest의 setCharacterEncoding("UTF-8")이 제대로 동작하지 않기 때문으로
Tomcat은 8859_1을 기본값으로 넣어놨기 때문이다.

즉, value = new String(value.getBytes("8859_1"), "UTF-8"); 과 같이 수정하면
제대로된 값을 받을 수 있다.