java -Xdump:what

위와 같이 하면 설정된 기본 옵션 나온다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

[Solaris]
Stack : pstack
Map : pmap

[AIX]
Stack : procstack
Map : procmap

[Linux]
Stack : lsstack
map : pmap

[HP-UX]
별도 툴 없고, GDB, ADB 사용함
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

kill -3 <PID>

요렇게 뜨자.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

\W.*System.out.println.*[;|\r]

요렇게 search 해서 지우자
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
NTP 를 사용하여 리눅스 시간 맞추는 방법

rdate -s time.bora.net


위와 같은 커맨드로 시간 동기화 가능하다
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
이것땜에 오늘 또 하루를 날렸다.. 바쁜때에는 꼭 예상 밖의 일들이 터져서 하루를 피곤하게 만든다.

며칠 전부터, 개발서버 AIX 환경에서 매 요청 마다 Exception 이 계속 발생했는데,
대충, Struts2 의 FileUploaderInterceptor 에서 부터 시작하고, 결국에는 NoSuchFieldException 을 throw 하게 되는 콜스택을 보이는 예외이다.

사실 동작하는데 크게 문제는 없지만, 여간 신경쓰이는게 아니어서 해결하려고, Struts2 와 내부에서 사용하는 xwork2 의 소스까지 빌드해가면서 찾아낸 결론은,

AIX 에서는 IBM JDK (JDK6) 와 xwork 와의 호환성에 문제가 있어,
struts.xml 이나 properties 에서, struts.i18n.reload 와 devmode 옵션을 false 로 주어야 한다


는 것이다.

좀더 깊숙히 원인을 분석해본 결과, struts2 가 사용하는 xwork2 라이브러리에서, ResourceBundle 을 사용하는데,
Struts 의 Dispatcher 에서 사용하는 xwork 의 클래스 중에서 (LocalizedText 였나.. 기억이..) java.util.ResourceBundle 을 사용한다.

이때, xwork 의 옵션으로, 리소스를 동적으로 갱신 시에 리로드 할 수 있는 옵션을 줄 수 있는데, struts2 에서는 Dispatcher 에서 struts.i18n.reload 옵션값을 읽어, xwork 에 설정하도록 한다.
이때 reload 옵션이 true 인 경우, 위와 같은 문제가 생기는데, 옵션이 true 이면, ResourceBundle 의 claerCache() 메소드를 호출하거나 하는게 아니라, Reflection 기능을 사용하여, ResourceBundle 의 내부 HashMap, 그것도 private 로 선언된 놈(멤버변수명: cacheList) 을 setAccessible(true)를 써가면서 까지 가져와 직접 clear() 를 호출하도록 하고 있다.

여기에서 문제가 생기는데, Sun 의 JDK 의 경우, 위 map 의 변수명이 cacheList 이지만, IBM 의 JDK 의 구현 소스는 내부적으로 많이 다르고, cacheList 라는 Field 변수 자체가 없다. 그래서 오류가 나는 것이다.

이 기능을 안쓰거나, xwork 소스를 수정하는 방법이 있겠는데, 나는 회피하는 방법을 쓰려고 struts.i18n.reload 를 false 로 struts.xml 의 constant 선언으로 값을 주었지만 먹지를 않았다. 그래서 결국 xwork 와 struts 를 소스로 받아 세팅값이 먹혔는지 보기 위해 maven 으로 빌드까지 해가면서 파악 해보니, struts.i18n.reload 값에 앞서, devmode 를 false 로 해줘야 하는것을 알 수 있었다.

결국은 저렇게 세팅하나 잘못 바꿔서 하루를 날려버리는 참 어처구니 없는 일을 저지르고 말았다..
그래도 Reflection 의 강력한 기능과 Struts2 의 내부를 조금이나마 더 들여다 볼 수 있는 기회이기도 했다는데에 만족하고 있다.

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

MessageContext messageContext = MessageContext.getCurrentContext();
HttpServlet servlet = (HttpServlet)messageContext.getProperty(HTTPConstants.MC_HTTP_SERVLET);
ServletContext servletContext = (ServletContext)servlet.getServletContext();

HttpSession session = (HttpSession)messageContext.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);

위와 같은 방식으로 가져올 수 있다
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

오늘 아주 이놈땜에 몇시간을 삽질했는지 모르겠다.. 하루가 다 갔다.
ANT 로 컴파일 하도록 하였는데, Task 중, Javac 태스크에, 옵션 하나가 지정이 안되어서 아주 고생했다.

바로, encoding= 옵션!
encoding="utf-8" 처럼 지정해주지 않으면, 코드 내에 한글 등 다국어는 커파일 당시 OS 의 언어 설정으로 먹는 듯 하다.

하루 종일, LANG=C 인 환경에서, 필터 빼고 넣고 별 짓을 다하다가 찾아냈다..
반드시 주의하자!~ 다국어 지원 필요한 경우, .java 파일 자체 인코딩은 당연히 UTF-8 이어야 하고,
컴파일러에게도 인코딩을 지정해 주어야 한다!~
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
Tomcat 에서는 server.xml 과 context.xml 에 리소스와 리소스 링크 추가해주면 잘 찾는데,
이상하게 Jeus 에서는 계속 네이밍 못찾는다고 나와서 요것조것 해보다 보니,

Jeus 에서는 web.xml 에 resource-ref 를 추가 안해주면 못찾는구나.. 라는 결론이 나왔다.

아래와 같이 Jeus 와 web.xml 을 모두 세팅 해줘야 하더라..

1. JEUSMain.xml 설정

  
   <resource>
      <data-source>
         <database>
            <vendor>mysql</vendor>
            <export-name>cserverdb</export-name>
            <data-source-class-name>jeus.jdbc.driver.blackbox.BlackboxConnectionPoolDataSource</data-source-class-name>
            <data-source-type>ConnectionPoolDataSource</data-source-type>
            <stmt-query-timeout>60000</stmt-query-timeout>
            <property>
               <name>DriverClassName</name>
               <type>java.lang.String</type>
               <value>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</value>
            </property>
            <property>
               <name>URL</name>
               <type>java.lang.String</type>
               <value>jdbc:mysql://192.168.1.X:3306/cserverdb?autoReconnect=true</value>
            </property>
            <property>
               <name>User</name>
               <type>java.lang.String</type>
               <value>XXXXXX</value>
            </property>
            <property>
               <name>Password</name>
               <type>java.lang.String</type>
               <value>XXXXXX</value>
            </property>
            <action-on-connection-leak>Warning</action-on-connection-leak>
            <connection-pool>
               <pooling>
                  <min>2</min>
                  <max>30</max>
                  <step>1</step>
                  <period>3600000</period>
               </pooling>
               <wait-free-connection>
                  <enable-wait>true</enable-wait>
               </wait-free-connection>
            </connection-pool>
         </database>
      </data-source>
   </resource>

2.WAR 의 web.xml 에 아래와 같이 추가

	
       <resource-ref>
		<description>Datasource Contents Server</description>
		<res-ref-name>cserverdv</res-ref-name>
		<res-type>javax.sql.DataSource</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>

3. iBatis 의 sqlmapConfig.xml 을 아래와 같이 설정
	<transactionManager type="JDBC" >
		<dataSource type="JNDI">
			<property name="DataSource" value="cserverdb"/>
		</dataSource>
	</transactionManager>

위에서, DataSource 에, java:comp/env/cserverdb 가 아니고, 그냥 cserverdb 임에 반드시 주의하자~! 요것땜에 많이 헤맸네~?

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
이번에 Tomcat / Eclipse 에서 개발하던 환경이 Jeus 로 올라가면서 동작하지 않아 난감한 상황이었는데,
결국 사소한 문제 때문에 작동하지 못한거여서 참으로 황당하네..

struts.xml 에서, package 정의와 include 시에 아래와 같은 사항에 주의해야 하겠다.

1. namespace 에 root 를 지정할 경우 주의점

 package 의 attribute 중에, namespace 를 지정할 때에, root 요소를 지정하는 경우, namespace="/" 가 아니라
 namespace="" 로 주어야 한다.
 즉, 값 안에 / 가 있어서는 안된다.

2. include 시에 주의 점

include file="/demo/db/user-navi.xml" 과 같이 해서는 안되고,
include file="demo/db/user-navi.xml" 과 같이, 앞의 "/" 를 빼도록 한다.
아직 테스트는 안했지만, 앞에 / 가 붙으면 절대 경로로 찾는 듯 하다. 절대경로 찾을 시 root 는 system 루트가 되는 듯 함.

이상 사소한 것들이지만, 작동이 안되는 우를 범하지 말도록 하자.




반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,