String tmp = "<Coolbar><aa>한글</aa><bb>bb</bb></Coolbar>";
InputStream bai = new ByteArrayInputStream(tmp.toString().getBytes("UTF-8"));

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

[util] - 자바 문자열 압축/압축풀기  (0) 2011.11.14
[util] - 특정 디렉토리 파일 목록 출력하자.  (0) 2011.06.17
[util] - byte to hex string  (0) 2010.09.07
[java] - replaceNull  (0) 2010.07.05
[java] - File readLine  (2) 2010.07.01
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 짱가쟁이
여기 저기 돌아 댕기다 보니.. 자바는 '한번 개발해서, 어디서나 동작한다' 라는 플랫폼이라 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 짱가쟁이
뭐 오래전에 quartz를 한번 사용해봤었고.. 나름 편한듯 싶어.. 이번 프로젝트에서도 요넘을 사용하고자 프로토타입을 제작중.. 짜증나는 문제(??) 가 발생함..

Spring + quartz 를 사용하는데.. 요넘들을 같이 사용하면 어플 구동할때 처음에 무조건 실행하게 만드는게 쉽지 않음.. 뭐 다른 방법이 있는데 내가 찾지를 못하는 건지.. 찾다 귀찮아서 그냥 하나 제작함.

뭐.. 다행인건.. Job class 를 구동하는데.. 특별한 parameter가 필요하지 않기 때문에 좀더 쉽게 끝난듯..

MethodInvokingJobDetailFactoryBean.java
package com.quartz;

import java.lang.reflect.Method;

import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;

/**
 * 스케쥴러를 돌리고 싶고.. 무조건 어플이 처음 구동할 때.. 한번은 돌아줘야 하고..
 * 뭐 이런 경우가 가끔 생길지도 모른다.
 * 이럴때 도통 방법을 모르것더라.. 그래서 그냥 MethodInvokingJobDetailFactoryBean 이넘 상속받아서 하나 맹갔다.
 * 스프링 설정시 <property name="fisrtStart"><value>true</value></property> 만 넣어주면 됨.
 *
 * @author 배명훈
 *
 */
public class CtmMethodInvokingJobDetailFactoryBean extends MethodInvokingJobDetailFactoryBean {

    public void setFisrtStart(boolean fisrtStart) {
       
        if(fisrtStart) {
       
            try {
                // spring di로 삽입한 job object
                Class dymClass     = getTargetObject().getClass();            
                Method[] methods = dymClass.getMethods();
               
                for(int i = 0;i<methods.length;i++) {
                    String methodName = methods[i].getName();
                   
                    // spring di로 삽입한 target method를 찾자.
                    if(methodName.equals(getTargetMethod())) {
                        methods[i].invoke(getTargetObject(), null);
                    }
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }  
    }
}

Spring 설정파일
<bean id="weatherProcMethodInvokingJobDetail"
        class="com.quartz.CtmMethodInvokingJobDetailFactoryBean">
        <property name="targetObject"><ref bean="weatherProc"/></property>
        <property name="targetMethod"><value>execute</value></property>
        <property name="concurrent"><value>false</value></property>
        <property name="fisrtStart"><value>true</value></property>
</bean>

스프링 설정 파일을 보면 알것지만.. MethodInvokingJobDetailFactoryBean 을 사용하는 것과 차이점은
firstStart 설정하는 것 밖에 없음..

ps.
    java reflection 은 정말 유용한 기술인듯..
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 짱가쟁이