2010. 5. 24. 15:59 IT

 

  • 버전확인

    logs/access
    ex) 32/Dec/2009:12:01:06] info (1618066): CORE1116: Sun ONE Web Server 6.1SP11 B03/25/2009 11:50 

 

  •  exe 다운로드 가능하도록 설정하기
    mime.types 파일 수정
    변경전
        type=application/octet-stream    exts=bin
        type=magnus-internal/cgi      exts=cgi,exe,bat
    변경후
        type=application/octet-stream    exts=bin,cab,exe
        type=magnus-internal/cgi      exts=cgi,bat
  •  6.1 admin guide document http://docs.sun.com/source/817-1831-10/index.html
  • sunone expire setting
  • sunone header 정보 추가하기
  • 에러 메세지 조치방법
    func_exec reports: HTTP2122: cannot find function named wl_proxy
    -> 원인 : magnus.conf에 wl_proxy module 을 등록하지 않은 경우 발생
    Init fn="load-modules" funcs="wl_proxy,wl_init" shlib="/app/SunWeb/plugins/weblogic/libproxy_61.so"
    Init fn="wl_init"

 

 

 

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 5. 18. 17:45 IT

 

[tip] ibatis sql 공유하기

문제상황>

ibatis 에서 동일한 SQL을 반복적으로 사용

사례>

코드성 테이블
ex) SELECT CODE, CDNM FROM CODEST WHERE CODE_GROP_ID = ?

또는 복잡한 쿼리내에 값을 포함하기 위해 SUB Query 사용


solution>
중복되는 sql 을 sql markup에 집중시키고
기존 sql query는 include 문장으로 대체한다.


예> 한파일 내에서 공유 
sql-map-config.xml
  <sqlMap resource="./sql.xml"/>

sql.xml
 <sql id="CODE.SQL">
  SELECT
   CODE, CDNM
  FROM CODEST
   WHERE CODE_GROP_ID = #codeabbrnm#
 </sql>
  <select id="selectCode" resultMap="codeMap">
  <include refid="CODE.SQL"/>
 </select>

TestClient.java
    Map range = new HashMap();
  range.put("codeabbrnm", "B001");
  List rltList = sqlMapClient.queryForList("selectCode", range); 

 

확장> 별도의 파일로 분리

sql-map-config.xml
  <sqlMap resource="./sql.xml"/>
  <sqlMap resource="./sqlmap1.xml"/>

sql.xml
 <sql id="CODE.SQL">
  SELECT
   CODE, CDNM
  FROM CODEST
   WHERE CODE_GROP_ID = #codeabbrnm#
 </sql>
 <resultMap id="codeMap" class="java.util.HashMap">
  <result property="dtlscode" column="CODE" />
  <result property="dtlscdnm" column="CDNM" />
 </resultMap> 
 
sqlmap1.xml
  <select id="selectCode" resultMap="codeMap">
  <include refid="CODE.SQL"/>
 </select>

TestClient.java
    Map range = new HashMap();
  range.put("codeabbrnm", "B001");
  List rltList = sqlMapClient.queryForList("selectCode", range); 


참고>
resultMap 도 별도의 파일로 분리하여 공유할 수 있다.

 
주의사항>

sql tag는 include를 쓰는 select tag보다 앞에 있어야 한다.
즉 같은 파일 내라면 상위 라인,
별도의 파일이라면 sql-map-config 파일에서 resource 순서상 앞에 지정해야 한다.

ref : http://blog.naver.com/gckcs2/10027711870
http://choikyusun.tistory.com/228


이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 3. 11. 15:35 IT

 

오늘 솔루션 업체쪽에서 SCM에서 변경된 정보만 로그로 받아 처리하고 싶다는 요청을 받았다.

 

업체쪽에서 효율화를 위해 전체를 대상으로 하지 않고

형상에서 변경된 정보만을 취하여 해당 로그를 토대로 추가작업을 진행하려고 하는데,

그 정보를 제공해달라는 요구였다.

 

일반적으로 허드슨에서 생성되는 각 JOB의 빌드 로그는 

$HUDSON_HOME/jobs/$JOB_NAME/builds/YYYY-MM-DD_HH-MM-SI 형태의 폴더에 log 파일로 생성되고,

형상에서 얻어오는 변경정보는 동일한 경로에 changelog.xml 로 생성된다. 

 

이게 작업때마다 바뀌니까 고정된 경로로 제공해달라는 요구였다. 

 

이걸 바로 받아올수 있는 설정이 있는지 찾아보았으나... 없음.

 

그럼 뭔가 다른 플러그인이 있나... 찾아보았지만 좀 귀찮고... 

 

그러다 생각난것이 웹URL로는 고정뙨 정보를 제공한다는 사실.

 

이리저리 유추해본 결과 http://허드슨URL/job/작업명/lastBuild/consoleText 로 접근이 가능하다.

 

그래서 만든 추가 ant task 는...

<get src="http://허드슨URL/job/작업명/lastBuild/consoleText"

dest="/a/b/c/작업명-changes.txt"

/>

파일 처리 task가 있으니 더 할 수도 있지만... 귀찮아서 나머지는 솔루션 업체에게 패스~~~ 

 

 

 

 

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2009. 12. 9. 11:14 IT

 

javelin NullpointerException javelin.jsp.JspTagLibraryFeature.findTLDs 1106

 

* 환경

weblogic

 

 

* 현상

jsp 파일을 웹에서 호출할 경우 500에러 페이지가 뜨며

서버 로그상에는 NullPointerException 이 발생한 것으로 나옴.

 

 

* 원인

WEB-INF 경로 하단에 was 실행유저가 접근할 수 없는 경로가 있을 경우 발생

-> JSP컴파일러는 초기화 과정에서 WebApplication의 tld 정보를 미리 로드함. WEB-INF 하위의 모든 경로를 순회하여 tld를 인식하는 작업을 진행하는데,

이때 현재 실행중인 계정에서 접근 권한이 막힌(ex. root) 경로가 있을 경우 접근에 실패하면서 NullPointerException을 반환하게됩니다.

 

* 조치

해당 경로의 접근권한을 변경, 또는 불필요한 경로일 경우 삭제함.

ex) chown -R ibwas.?? can_not_access_directory

 

 

* 예방책

FTP 접근 권한을 강화하고, 해당 이슈를 공지하여 추가적인 오류를 막습니다.  

 

P.S. 구글링도 그닥 도움이 되지 않아, 오류메세지를 따라 디컴파일한후 알아냈다. 더 엉큼했던건, jar 이름도 전혀 생뚱맞았다. 

javelinx.jar 일줄 알았지? server\lib\wlw-lang.jar 였다.. 

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2009. 10. 18. 00:30 IT

 

AIX 장비에서 발견한 재미난 일.

 

"IBM java는 주석의 철자오류도 검사해준다?"

 

출처 : http://greatbeat.tistory.com/327

 

내가 돌려본 곳에서는 다음과 같은 메세지가 나왔다.

  1.  
  2. [javac] Compiling 108 source files to /home/ctip/workspace/*****/admin/was/WEB-INF/classes
    [javac] error: IO exception sun.io.MalformedInputException

 

주석도 제대로 작성해야 한다는 것을 시스템적으로 구현해준 멋진(...) 사례랍니다.

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2009. 10. 18. 00:29 IT

 

최근 모 PJT에서 윈도우용으로 설정된 property와 빌드파일의 내용을 변경하지 않고

Unix(AIX)에서 사용할수 있도록 요청받은 일이 있었다.

 

통상의 대응방법은 Unix에서 사용하기 위해 별도의 빌드파일과 프로퍼티 파일을 생성하여 대응하는 편이었는데,

이런 방식의 단점은 관리대상이 늘어나고, 복잡도가 커지는 것이다.

 

그래서 ANT 나라 사람들은 어떻게 이문제를 해결하나 싶어 둘러보았다.

 

  1. os.name 값을 활용한다.
    http://java.sun.com/j2se/1.3/docs/api/java/lang/System.html#getProperties()
    예) <property file="${os.name}.properties"/>
    이경우 XP 는 "Windows XP" , AIX 는 "AIX" 로 출력된다. 
    더 상세한 내용은 아래를 참고바란다.
    http://mail-archives.apache.org/mod_mbox/ant-user/200401.mbox/<4015565A.2080009@corvil.com>
    아쉬운 점은 os.family 값은 존재하지 않는다는 것이다. 
    os.name 은 같은 윈도우라도 Windows XP, Windows 2000 등 공백을 포함한 각기 다른 OS명을 반환한다. 
  2. condition task를 이용하여 구별한다.
    예) <condition property="iswindows">       <os family="windows"/>    </condition>    <target name="windows.init" if="iswindows">
    http://ant.apache.org/manual/CoreTasks/condition.html
    이 방식을 사용할 경우의 문제점은 condition에 따라 특정 target에서 antcall을 하여 property를 os에 따라 setting 할 경우 변수값이 공유되지 않는 다는 것이다.
    아래와 같은 경우 window.properties 에 존재하는 변수들은 all target에서 인식되지 않는다. 
    <target name="window" if="iswindows">
       <antcall target="window.init"/>
    </target>
    <target name="window.init"/>
       <property file="window.properties"/>
    </target>
    <target name="all" depends="window"/>

 

그래서 해결한 방법은 다음과 같다.

<property file="${os.name}.properties"/> <!-- unix 환경 -->

<property file="default.properties"/> <!-- window 환경 -->

 

특정 OS환경에 따른 변수값을 먼저 설정하도록 지정한 것인데,

일반적인 통념과는 달리, ANT는 property에 값이 먼저 셋팅되면 다음에 무엇이 오더라도 변경이 되지 않는 것으로 보인다.

즉 default.properties 에 같은 이름의 변수가 있다 하더라도, 해당하는 {os.name}.properties 의 변수가 고정으로 사용된다는 것이다.

 

결과적으로 윈도우 개발자들은 항상 default.properties 를 탈 것이고,

Unix 환경에서는 Unix OS (AIX, Linux, HP-UX, SunOS ) 설정 파일이 지정한 값에 따라 선택 될 것이다.

 

그래서 문제 해결~~~ (이것때문에 몇시간 헤멨다.. )

 

 

 

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2009. 10. 18. 00:27 IT

 

EA에서 제공하고 있는 JAVA Api를 사용하는 것 보다 이게 더 쉬워보인다... 

 

  1. Groovy Project 생성
  2. library 추가
    - groovy-all-1.6.1.jar
    - jacob-1.14.3-x86.dll
    - jacob-1.14.3.jar
    - scriptom-1.6.0.jar
    - EA.tlb
  3. scripting

    1. add import 
    1. import org.codehaus.groovy.scriptom.*;
    1. create activex object
    1. def ea = new ActiveXObject('EA.App')
    1.  repository file open
    1. def repo = ea.Repository
      repo.OpenFile(files)
    1. get package
    1. repo.Models.find{it.name==MODEL_NM_ANAL}.Packages.find{it.name=="Use Case Model"}.Packages.find{it.name=="Use Cases"}
    1. do something
    1. elem.Name = "trans word"
      elem.Update()

4. run environment setting
    1. set CLASSPATH
      set CLASSPATH=./bin-groovy;lib/jacob-1.14.3.jar;lib/scriptom-1.6.0.jar;lib/groovy-all-1.6.1.jar;./lib/jacob-1.14.3-x86.dll
    2. call java 
      java a.b.c.YourGroovyClass ... 

 

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2009. 2. 18. 10:37 IT

 

오늘 팀원에게서 받은 질문

"eclipse에서 subversion user를 변경하고 싶은데, 방법을 못찾겠다."

때문에, 

 

예전 자료를 찾았는데, 해결이 잘 안되서 역시 구글링.

 

유형은 두가지가 있다.

A) SVNKit 사용시

%eclipse%/configuration/org.eclipse.core.runtim 폴더 밑에 있는 .keyring 파일 삭제

 

B) JavaHL 사용시

B-1. %APPDATA%\Subversion\auth\svn.simple 에 해당 정보를 담고있으므로, 관련정보를 찾아 삭제. (귀찮으면 다... )   

cf. 통상 %APPDATA%는 Documents and Settings/%username%/Application Data 로 잡혀있다.

B-2. TortoiseSVN을 사용할 경우라면 TSVN의 메뉴에서 cache 삭제를 수행 

 

C. 내가 svn 관리자라면.

client가 아닌 서버에서 해결한다. -> svn password 정보를 변경해버린다. 

 

참조 사이트 : http://www.techcrony.info/?p=29

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2008. 11. 5. 13:45 IT

 

작업하는 곳이 자주 바뀌는 편인데,

여길 한번 더 올지, 안올지 확실하지 않은 경우가 있습니다.

그래서 한통으로 ip정보를 관리하는 것은 비효율적이라는 판단.

 

그래도 혹시 모르니 해당 site에 대한 ip설정 정보는 보관해두는게 좋겠다 싶어서..

 

- 요구사항

주어진 ip설정정보를 보관하여 향후 재사용할수 있도록 한다.

매번 설정작업을 하지 않도록 처음 설정한 정보가 향후에는 실행 가능한 형태로 되어야 한다.

 

  • 구현이슈

    • 사용자 입력을 받는다 (ip,gw, dns, sm) + 자주 쓰이는 값은 입력하지 않아도 되도록 기본값을 제공한다.
    • 배치파일형태로 저장하여 클릭하면 바로 설정되도록 한다.
    • 자주 사용하는 "로컬영역" 에 대해서만 구현한다. -> 무선네트웍인 경우는 흔치 않음
    • 이미 해당 정보가 존재할 경우 덮어쓰지 않도록 처리한다. -> 파일명에 대해 중복처리
    • 지원 환경은 윈도우로 제한한다. (현재 쓰는 장비가 윈도OS이므로..) -> 윈도우 batch

        

make_ip.cmd

  1. @echo off
  2.  
  3. title IP CHANGER
  4. setLocal
  5. set DEFAULT_DNS=208.67.220.220
  6. set DEFAULT_SM=255.255.255.0
  7. rem 배치파일을 저장할 위치. 
  8. set NETPATH=C:\
  9. set LOCAL_NETWORK=로컬 영역 연결
  10.  
  11. :IP_GEN
  12. echo 새로운 ip 설정파일을 생성합니다. 
  13. set /p fname=IP Setting File Name :
  14. if exist %NETPATH%\%fname%.cmd goto exist_file
  15. set /p ip=IP Address (xxx.xxx.xxx.xxx) :
  16. set /p sm=subnet mask (255.255.255.0) :
  17. if "%sm%"=="" set sm=%DEFAULT_SM%
  18. set /p gw=Gateway (xxx.xxx.xxx.xxx) :
  19. set /p dns=DNS (xxx.xxx.xxx.xxx) :
  20. if "%dns%"=="" set dns=%DEFAULT_DNS%
  21.  
  22. echo netsh interface ip set address name="%LOCAL_NETWORK%" static addr=%ip% mask=%sm% > %NETPATH%\%fname%.cmd
  23. echo netsh interface ip set address name="%LOCAL_NETWORK%" gateway=%gw% gwmetric=1 >> %NETPATH%\%fname%.cmd
  24. echo netsh interface ip set dns name="%LOCAL_NETWORK%" source=static addr=%dns% primary >> %NETPATH%\%fname%.cmd
  25. echo netsh interface ip show config "%LOCAL_NETWORK%" >> %NETPATH%\%fname%.cmd

  26. %NETPATH%\%fname%.cmd
  27. goto end
  28.  
  29. :exist_file
  30. echo 파일이 이미 존재합니다. 다른 이름으로 만들어주세요. 
  31. goto IP_GEN

  32. :end
  33. endLocal

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2008. 10. 22. 09:29 IT

 

최근에 FTP를 이용하여 업무상 데이터를 공유하는 작업을 수행하고 있었습니다.

매일 할일을 FTP에 올려놓으면 상대방이 다음날 등록된 파일을 확인해서 작업하고

다시 결과를 특정 FTP 경로에 올려놓는 것이었습다.

(물론 형상관리툴을 사용하지 않은 관계로 백업이나 버전관리에 다소 어려움이 있었습니다.)

 

하여튼, 상대방과 그날 그날의 일거리를 체크하는데,

일일이 눈으로 확인하는 것 보다는 자동화 하는게 어떻냐고

단순하게 이야기 했다가

스크립트까지 짜게 되었습니다.

 

제일 핵심은 FTP 접근을 자동화하는 것,

그리고 결과를 어떻게 받아올것인가 였습니다.

 

이전에도 도스 스크립트를 작성해본 경험이 있었기때문에,

이곳저곳 간단하게 참조하여 짜집기 하여 구현했는데,

 

FTP호출을 자동화 하는 방법은 윈도우의 FTP 커맨드에서 제공하는 -s 옵션을 활용했습니다.

물론 해당 스크립트 파일은 환경변수를 사용할수 없는 정적 파일 형태만을 지원합니다.

따라서 동적으로 파일을 만드는 과정도 추가했습니다.

 

아래에 간단한 스크립트 조각에 대한 설명을 기록합니다.

 

1. 작업에 필요한 정보를 정의

  1. set FTP_CMD=c:\work\i_love_it.txt 
  2. set FTP_IP=192.168.0.9
  3. set FTP_ID=ftpuser
  4. set FTP_PWD=yourpwd

첫번째 FTP_CMD는 FTP호출에 사용할 스크립트 파일명을 정의했습다.

나머지는 ftp 접속 ip, id, password를 의미합니다.

 

2. 오늘 날짜를 얻기

  1. FOR /F "TOKENS=2" %%i IN ('date /t') DO SET FullDate=%%i
  2. SET Month=%date:~5,2%
  3. SET Day=%date:~8,2%
  4. SET Year=%date:~0,4%
  5. set TODAY=%Year%%Month%%Day%

좀더 쉬운 방법도 있겠지만 여기서는 yyyymmdd 형태의 값을 만들기위해 웹에서 돌아다니는 코드를 이용했습니다.

 

3. 로그파일명 정의

  1. set LOG_FILE=c:\work\todo-list-%TODAY%.log

FTP 결과를 로그에 저장하기 위해 정의합니다.

 

4. 스크립트 파일 만들기 

  1. echo open %FTP_IP%>> %FTP_CMD%
  2. echo user %FTP_ID%>> %FTP_CMD%
  3. echo %FTP_PWD%>> %FTP_CMD%
  4. echo cd "pubs/working">> %FTP_CMD%
  5. echo dir %TODAY% %LOG_FILE%>> %FTP_CMD%
  6. echo bye>> %FTP_CMD%

FTP용 스크립트 명령을 파일에 저장하는 작업입니다.

먼저 FTP서버에 접속하여 로그인하고 pubs/working 위치로 간다음

%TODAY% 경로 (ex. 20091022) 를 리스팅 하여 %LOG_FILE%에 저장하고 있습니다. 

 

5. ftp 스크립트 실행하기 

  1. ftp -n -v -s:%FTP_CMD%

ftp를 스크립트로 실행합니다.

 

6. 결과처리

  1. findstr /I /C:"doc" %LOG_FILE%> null
  2. if not errorlevel 1 goto exist_job
  3. echo ### Congratulations, We can play now! :D ###
  4. goto end
  5. :exist_job
  6. echo ### sorry, we have work. T.T ###
  7. notepad %LOG_FILE%
  8. :end

로그파일 내에 문서(doc)파일 목록이 있으면 notepad로 목록을 보여주고,

없으면 콘솔메세지만 뿌리고 종료처리 합니다.

 

물론.. FTP 실행시 아예 있으면 파일을 가져오는 것도 좋은 방법입니다.

마지막으로 윈도우 스케줄러에 걸어놓으면 끝.

 

좀더 효과적으로 피드백을 받으려면,

RSS나 메일링, 메신저 전송기능을 뒤에 붙이는 것도 재미있겠네요.  좀더 재미를 추구하신다면  Ambient Orb 류도 OK. :)

 

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote