서버에 접근하기 힘들고.. 로그는 봐야 할때.. Tomcat web root 폴더에 log 파일을 생성하게 만들고..

본인은 D:\www\log 경로에 로그파일을 생성했다.


C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\web.xml 파일을 조금 수정하면 땡.

<init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
</init-param>

fasle 를 true로 변경하면.. 디렉토리 구조로 로그파일에 접근이 가능하다. 뭐.. 다른 보안상의 문제점이 있기는 하것지만.. 로그를 외부에서 꼭 봐야 한다면.. 요넘도 나쁘지는 않을 듯..


Posted by 짱가쟁이


install_service.bat
@set TARGET_APP=batch.weather.Launcher
@set JVM_PATH="C:\Program Files\Java\jdk1.6.0_21\jre\bin\client\jvm.dll"
@set DIST_HOME="D:\star_map\dist"
@set OUT_LOG="D:\star_map\log\stdout.log"
@set ERR_LOG="D:\star_map\log\stderr.log"
@set JSEXE="D:\star_map\JavaService-2.0.10\JavaService.exe"
 
@set CLASSPATH="D:\star_map\dist\lib\Altibase.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\aspectjweaver.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\commons-collections.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\commons-configuration-1.2.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\commons-dbcp.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\commons-lang-2.1.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\commons-logging.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\commons-pool.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\hoon.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\hsqldb.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\ibatis-2.3.4.726-hoon.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\log4j-1.2.13.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\msbase.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\mssqlserver.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\msutil.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\mysql-connector-java-3.1.13-bin.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\ojdbc14.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\quartz-1.5.2.jar";%CLASSPATH%
@set CLASSPATH="D:\star_map\dist\lib\spring.jar";%CLASSPATH%


@%JSEXE% -install WEATHER_SERVICE %JVM_PATH% -Djava.class.path=%CLASSPATH% -Xms64M -Xmx512M -start %TARGET_APP% -out %OUT_LOG% -err %ERR_LOG% -current %DIST_HOME% -description "Weather batch service"

Posted by 짱가쟁이
   private static final char[] hexDigits = {
        '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
    };

   public static String toString(byte[] ba, int offset, int length) {
        char[] buf = new char[length * 2];
        int j = 0;
        int k;

        for (int i = offset; i < offset + length; i++) {
            k = ba[i];
            buf[j++] = hexDigits[(k >>> 4) & 0x0F];
            buf[j++] = hexDigits[ k        & 0x0F];
        }
        return new String(buf);
    }

    public static String toString(byte[] ba) {
        return toString(ba, 0, ba.length);
    }

바이트 배열을 헥사 문자열로 변환하는 유틸

'java > util' 카테고리의 다른 글

[util] - 특정 디렉토리 파일 목록 출력하자.  (0) 2011.06.17
[InputStream] - String to InputStream  (1) 2010.10.13
[java] - replaceNull  (0) 2010.07.05
[java] - File readLine  (2) 2010.07.01
[java] - File read  (0) 2010.07.01
Posted by 짱가쟁이

IBM DW 에 소개된 jar 관련된 기사가 한글로 번역되었다. 예전과 다르게 번역이 빠르게 진행되는 듯 싶어 나름 기쁘다. (영문은 ㅡㅡ)

자바 개발자는 JAR(java Archive) 에 친숙하고 여러가지 방법으로 사용하고 있지만.. 여기서 소개되는 5가지 재미난 기능을 제대로 알고 사용하는 사람은 많지 않을 듯(나만 그런가 ㅋ) 싶다.

마지막 기능을 보면 JAR에는 코드 이상의 것이 담겨 있다. 라는 단락이 나오는데 요넘을 보면 jar 내에 있는 resource도 접근 가능한 방법을 제시하고 있다.

아래는 예제로 구성된 넘.. 쓸일이 있을지 모르지만.. 참조로는 좋을듯 싶다.



'java > etc' 카테고리의 다른 글

[etc] - 테스트 유형  (0) 2010.12.21
[JavaService] - 자바 데몬 서비스 등록하자  (0) 2010.09.29
[etc] - java 64bit 에서 개발??  (0) 2010.08.04
[java] - 예제 코드 많은 사이트  (0) 2010.06.30
[java] - beep  (0) 2010.06.30
Posted by 짱가쟁이
우선 이클립스에서 Dynamic web project 로 프로젝트를 생성하고 Server를 tomcat 6.0 으로 개발을 진행하던중..

꼭 프로젝트 경로에 있는 넘만 실행시킬 필요가 있을까?? 실 운영환경이랑 비슷하게 개발할 수 없을까 하는 생각에 이것저것 찾아보게됨..


자.. 그러면 실제로 변경해야 할 부분은 Servers/server.xml 이넘을 수정하면 된다.

<Host appBase="D:/www" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">

<Context docBase="프로젝트명(폴더명)" path="" reloadable="false"  /></Host>

위 빨강이를 보면 D 드라이브에 www 폴더를 생성하고 그넘으로 경로를 잡아준다.

뭐.. 위에 넘만 설정하고. "D:/www/프로젝트명" 경로에 실제 프로젝트에서 구동시킬 설정파일과 class 파일들을 복사만 하면 땡임.




위 설정된 넘으로 테스트 하던 중.. 웹 서비스가 두번 로딩되는 문제가 발생 됨.

뭐.. 서비스 하는데는 문제가 되지는 않지만.. 찝찝함을 견딜 수가 없다는 ....

여기저기 검색을 하다보니.. 스프링에 쿼즈로 작업한 넘을 톰켓에 올려서 구동하는 사람이 같은 문제로 고생한 글을 찾을 수 있었다. 뭐 그냥반 글을 보면 위 Host 쪽에서 설정한 넘으로 한번 로딩하고.. Context 에서 한번 더 로딩하기 때문에 문제가 발생한다고 한다.  뭐 해결책은 Context를 삭제하면 한번만 로딩된다. 쩌ㅃ~



Posted by 짱가쟁이
여기 저기 돌아 댕기다 보니.. 자바는 '한번 개발해서, 어디서나 동작한다' 라는 플랫폼이라 bit 영향을 받지 않는다고 한다. 자바에서 primitive 데이터 타입은 사이즈가 고정이기 때문에 물론 영향을 받지 않는다고 한다. 결론은 별 문제가 없다는 거임..

뭐.. 추가적으로 C로 개발된 넘을 사용하게 된다면 그때는 알아서 ㅋ


참조
http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#64bit_description
http://www.anyframejava.org/node/462
Posted by 짱가쟁이
메지지 박스 요넘도 자주 사용 안하는 관계로 매번 사용할 때 마다 검색을 해야 한다능..

Example
JOptionPane.showMessageDialog(메시지박스가 보여질 컴포넌트, "메시지");

JOptionPane <- 요넘은 여러개의 메시지 창을 가지고 있음.. 알아서 잘 찾아 사용하면 됨
Posted by 짱가쟁이

가끔 문서를 제대로 읽지 않아서 삽질하는 경우가 있기는 하지만 이번엔 정말 대박인듯..

swing은 thread 에 안전하지 않다는 문구는 여기 저기 돌아 댕기고.. api 내에 설명까지 하고 있지만.. Swing을 자주 사용하지 않을 뿐더러.. 테스트용 어플만 만들다 보니 이런 실수가 발생되는 듯.

우선은 데이터 추출하는 Thread 에서 아이템을 차례대로 JList에 삽입함과 동시에 마지막 아이템을 select 하고 싶고, 스크롤을 마지막으로 보내고 싶다는 단순한 생각이 이렇게 삽질하게 만들줄은 꿈에도 생각못 함. 쩌ㅃ~

우선은 스크롤을 마지막으로 보내는 ensureIndexIsVisible() 요넘을 Thread 에서 사용하면 exception 이 발생된다. 뭐 이때 사용하라고 있는 넘이 SwingUtilities.invokeLater 요넘인건 기초중에 기초인데.. 왜 자꾸 까먹고 실수 하는 건지.. ㅡㅡ;;

Example
public void run() {
..............................
jList.setListData(v);
jList..setSelectedIndex(v.size()-1); // 마지막 아이템 select 하자

 SwingUtilities.invokeLater(new Runnable() {  // Thread safety 하게 만들자..
        public void run() {
            jList.ensureIndexIsVisible(jList.getSelectedIndex());
        }
});
}

위 샘플 코드를 보면 쓰레드에 안전하지 않은 넘을 쓰레드에 안전하게 만들어.. race condition 을 해결한다.

ps.
다음번에도 같은 실수를 반복할까? 머릿속의 지우개가 결정할 문제일 듯 쩌ㅃ~

'java > swing' 카테고리의 다른 글

[swing] - SwingX  (0) 2010.10.27
[swing] - 메시지 박스  (0) 2010.07.19
[swing] - look and feel  (0) 2010.06.30
[swing] - JFileChooser 사용하자  (0) 2010.06.30
[swing] - JTableHeader 값 중앙에 배치하기  (0) 2010.06.30
Posted by 짱가쟁이

wipi 2.0 표준 api 를 보면 IODevice 라는 넘이 존재한다. 이넘을 사용해서 smart card(usim) 에 read/write 할 수 있다.

connect
- IODevice 클래스를 사용해서 chip에 connect 하고 ATR 값을 읽어온다.
/**
     * Connect 하면 ATR 값을 Chip에서 읽을 수 있다.
     *
     * @throws IOException
     */
    public static void connect() throws IOException {       
        byte bAtr[] = Util.byteSet(50, (byte)0x20);
       
        if(iod == null) {
            try {
                iod = new IODevice("1ChipCard", 0, bAtr);
            } catch (IOException e) {
                close();
                System.out.println("[OpCard Connect Exception] - " + e);   
                throw e;
            } catch (Exception e) {
                close();
                System.out.println("[OpCard Connect Exception] - " + e);   
                throw new IOException("Conect Error!");
            }
            atr = Util.byteArr2HexaStr(Util.byteTrim(bAtr));   
        }       
       
        System.out.println("[Debug] - OpCard Connect Success!"); 
        System.out.println("[Debug] ATR - " + atr); 
    }       

apdu send
- chip에 apdu 명령을 보낸다.
/**
     *
     * @param cmd (cls, ins, p1, p2, lc , data, le)
     * @return
     * @throws IOException
     */
    public static String send(byte[] cmd) throws IOException {       
        String szBuf = null;
        int ret = 0;
        byte buf[] = new byte[255];
       
        if(iod != null) {
            try {
                iod.write(cmd);
                ret = iod.read(buf);                       
            } catch (IOException e) {
                close();
                System.out.println("[OpCard send Exception] - " + e);   
                throw e;
            } catch (Exception e) {
                close();
                System.out.println("[OpCard send Exception] - " + e);   
                throw new IOException("Send Error!");
            }
        }
       
        szBuf = Util.toString(buf, 0, ret);  // byte -> Hex String 변환
        System.out.println("[Debug] ret - " + ret); 
        System.out.println("[Debug] buf - " + szBuf); 
       
        return szBuf.trim();
    }

close
- connection 종료
public static void close() {       
       
        if (iod != null) {
            try {
                iod.close();
                iod = null;
            } catch (IOException e) {
                iod = null;
                System.out.println("[OpCard Close Exception] - " + e);   
            } catch (Exception e) {
                iod = null;
                System.out.println("[OpCard close Exception] - " + e);   
            }
        }    
        System.out.println("[Debug] - OpCard Close Success!"); 
    }

흠... 위 코드는 SKT wipi 폰에서 테스트 됨.
KT는 뭐.. 공개하면 안될듯 ㅋ


'java > smart card' 카테고리의 다른 글

[smart card] - smartcardio 사용하기(2)  (3) 2010.06.29
[smart card] - smartcardio 사용하기(1)  (0) 2010.06.29
Posted by 짱가쟁이
2010. 7. 5. 14:25
흠. 가끔 Object를 파라미터로 넘길 때 각 필드값에 Null 이 들어가면 안될 경우가 생간다. 매번 object.setField("") 이런식으로 값을 초기화 시키기 귀찮으면 java refection 기능을 응용해서 작업해도 좋을 듯 싶다.

replaceNull()
- object의 선언된 필드만 가지고 와서 Null 값을 체크한다. 값에 null 이 있으면 "" 로 초기화 한다.
public static void replaceNull(Object obj) throws Exception {
        try {
            Class dymClass      = obj.getClass();
            Field[] fields            = dymClass.getDeclaredFields();
           
            for(int i = 0;i<fields.length;i++) {
                String methodName = "get" + fields[i].getName().substring(0, 1).toUpperCase() + fields[i].getName().substring(1, fields[i].getName().length());               
                Method method       = obj.getClass().getMethod(methodName, null);
                String value       = (String)(method.invoke(obj, null) + "");
                if("null".equals(value)) {
                    value = "";
                    String setMethodName = "set" + fields[i].getName().substring(0, 1).toUpperCase() + fields[i].getName().substring(1, fields[i].getName().length());
                    Method setMethod       = obj.getClass().getMethod(setMethodName, new Class[]{String.class});
                    setMethod.invoke(obj, new Object[]{value});
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            throw e;
        }       
    }


'java > util' 카테고리의 다른 글

[InputStream] - String to InputStream  (1) 2010.10.13
[util] - byte to hex string  (0) 2010.09.07
[java] - File readLine  (2) 2010.07.01
[java] - File read  (0) 2010.07.01
[java] - byte array to image  (0) 2010.06.30
Posted by 짱가쟁이