Java 6u21 과 이클립스

최근에 오라클에서 Java 6 update 21 을 발표했습니다. 이번 버전에서 java.dll의 변경된 사항으로 인해 이클립스 구동에 영향을 미치게 되었다고 합니다.

변경 사항은 JDK의 개발사 정보를 기존 "Sun Microsystems, Inc." 에서 "Oracle Corporation" 으로 수정한 것인데요 이클립스의 경우 Sun JRE 에 있는 non-standard 실행 옵션 중의 하나인 -XX:MaxPermSize 적용 가능 여부를 java.dll의 제조사 정보 문자열의 "Sun Microsystems"로 구분하고 있다고 하네요. 실제로  -XX:MaxPermSize 옵션을 지원하지 않는 몇몇 JVM에 해당 옵션을 적용하면 이클립스 구동이 실패한다고 합니다. 이클립스 런처는 Windows에서 실행되는 SUN VM인 경우 자동으로 -XX:MaxPermSize=256m 옵션을 적용한다고 하네요.

JVM 의 Vendor 정보를 변경한 것으로 영향을 받는것은 비단 이클립스 뿐만이 아닐겁니다.
http://www.excelsior-usa.com/blog/excelsior-jet/apps-will-stop-working-under-oracle-jre/(새 창으로 열기) 에서와 같이 System.getProperty("java.vm.vendor") 값으로 무언가를 처리하는 모든 어플리케이션이 영향을 받을 수 있습니다.

JAVA가 Oracle의 자산이 된 이상 개발사 정보를 변경하는 것을 뭐라고 할 순 없지만 기존에 개발된 어플리케이션에 미치는 영향을 생각한다면 오라클이 어떤식으로든 액션을 취하지 않으면 안될것 같습니다. Java 6u21에서 이클립스 구동이 실패한다면 당분간은 JDK를 Java 6u20으로 다운그래이드 해야할 듯 합니다.
이 글의 관련글
  • CLASSPATH에 없는 클래스 로딩
  • 넷빈즈(NetBeans)강좌 시작에 즈음하여.. v1.0
  • 넷빈즈(NetBeans) 실행하기 - Option 둘러보기 v1.0
  • ANT 를 이용한 RMI 컴파일 ( rmic 로 stub 생성하기 )
  • 자바 파일복사 코드와 성능 2 :: Java File Copy Code & Perfomance Issue. part 2 (7)
  • NetBeans IDE 6.0 Milestone 9 배포
  • Sun Tech Days 2008 개발자 컨퍼런스 무료 등록자에 선정되다. (4)
  • BigDecimal의 필요성
  • Yahoo Buzz Game 에서 자바 IDE 부문에서 넷빈즈가 1위네요.. (2)
  • JavaMail :: 인증을 요하는 메일 SMTP에 접속하는 방법
  • 자바 API 항해지도
  • WebRowSet 을 이용한 JDBC 활용하기 2부
  • 2010/07/30 00:53 2010/07/30 00:53
    Trackback Address:http://www.yunsobi.com/blog/trackback/546
    [로그인][오픈아이디란?]

    InputStream.read()

    제가 만든 서버에서 보낸 데이터가 xml 형식으로 바이트 스트림으로 해서 받는데 in.read로 받았더니 byte 버퍼에 태그단위로 하나씩 들어가는데다가 디버그해봤더니 in.read라는 문장은 받은 xml 태그 수만큼 반복해서 실행되고 전체 xml을 받아서 파싱하려고 Stringbuffer를 이용해서 append 하려고 했더니 이것도 안되네요..

    안녕하세요 질문자님.
    질문 내용을 제가 정확히 이해한 건진 모르겠습니다만 제가 이해한 내용은
    보내는 서버 측에서는 예를 들어, "<tag>내용</tag>" 스타일의 문자열을  byte[]로 변환하여
    outputStream.write( byte[] );
    하고 있고 클라이언트 측에서는


    while ((readLength = inputStream.read(input, 0, input.length)) != -1) {
    stringBuffer.append( new String( input ) );
    }

    과 같은 동작을 하고 있다고 생각이 됩니다.

    질문 내용 중 ' in.read라는 문장은 받은 xml 태그 수만큼 반복해서 실행되고' 라고 하신 걸로 미루어보아 데이터는 정상적으로 들어오고 있다고 판단됩니다. 받은 데이터를 가공하는데 어려움을 느끼고 계신 건 아닌가 하는 생각이 드네요.

    우선 작성하신 클라이언트 쪽이 서버에서 보내주는 xml을 다 받으면 while 문을 빠져 나오는지 확인해 보시고요. 정상적으로 while문을 빠져 나온다면 유입된 Data를 가공하는 문제가 될 거고 그렇지 않다면 서버 측의 outputStream 에 write() 하는 부분을 확인하셔서 stream을 확실히 끝내고 있는지 확인하셔야 할 것 같습니다.

    참고로 제가 작성한 소스를 첨부합니다.
    첨부한 소스는 xml 형식의 문서를 읽어들여 byte 형식으로 전송하여 수신부에서 file과 문자열로 복원하는 코드가 작성되어 있습니다. Server.java 와 Client.java 는 일반적인 자바 bolocked Socket 프로그래밍 방식을 취하고 있습니다. 실제로 확인해야 하는 부분은 ByteArrayTransporter 클래스에서 클라이언트에 Data를 전송하는 부분과 Client 클래스에서 java.nio.ByteBuffer 를 이용하여 입력 데이터를 처리하는 부분 정도가 될 거 같습니다.


    ByteArrayTransporter.java

    byte[] byteArray = new byte[1024];
    int readLength = 0 ;
    while ( (readLength = fileInStream.read(byteArray, 0, byteArray.length) ) != -1 ){
    out.write(byteArray, 0, readLength);
    }
    out.flush();
    out.close(); //<-- 스트림 끝내기


    Client.java

    ByteBuffer bBuffer = ByteBuffer.allocate(102400);

    while ((readLength = bin.read(input, 0, input.length)) != -1) {
    //byteBuffer에 byte[] 쓰기
    bBuffer.put(input, 0 ,readLength );
    }

    //ByteBuffer 에 담긴 문자열 확인
    System.out.println( new String(bBuffer.array() , "UTF-8" ) );

    이 글의 관련글
  • Java 6u21 과 이클립스
  • finalize 메소드의 오버라이딩을 자제해야 하는 이유.
  • HTTPURLCONNECTION를 사용하여 웹 페이지 액세스하기 (1)
  • 넷빈즈( NetBeans ) 6.0 자바 소스 인코딩 설정은 어디서?
  • Redirection When Session Times Out :: 서블릿 필터를 이용한 리다이렉션 코드
  • WebRowSet 을 이용한 JDBC 활용하기 4부
  • Yahoo Buzz Game 에서 자바 IDE 부문에서 넷빈즈가 1위네요.. (2)
  • ANT 를 이용한 RMI 컴파일 ( rmic 로 stub 생성하기 )
  • java.beans.XMLDecoder와 java.beans.XMLEncoder를 이용한 Java객체의 xml 변환
  • Developing a Blog in < 10 Minutes with NetBeans
  • Sun Tech Days 2008 개발자 컨퍼런스 무료 등록자에 선정되다. (4)
  • 제 10회 자바 개발자 컨퍼런스 (2)
  • 2010/07/20 19:54 2010/07/20 19:54
    Trackback Address:http://www.yunsobi.com/blog/trackback/543
    [로그인][오픈아이디란?]

    소수 자리 숫자들의 사칙연산

    커뮤니티에 올라온 질문 중에 소수자리 숫자에 대한 덧셈 계산의 결과가 이상하다는 내용이 있어 정리해 봅니다.
    질문에 올라온 코드는 아래와 같습니다.


    double a = 35147.464;
    double b = 73823.828;
    double c= a+b;
    System.out.println("a+b=" + (a+b));
    System.out.println("c=" + c);

    double d = 587350.504;
    double e = 63354.488;
    double f= d+e;
    System.out.println("d+e=" + (d+e));
    System.out.println("f=" + f );


    실행한 결과는 아래와 같습니다.

    a+b=108971.29199999999
    c=108971.29199999999
    d+e=650704.992
    f=650704.992


    왜 똑같이 소수점 세 자리 숫자를 더했는데 어떤 때는 소수점 아래 자릿수가 늘고 어떤 때는 세 자리로
    출력되었을까요?

    소수자리 숫자는 인간이 생각하는 10진수의 개념으로 접근 하면 안되기 때문인데요..
    알고있듯이 컴퓨터는 0,1 로 모든 연산을 처리하는데 int, long 같은 정수라면 0,1로 표현할 수 있지만
    float, double 같은 소수자리 수는 IEEE 754 표준에 의한 binary의 일부(fractions)로  표현하게 됩니다.
    ( http://www.math.byu.edu/~schow/work/IEEEFloatingPoint.htm 참조하시면 됩니다만 제게는 참.. 어렵네요.)
    어쨌거나 저쨌거나 결과만 놓고 보면 '소수자리 숫자는 컴퓨터는 근사값 밖에 알 수 없다.' 인데요.

    그럼, 저렇게 계산되도록 놔둬야 하느냐? 그렇지는 않습니다.
    위 같은 경우는 DecimalFormat.parse() 메소드를 이용하면 됩니다.
    맨 처음 코드를 아래와 같이 다시 작성해 볼 수 있겠지요.

    java.text.DecimalFormat format = new java.text.DecimalFormat(".###");

    double a = 35147.464d;
    double b = 73823.828d;
    double c= a+b;
    System.out.println("a+b=" + format.parse( format.format(a+b) ) );
    System.out.println("c=" + format.parse( format.format(c) ) );

    double d = 587350.505d;
    double e = 63354.491d;
    double f= d+e;
    System.out.println("d+e=" + format.parse( format.format(d+e) ) );
    System.out.println("f=" + format.parse( format.format(f) ) );




    그럼 결과는 아래와 같이 원하는 대로 출력이 될 겁니다.

    a+b=108971.292
    c=108971.292
    d+e=650704.996
    f=650704.996



    한가지 유의해야 할 점은 저런 방식의 처리를 정확성을 요구하는 금융이나, 계측 분야에 적용 할 때는
    계산결과의 정밀도가 충분히 받아들여질 만한 것인지를 다시 한 번 고민해야 한다는 겁니다.

    금융과 같이 double이 허용하는 것보다 큰 숫자가 필요로 할 때는 BigDecimal을 이용해야 합니다.
    ( http://www.yunsobi.com/blog/227 BigDecimal의 필요성 참조 )

    이 글의 관련글
  • 넷빈즈(NetBeans) 실행하기 - 모듈 업데이트 v1.0
  • java.beans.XMLDecoder와 java.beans.XMLEncoder를 이용한 Java객체의 xml 변환
  • InputStream.read()
  • BigDecimal의 필요성
  • 객체 지향론자를 위한 함수 프로그래밍(Functional programming)
  • WebRowSet 을 이용한 JDBC 활용하기 3부
  • 자바 파일복사 코드와 성능 2 :: Java File Copy Code & Perfomance Issue. part 2 (7)
  • 자바 파일복사 코드와 성능 1. :: Java File Copy Code & Perfomance Issue. part 1 (4)
  • 스트럿츠 2.1 릴리즈!! Committer 인터뷰
  • 어드민 콘솔 <-> Edge Server RMI통신을 위한 참고 URL
  • QUEUE와 DELAYED 프로세싱
  • 자바 날짜/시간 계산 예제 코드 :: Java Date Code Snippet (3)
  • 2010/05/14 19:54 2010/05/14 19:54
    Trackback Address:http://www.yunsobi.com/blog/trackback/540
    [로그인][오픈아이디란?]

    Java 6 update 18 출시 : 성능 향상과 windows 7 지원

    2010/02/04 14:56

    서비 JAVA , , ,

    새로운 hotspot, UI 어플리케이션의 시작과 구동 성능 향상, 우분투 8.04와 레드햇 엔터프라이즈 리눅스 5.3 및
    윈도우즈7 지원, 357개의 버그 픽스가 이루어진 sun java 6 update 18 가 출시되었습니다.
    JavaSE 6 Update Release Note

    엔터프라이즈 개발자가 특히 흥미를 가질만한것은 가비지 컬렉션의 성능 향상일듯합니다.
    Garbage First(G1) 가비지 컬렉터( 드디어 experimental 딱지를 뗐습니다.)가 신뢰성과 성능에서 괄목할 만한
    향상을 이루어 냈다는겁니다. 가비지 대상 수집 처리를 병렬화(Parallel Scavenger)하고 향상된 NUMA
    ( Non Uniform Memory Access ) 지원이 포함됩니다.
    NUMA 아키텍처는 메모리에 액세스하는 방식 중 하나로 프로세스들은 서로 다른 메모리 영역에 엑세스하는데
    동일하지 않은 시간을 소비하는 특징이 있습니다.

    NUMA 아키텍처..


    대부분의 현대적인 컴퓨터는 이 NUMA 아키텍처에 기반하고 있습니다. Java HotSpot VM에서는 NUMA 를 이용
    할 수 있는 시스템이라면  -XX:+UseNUMA 플래그를 통하여 병렬로 가비지 대상을 수집할 수 있습니다.
    이 옵션의 효과는 꽤나 훌륭해서 8코어 옵테론 시스템에서 측정한 SPEC JBB 2005  ( http://www.spec.org/jbb2005/index.html )
    벤치마킹에서 32비트에서 30%, 64비트에서 40%성능 향상이 있었습니다.

    데스크탑 어플리케이션과 Web Start의 업데이트 주요 항목을 보고있자면 썬은 데스크탑과 RIA 마켓도
    무시하지 않고 있음을 엿볼 수 있습니다.
    ( 개인적으로 java가 이 두 영역에서의 그다지 큰 영향력을 행사하지 못할것 같다는 생각을 하지만요..)
     - 클라이언트 서버 양쪽 VM에 새로운 java heap configuration을 적용하여 가비지 컬렉션 성능 향상.
     - 빠른 시작을 위한 클래스로딩 최적화.
     - Direct 3D를 사용할 경우 시스템에 따라 100-200ms가량 어플리케이션 시작 시간 단축.
     - JavaFX 어플리케이션의 warm start 시 15%가량 빠른 구동.
     - Web Start와 애플릿의 jar파일의 동시 다운로드
     - Java Web Start 스펙 JSR-056 을 6.0.18로 버전업하고 다수의 버그 픽스.

    이 외에도 다음과 같은 변화를 포함
     - jar 파일 생성시간 20% 단축
     - JavaDB 버전 10.5.3으로 업데이트
     - VisualVM 버전 1.2.1로 업데이트
     - StaX(Streaming API for XML) 마이너 업데이트

    이번 버전에 보안관련 버그 픽스 사항은 포함되지 않았습니만 이번 분기에 발표 할 다음번 업데이트에
    포함될것으로 예상하고있습니다.

    http://blog.sdnkorea.com/blog/504(새 창으로 열기)

    이 글의 관련글
  • 자바는 call by value? call by reference? (1)
  • JavaMail :: 인증을 요하는 메일 SMTP에 접속하는 방법
  • 넷빈즈(NetBeans)강좌 시작에 즈음하여.. v1.0
  • Developing a Blog in < 10 Minutes with NetBeans
  • 어드민 콘솔 <-> Edge Server RMI통신을 위한 참고 URL
  • 썬은 G1(Garbage First) Garbage Collector를 상용화할 것인가?
  • JDK 7 에서 기본 제공했으면하는 메소드는?
  • Sun Tech Days 2008 개발자 컨퍼런스 무료 등록자에 선정되다. (4)
  • Ajax와 Java EE의 통합
  • Struts File Upload
  • JAVA 5 한글 api
  • Java 6의 새로운 기능, 향상된 부분.
  • 2010/02/04 14:56 2010/02/04 14:56
    Trackback Address:http://www.yunsobi.com/blog/trackback/518
    [로그인][오픈아이디란?]

    뜻밖에도 JDK7에 Closure가 도입됩니다.

    이전 Java 7 로드맵 업데이트와 커뮤니티의 반응. 포스팅을 통해 JDK7에서의 클로저 누락에 대한 언급을
    한 적이 있는데요. 뜻밖에도 JDK7에 클로저를 포함하기로 했다는 뉴스를 접했습니다.

    Java SE의 수석 엔지니어 Mark Reinhold는 지난 자신의 의견에 반하여 JDK7에 클로저를 도입하기로
    했다는군요. JDK 출시 일정은 조금 지연되어 2010년 9월께가 될 듯합니다.

    Coin 프로젝트의 수석 엔지니어인 Joseph D. Darcy는 다음 버전의 JDK7에는 BGGA의 제안과 유사한
    방식의 "경량의" 클로저가 포함되며 Java 7에서 약간의 언어상 변화가 있을 것이라고 말했습니다.

    썬은 java 클로저에 회의적이었지만 자바 커뮤니티는 이미 3가지의 클로저 구현 방법을 제안했었습니다.
    이 글의 관련글
  • Java VisualVM
  • JavaTM Cryptography Extension (JCE) Reference Guide
  • KEYPAIRGENERATOR를 이용해서 비대칭 암호 키 구하기
  • Developing a Blog in < 10 Minutes with NetBeans
  • CookieHandler를 이용한 쿠키 관리
  • ZIP/JAR 엔트리의 생성 제어하기
  • Java 7 로드맵 업데이트와 커뮤니티의 반응. (2)
  • JAVA.UTIL.SCANNER로 텍스트 스캔하기
  • 아파치 재단에 제로니모가 있다면.. 썬사에는 글래스피쉬가 있습니다.
  • Java SE 6.0 Performance White Paper
  • 자바 제한자 정리 : Modifires Matrix in Java
  • Servlet 3.0 스펙에 기인한 보안 논쟁 (1)
  • 2009/12/04 15:46 2009/12/04 15:46
    Trackback Address:http://www.yunsobi.com/blog/trackback/513
    [로그인][오픈아이디란?]

    JAVA Hot Deploy 도구 Jrebel ( 舊 JavaRebel )

    왜 Java Enterprise Web Application에서 hot deploy가 어려우며 문제가 되는지는 아래 아티클 참조.

    Tomcat , Weblogic Application Server, WebSphere, JBoss 같은 서블릿컨테이너나 J2EE컨테이너도
    옵션을 통해 Hot Deploy를 지원하긴 하지만 어디까지나 Context 전체를 리로딩하는 수준이다.

    그런 식으로나마 서버 Shutdown , Startup 조작을 줄여주는 게 고맙기는 하지만 클래스 Hot Deploy는 자바
    웹어플리케이션 개발자에게는 성가신 문제일  수밖에 없다.

    이런 문제를 풀기 위해 몇몇 솔루션이 있는데 최근에 사용해본 게 아래의 솔루션이다.
    JRebel (舊 JavaRebel)

    Jrebel

    JRebel의 리디플로이 가능 범위


    JRebel는 훌륭한 도구이긴 하지만, 위 링크에 설명된 몇 가지 이유로 완전한 Hot Deploy를 제공하는 것은 아니다.
    다만, 분명한 것은 개발 시 로컬 서버나, 테스트 서버의 shutdown 횟수를 줄여줄 뿐만 아니라 클래스 리로딩
    시간을 현격히 줄여주는 것으로도 JRebel을 사용할 충분한 가치가 있다고 생각한다.
     
    덧. 위에 소개한 JRebel은 Open Source나 Freeware가 아님.
         단, Open Source Software개발자와 Scala 개발자에 한해 무료로 제공하고 있음.
    이 글의 관련글
  • Java 6의 새로운 기능, 향상된 부분.
  • NetBeans IDE 6.0 Milestone 9 배포
  • Servlet 3.0 스펙에 기인한 보안 논쟁 (1)
  • 자바 제한자 정리 : Modifires Matrix in Java
  • 넷빈즈(NetBeans) 실행하기 - Option 둘러보기 v1.0
  • JAVA Base64 Encoding / Decoding
  • InputStream.read()
  • 자바 어플리케이션(jar)을 실행파일(exe)로 만들기 :: launch4j (2)
  • 자바 API 항해지도
  • 넷빈즈( NetBeans ) 6.0 자바 소스 인코딩 설정은 어디서?
  • Java 개발자 입장에서 바라본 .Net의 Delegate (2)
  • 넷빈즈(Netbeans) 실행하기 - JDK 설정 v1.0
  • 2009/10/12 13:15 2009/10/12 13:15
    Trackback Address:http://www.yunsobi.com/blog/trackback/508
    [로그인][오픈아이디란?]

    JDK 7 에서 기본 제공했으면하는 메소드는?

    OpenJDK core-libs-dev 메일링 리스트에 재미있는 쓰레드가 진행되고 있습니다. ( 재미있다고 적긴 했지만 재미있기만 한 것은 아니지만요..)  What methods should go into a java.util.Objects class in JDK 7? 이란 타이틀로 진행 중인 이 쓰레드의 내용인즉, '자바 개발자가 흔히 사용하는 유틸리티 성 메소드를 구현하는 java.util.Objects 같은 클래스를 만든다면 이 Objects 클래스에서 꼭 포함 했으면 하는 메소드는 무엇인가?' 하는 내용입니다.  썬社의 Joe Darcy로부터 시작된 이 쓰레드에는 많은 회신 메일로 해당 이슈에 대한 자바 개발자의 높은 관심도를 엿볼 수 있습니다.

    Darcy는 그의 첫 번째 포스트에서 Null-safe 한 equals(arg1,arg2) 와 모든 primitive type에 대응하는 compareTo(arg1, arg2) 를 제안하고 있네요.

    Andrew John Hughes 같은 경우엔 toString(arg) 메소드에 대해 자바 리플랙션을 통하여 해당 객체의 상세를 보여주면 어떻겠냐는 것과 비슷한 방법으로 clone() 메소드도 구현해 버리자는 내용을 제안했습니다.

    이 쓰레드가 커뮤니티의 긍정적인 회신을 받고 있기만 한 것은 아닙니다. 이런 내용의 글을 접한 Stephan Oudmaijer 같은 사람은 infoQ의 해당 내용에 대한 기사에 댓글을 통해 stupid idea란 표현과 함께 그런 유틸성 메소드는 jakarta-commons에서 구현하도록 하고 제발 JDK는 그냥 내버려 뒀으면 좋겠다고 표현하고 있네요. ^^;

    여러분도 평소에 '아.. 이런 메쏘드는 기본적으로 JDK에 있었으면 좋겠는데...' 하고 생각한게 하나 둘쯤은 있을 거라 생각되는데요.. 해당 메일링 리스트에 가입하셔서 의견을 피력해 보시는것도 재미있을것 같습니다.

    이 글의 관련글
  • Web Services (JAX-WS) in Java EE 5
  • 자바 애플리케이션에서 동적으로 PDF 파일 생성하기
  • 넷빈즈를 이용한 Open Office 플러그인 개발
  • 자바 파일복사 코드와 성능 1. :: Java File Copy Code & Perfomance Issue. part 1 (4)
  • WebRowSet 을 이용한 JDBC 활용하기 2부
  • 문자열 오브젝트의 길이는?
  • JAVA.UTIL.SCANNER로 텍스트 스캔하기
  • CookieHandler를 이용한 쿠키 관리
  • Redirection When Session Times Out :: 서블릿 필터를 이용한 리다이렉션 코드
  • Java VisualVM
  • 윈도우 서비스모드로 설치한 톰캣 4의 설정 변경하기
  • JDOM과 XML 파싱
  • 2009/09/14 16:26 2009/09/14 16:26
    Trackback Address:http://www.yunsobi.com/blog/trackback/507
    [로그인][오픈아이디란?]

    Struts 2.1 + ajax 플러그인 : dojo툴킷 이용 방법 변경

    실로 오랜만에 struts 2 (정확히는 2.1.6 )를 잡았습니다.
    개발팀원이 참조 할 몇몇 코드조각들을 작성하고 있는데 어제는 ajax tag 쪽 코드를 작성했습니다.
    코드를 작성해 실행을 시켰는데 아래와 같은 몇몇 오류와 맞닥뜨립니다.


    Template /template/ajax/head.ftl not found. - Class: freemarker.template.Configuration
    File: Configuration.java
    Method: getTemplate
    Line: 489 - freemarker/template/Configuration.java:489:-1



    org.apache.jasper.JasperException: Expression parameters.parseContent is undefined on line 45, column 28 in template/ajax/head.ftl. - Class: freemarker.core.TemplateObject
    File: TemplateObject.java
    Method: assertNonNull



    Expression parameters.pushId is undefined on line 24, column 6 in template/ajax/a-close.ftl.
    The problematic instruction:
    ----------
    ==> if parameters.pushId [on line 24, column 1 in template/ajax/a-close.ftl]


    원인은 스트럿츠 2.1 릴리즈!! Committer 인터뷰에서도 언급되었던 내용에서 기인합니다.
    기존 strtus2 에서 Dojo 툴킷을 이용한 ajax를 이용하기 위해서 <s:head theme="ajax" /> 같이
    기술하던 부분이 deprecated 되었습니다. strtus2.1에서 ajax 태그를 이용하기 위해서는
    문서 상단에 <%@ taglib prefix="sx" uri="/struts-dojo-tags" %> 와 같이 새로운 태그 라이브러리를
    지정하고 <s:head theme="ajax" /> 를 <sx:head parseContent="true"/> 로 수정,
    <s:div ... /> 부분도 <sx:div ... /> 로 바뀔 뿐만 아니라 각 태그의 속성들도 변화가 있습니다.

    스트럿츠 2.0 과 2.1의 차이점을 확인하고 싶으시거나 2.0을 2.1로 마이그레이션을
    고려하고 계신다면 Apache Strtuts 2 Wiki 의
    Troubleshooting guide migrating from Struts 2.0.x to 2.1.x
    를 참고하시면 좋을 듯합니다.
    이 글의 관련글
  • String 타입의 날짜를 Date 타입으로 변환하기
  • Creating a Simple SOA Project with NetBeans Enterprise Pack
  • 넷빈즈(NetBeans)강좌 시작에 즈음하여.. v1.0
  • 넷빈즈 6.5 출시 (NetBeans 6.5 released)
  • Developing a Blog in < 10 Minutes with NetBeans
  • 자바 어플리케이션(jar)을 실행파일(exe)로 만들기 :: launch4j (2)
  • Vector에 대한 소고
  • Redirection When Session Times Out :: 서블릿 필터를 이용한 리다이렉션 코드
  • JAVA Base64 Encoding / Decoding
  • 뜻밖에도 JDK7에 Closure가 도입됩니다.
  • InputStream.read()
  • 어드민 콘솔 <-> Edge Server RMI통신을 위한 참고 URL
  • 2009/08/26 10:57 2009/08/26 10:57
    Trackback Address:http://www.yunsobi.com/blog/trackback/505
    [로그인][오픈아이디란?]

    썬은 G1(Garbage First) Garbage Collector를 상용화할 것인가?

    Sun은 G1이라는 애칭으로 불리는 Garbage First 가비지 컬렉터를 Java Update 1.6.0.14와 함께 릴리즈
    하였습니다. 하지만, 많은 개발자 커뮤니티에서 기다려온, 서버에 적합한 이 가비지 컬렉터를 현 시점에서는
    비용을 지불하는 고객에 한해서만 사용할 수 있도록 하고 있습니다.

    이 Garbage First(이하 G1) 가비지 컬렉터는 update 6u14 이상에서 작동합니다.

    G1은 가비지 콜렉팅 시 시스템 pause를 줄여, 서버 측에 적합합니다. G1의 가장 큰 장점은
    compaction 성능과 예측성이 향상된 Concurrent Mark-Sweep(CMS)과 사용의 간편함입니다.

    하지만, 썬의 릴리즈노트에 의하면 이 가비지 컬렉터는 Java Platform Standard Edition for Business Program
    통하여 제공되며 이용을 위해서는 썬에 Support Contact의 허락이 필요하다고 합니다.

    많은 사람이 이는 썬의 정책 변경의 징조이며 오라클과의 합병과 무관치 않다고 생각하고 있습니다.

    Java의 제약이 시작되었다. 썬은 새로운 G1 가비지 컬렉터를 포함한 Java 1.6.0.14 JDK와 JRE를
    출시하며 릴리즈 노트에 'Although G1 is available for use in this release, note that
    production use of G1 is only permitted where a Java support contract has been
    purchased.'와 같이 명시했다.  이는 이미 오라클의 입김이 작용하기 시작한 것은 아닌가.
    새롭고 멋진 기능들을 Business commercial version의 Java SE에 넣는 동안 OpenJDK는 침체
    한 길을 걷게 될 것이다.  


    반면, G1이 아직은 다양한 검증을 필요로 하기 때문에 위와 같은 결정을 내렸을 거란 의견도 있습니다.

    릴리즈 노트를 읽고 받은 첫 느낌은
    '현재의 코드는 제품으로써 미숙하지만, 출시를 진행합니다. G1은 기본적으로 비활성화되어
    있지만, 여러분의 어플리케이션에 G1을 적용하여 테스트하고 싶을지도 모릅니다. G1을 활성화
    하여 생기는 문제에 대해서는 Sun Support contact를 이용하지 않는다면 어떤 공식적인 도움을
    기대할 수 없습니다.'
    정도 였습니다.


    G1이 JDK/OpenJDK7 의 중요한 기능으로 선정되면서, 현재의 상용화 결정이 이후에도 계속되지는 않을까
    심히 걱정이 됩니다. 오라클에 특별히 반감을 품고 있거나 하진 않지만, 썬 보다 사업 수완 좋은 오라클이라는
    게 마음에 계속 걸리는군요..

    이 글의 관련글
  • JavaMail :: 인증을 요하는 메일 SMTP에 접속하는 방법
  • CLASSPATH에 없는 클래스 로딩
  • Java 6 update 18 출시 : 성능 향상과 windows 7 지원
  • 윈도우 서비스모드로 설치한 톰캣 4의 설정 변경하기
  • Java 6의 새로운 기능, 향상된 부분.
  • JAVA 5 한글 api
  • 뜻밖에도 JDK7에 Closure가 도입됩니다.
  • Java Profiler JProbe 8.0 출시!! :: 자바 프로파일러
  • 넷빈즈(NetBeans)강좌 시작에 즈음하여.. v1.0
  • Web Services (JAX-WS) in Java EE 5
  • 넷빈즈를 이용한 Open Office 플러그인 개발
  • JAVA Hot Deploy 도구 Jrebel ( 舊 JavaRebel )
  • 2009/06/02 16:52 2009/06/02 16:52
    Trackback Address:http://www.yunsobi.com/blog/trackback/492
    [로그인][오픈아이디란?]

    자바는 call by value? call by reference?

    자바에서 메소드 인자의 전달이 call by value냐 call by reference냐 하는 이야기는 꽤
    해묵은 논쟁 중 하나입니다.

    java에서 object형을 전달할 때 일견 call by reference 인 것같아 보일 수 있습니다만,
    실제로 자바는 primitive, reference 타입 모두 call by value입니다.

    아래의 코드가 reference 타입도 call by value라는 사실을 극명하게 보여줄 수 있겠네요.


    ////// 테스트용 클래스///////
    public class TargetClass {
    private String param;

    public String getText() {
    return param;
    }

    public void setText(String param) {
    this.param = param;
    }
    }




    ///// 테스트 시도할 main 클래스/////////////
    public class CallByValue {

    public static void main(String[] args){

    CallByValue cbv = new CallByValue();
    TargetClass tc = new TargetClass();

    tc.setText("처음 입력 값입니다.");

    System.out.println( " 변경 전 : "+ tc.getText()+" "+ tc.hashCode() );

    //아래 코드에서 tc변경을 시도합니다.
    cbv.changeObject(tc);

    //이후 내용을 찍어볼까요? tc에 변화가 없다면 call by value일테고
    //변화가 있다면 call by reference이겠죠.
    System.out.println( " 변경 후 : "+ tc.getText()+" "+ tc.hashCode() );
    }

    public void changeObject( TargetClass obj){
    //넘어온 인자를 null 처리합니다.
    obj = null;
    }

    }


    자바 레퍼런스타입이 정말 call by reference에 의한 전달이라면 changeObject( TargetClass obj)이
    수행되고 나면 tc는 null 이어야 하지만 그렇지 않죠. 실제로 자바도 reference type을 인자로 전달할
    때에 reference를 넘기지만 바로 그 reference가 아니라 reference의 사본의 값을 넘기므로 진정한
    의미에서 call by reference로 볼 수 없으며, 이는 위 코드로도 충분히 증명이 되고 있습니다.

    사실, 자바에서 인자 전달이 call by value냐 call by reference냐 하는 해묵은 논쟁보다는 실제로 어떻게
    인자가 전달되는지 이해하고 코드를 작성하는 게 더 중요하겠지요.

    추가 : http://pungjoo.tistory.com/8(새 창으로 열기) 아티클에는 finalize()메소드를 이용하여 call by value임을 증명하고있네요.

    이 글의 관련글
  • InputStream.read()
  • 뜻밖에도 JDK7에 Closure가 도입됩니다.
  • BigDecimal의 필요성
  • 넷빈즈(NetBeans)강좌 시작에 즈음하여.. v1.0
  • JAVA 5 한글 api
  • finalize 메소드의 오버라이딩을 자제해야 하는 이유.
  • 넷빈즈(NetBeans) 실행하기 - Option 둘러보기 v1.0
  • WebRowSet 을 이용한 JDBC 활용하기 2부
  • 컴포넌트 시스템과 클래스 로더 경계 :: Java Class Loader
  • 자바 애플리케이션에서 동적으로 PDF 파일 생성하기
  • String 타입의 날짜를 Date 타입으로 변환하기
  • Redirection When Session Times Out :: 서블릿 필터를 이용한 리다이렉션 코드
  • 2009/03/27 21:11 2009/03/27 21:11
    Trackback Address:http://www.yunsobi.com/blog/trackback/480
    1. Blog Icon
      비밀방문자

      관리자만 볼 수 있는 댓글입니다.

    [로그인][오픈아이디란?]

    제 10회 자바 개발자 컨퍼런스

    올해로 10번째를 맞이하는 한국 자바 개발자 컨퍼런스.
    해를 맞이할수록 강의 내용도 알차지고, 진행도 매끄러워지는걸 느낀다.
    그에 반해 올해는 어쩐 일인지 참관자 수가 그 어느 해보다 적은 것 같다. 재작년의 절반정도일까..?
    불과 이삼 년 전만 해도 북적거렸는데.. 올 핸 조용하고 차분한 느낌.
    뭐, 북적대는 것보단 이편이 훨씬 좋긴 하지만 주최 측인 JCO나 협찬 기업의 느낌은 좀 다르겠지?
    이것도 다 어수선한 시국탓인가....?

    이 글의 관련글
  • JDOM과 XML 파싱
  • HTTPURLCONNECTION를 사용하여 웹 페이지 액세스하기 (1)
  • Ajax와 Java EE의 통합
  • Java에 OpenID 적용 관련 아티클
  • Java Blueprints web application layout 과 Jakarta web application layout의 차이
  • WebRowSet 을 이용한 JDBC 활용하기 4부
  • 문자열 오브젝트의 길이는?
  • Web Services (JAX-WS) in Java EE 5
  • JavaMail :: 인증을 요하는 메일 SMTP에 접속하는 방법
  • Version 0.2 xcEPC Network Core for Java - epcnetwork java api
  • 소켓통신 서버/클라이언트 통신시 IO Blocking 상태에 빠지는 코드와 해결 방안
  • 넷빈즈(NetBeans)를 구하고 설치 해 보자. v1.0
  • 2009/02/28 19:35 2009/02/28 19:35
    Trackback Address:http://www.yunsobi.com/blog/trackback/469
    1. 2009/03/01 01:15
      2009 자바 개발자 컨퍼런스 후기 Tracked from cutewebi 희정냥★
    2. 2009/03/03 01:41
    1. 다녀오셨군요. 전 업무 문제도 있고, 이번 컨퍼런스 운영이 영 맘에 안들어서 포기.

      아마도 올해 한산할 정도로 사람이 없다고 느끼셨으면 저같은 생각을 한 사람이 많아서 일거예요.
      선착순 세션 예약제라는게 예약에 성공한 사람은 좋지만 그렇지 못한 사람은 사전 등록을 하던 말던 결국 현장에서 전쟁을 치러야 하니까 아예 포기하게 되는거죠.쩝.

      올해 듣고 싶은 세션이 몇 개 있었는데 사전 등록하러 가보니 이미 예약은 다 차고, 그렇다고 사전등록했다고 해서 이점이 있는것도 아니고... 작년처럼 전쟁통에 끼어들기 싫어 깔끔히 포기했습니다.
      내년에는 얼마나 바뀔지 두고봐야죠.

    2. Blog Icon
      서비

      그런일이 있었던겨?
      나도 사전 예약 소식을 늦게들어서 신청할땐 듣고싶었던게 하나도 남지 않았었거든..
      이희승씨의 네트워크랑 최철우씨의 Hudson 강의를 듣고 싶었는데..
      우습게도 현장에서는 참관자가 적어서 사전 예약이랑 상관없이 듣고 싶은강의 다 볼 수 있었다는...

    [로그인][오픈아이디란?]

    스트럿츠 2.1 릴리즈!! Committer 인터뷰

    스트럿츠 2.1.이 릴리즈 되었습니다. 요즘 MS쪽 어플리케이션 개발 프로젝트를 하고있지만 여전히 자바쪽
    흐름을 읽는것도 게을리 하고 있지 않습니다만, 쉽지 않네요.

    스트럿츠 2.1은 많은 양의 코드를 Plug-In Framework로 옮기는 리펙토링, Convention plug-in에 의한 XML
    설정 감소, 향상된 REST 지원에 초첨을 두고 진행되었습니다.

    InfoQ에서 스트럿츠2 커미터인 Musachy Barroso씨와 인터뷰한 기사가 올라와서 포스팅 합니다.

    2.0과 2.1의 차이점은 무엇인가요?
    많은 수의 버그픽스가 있었습니다. 그리고 REST, Convention, Java Template과 같은 플러그인이 추가되었습니다.

    많은 기능이 플러그-인 형태로 변경되었습니다. 이렇게 한 이유는 무엇인가요?
    스트럿츠 코어에는 진정한 core만을 남기자는 아이디어에서 출발했습니다. 그리고 나머지는 플러그인에
    집어 넣는거죠. 이렇게 하면서 코드의 유지보수가 쉬워 졌습니다. 그러면서 Dojo 플러그인 같은 것들은 더 이상
    스트럿츠에서 지원하지 않습니다. 이런 변화는 제거된 플러그인을 사용하지 않는 개발자와 작은 footprint를 원하는
    개발자 이외의 사람에게 직접적인 장점은 없습니다.
     
    Ajax 태그를 depreciate 한 이유는 무엇인가요?
    Struts2의 ajax 태그는 Dojo 0.4.x에 기반하고 있습니다. 그것을 Dojo의 최신버전에 맞춰 포팅하는것은 모든
    ajax 태그의 코드를 다시 작성해야한 다는것과도 같은 이야기입니다. Dojo의 새로운 버전은 너무 빨리 출시되고
    마이너 버전에서도 변경되는 코드의 양이 너무 많습니다. 태그가 Dojo의 모든 기능을 다 포함하고 있지 않기
    때문에 개발자는 주로 Dojo 라이브러리를 직접 사용하는 경향이 있습니다. 이런 이유들과 ajax 태그 개발
    지원자의 부족으로 ajax 태그를 depreciate 했습니다.

    어떤 이유로 CodeBehind 플러그인들을 Convention 플러그인으로 바꾸게 되었나요?
    Convention은 외부 프로젝트였고 늦게 Struts에 추가되었습니다. Convention은 좀 더 빠른 ClassPath Scanner,
    더 나은 Configuration elements, 로깅, 다양한 configuration 옵션, configuation reloading, 더 나은 문서화 등을
    지원합니다.

    Java Template 플러그인은 무엇인가요?
    Java Template은 FreeMarker를 이용하여 java만으로 구현한 'simple theme' 구현체입니다. 이 플러그인의 태그는
    재작성이 불가능한 약점이 있는 원래의 그것보다 4~5배 가량 빠르게 동작합니다.


    다른 많은 Web Framework가 있는데 우리는 왜 Strtus2를 선택해야 하나요?
    스트럿츠2는 아마도 가장 약한 커플링(loosely-coupled)으로 구현된 프레임워크일 겁니다. 많은 기능이
    커스터마이징 없이, 혹은 약간의 커스터마이징만으로 사용할 수 있으며, 프레임워크를 익히기가 쉽습니다.
    약한 커플링은 스트럿츠의 실체에 대한 지식 없이도 비지니스 로직을 작성 할 수 있도록 해 줍니다.
    그러면서도 스트럿츠는 대용량 트래픽을 발생하는 사이트에서 유연한 확장성을 담보하고 있다는 점입니다.


    마지막으로 한마디.
    스트럿츠 2.1 출시까지 오랜 기간 공을들였습니다. 우리는 스트럿츠 프레임워크의 빌드와 릴리즈 프로세스 개선을
    위해 정말 열심히 일하고 있습니다. 앞으로는 좀 더 짧은 주기로 새로운 버전이 릴리즈 되는것을 기대하셔도
    좋습니다.

    이 글의 관련글
  • 넷빈즈(NetBeans)를 구하고 설치 해 보자. v1.0
  • WebRowSet 을 이용한 JDBC 활용하기 3부
  • Java VisualVM
  • 소수 자리 숫자들의 사칙연산
  • 객체 지향론자를 위한 함수 프로그래밍(Functional programming)
  • InputStream.read()
  • JavaTM Cryptography Extension (JCE) Reference Guide
  • 넷빈즈(NetBeans)강좌 시작에 즈음하여.. v1.0
  • ZIP/JAR 엔트리의 생성 제어하기
  • jar 파일 포맷의 힘
  • Java 6의 새로운 기능, 향상된 부분.
  • JavaMail :: 인증을 요하는 메일 SMTP에 접속하는 방법
  • 2009/02/03 16:37 2009/02/03 16:37
    Trackback Address:http://www.yunsobi.com/blog/trackback/465
    [로그인][오픈아이디란?]

    Java VisualVM

    dev.java.net에 등록되어있는 VisualVM이라는 자바 프로라일러. 넷빈즈에 기본 포함된 프로파일러의 stand alone
    버전인지 VisualVM을 넷빈즈 프로파일러로 집어 넣은건지는 잘 모르겟지만 UI나 기능이 거의 비슷.

    아래 소개영상을 보고 마음에 든다면 https://visualvm.dev.java.net 에서 더 많은 정보를 접하실 수 있습니다.
    http://java.sun.com/javase/6/docs/technotes/guides/visualvm/index.html(새 창으로 열기) 에는 튜토리얼과 개발자를 위한
    Document가 준비되어 있습니다.

    이 글의 관련글
  • 어드민 콘솔 <-> Edge Server RMI통신을 위한 참고 URL
  • 넷빈즈 6.0 출시 :: NetBeans 6.0 Released!!
  • finalize 메소드의 오버라이딩을 자제해야 하는 이유.
  • 소켓통신 서버/클라이언트 통신시 IO Blocking 상태에 빠지는 코드와 해결 방안
  • Struts File Upload
  • CLASSPATH에 없는 클래스 로딩
  • 자바 애플리케이션에서 동적으로 PDF 파일 생성하기
  • 넷빈즈(Netbeans) 실행하기 - JDK 설정 v1.0
  • String 타입의 날짜를 Date 타입으로 변환하기
  • double 값을 문자열 형식의 퍼센트값으로 변환하기
  • Eclipse 3.3 or NetBeans 6.0?
  • 스트럿츠 2.1 릴리즈!! Committer 인터뷰
  • 2009/01/19 02:06 2009/01/19 02:06
    Trackback Address:http://www.yunsobi.com/blog/trackback/462
    [로그인][오픈아이디란?]

    java.beans.XMLDecoder와 java.beans.XMLEncoder를 이용한 Java객체의 xml 변환

    자바 객체와 XML간의 변환에관해서는 몇 가지 라이브러리들이 존재하고 있습니다만 이번 시간에는 Java SDK에
    기본으로 포함되어 있는 java.beans.XMLDecoder와 java.beans.XMLEncoder를 이용하여 자바객체<->XML간
    변환 방법을 알아보겠습니다.

    java.beans.XMLDecoder와 java.beans.XMLEncoder클래스는 J2SE 1.4 버전부터 이용할 수 있습니다.

    우선, XML로 변환하고 XML로부터 복원할  적당한 자바 클래스를 작성합니다.


    /*
    * Setter와 Getter를 가진 전형적인 JavaBean 클래스입니다.
    */

    package com.yunsobi.beanxmltranslate;

    import java.awt.Point;
    import java.util.ArrayList;

    /**
    *
    * @author 신윤섭
    */
    public class SampleBean {
    private int[] scores;
    private String name;
    private Point seat;
    private ArrayList entry;

    public int[] getScores() {
    return scores;
    }

    public void setScores(int[] scores) {
    this.scores = scores;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public Point getSeat() {
    return seat;
    }

    public void setSeat(Point seat) {
    this.seat = seat;
    }

    public ArrayList getEntry() {
    return entry;
    }

    public void setEntry(ArrayList entry) {
    this.entry = entry;
    }

    }


    보시면 아시겠지만 int 배열과 String, Point, ArrayList 객체를 갖는 전형적인 자바빈 객체 하나를 만들었습니다.

    이제, 이 SampleBean 클래스를 xml로 변환하고 변환한 xml로 부터 SampleBean객체를 복원하는 코드를 작성합니다.

    /*
    * java.beans.XMLDecoder와 java.beans.XMLEncoder는
    * Java객체를 XML로
    * XML에서 Java 객체로 변환하는 쉬운 방법을 제공 합니다.
    */
    package com.yunsobi.beanxmltranslate;

    import java.awt.Point;
    import java.beans.XMLDecoder;
    import java.beans.XMLEncoder;
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.ArrayList;

    /**
    *
    * @author 신윤섭
    */
    public class BeanXmlTranslator {

    public static void main(String args[]) throws Exception {

    //xml로 변환할 클래스를 생성
    SampleBean sample = new SampleBean();
    //파라메터를 세팅해 봅시다.
    sample.setScores(new int[]{100, 90, 75}); //int[]
    sample.setName("Gore"); //String
    sample.setSeat(new Point(5, 3)); //java.awt.Point
    //ArrayList에 String과 Point도 넣어보구요..
    ArrayList entry = new ArrayList();
    entry.add("우리는");
    entry.add("하나다");
    entry.add(new Point(1,1));
    sample.setEntry(entry);

    //자.. 객체를 XML로 변환 시킵니다.
    XMLEncoder encoder = new XMLEncoder(
    new BufferedOutputStream(
    new FileOutputStream("C:\\Sample.xml")));
    encoder.writeObject(sample);
    encoder.close();
    //객체 레퍼런스를 찍어보구요..
    System.out.println(sample);

    //이젠 XML에서 객체로 복원시켜 봅니다.
    XMLDecoder decoder = new XMLDecoder(
    new BufferedInputStream(
    new FileInputStream("C:\\Sample.xml")));
    SampleBean sample2 = (SampleBean) decoder.readObject();
    decoder.close();
    //객체 레퍼런스를 찍어보구요..
    System.out.println(sample2);
    }
    }


    예.. 변환의 핵심은 XMLEncoder 클래스의 writeObject() 메소드와 XMLDecoder  클래스의 readObject() 메소드
    에 있습니다.

    객체를 xml로 변환한 결과를 한번 볼까요?

    <?xml version="1.0" encoding="UTF-8"?>
    <java version="1.5.0_13" class="java.beans.XMLDecoder">
    <object class="com.yunsobi.beanxmltranslate.SampleBean">
    <void property="entry">
    <object class="java.util.ArrayList">
    <void method="add">
    <string>우리는</string>
    </void>
    <void method="add">
    <string>하나다</string>
    </void>
    <void method="add">
    <object class="java.awt.Point">
    <int>1</int>
    <int>1</int>
    </object>
    </void>
    </object>
    </void>
    <void property="name">
    <string>Gore</string>
    </void>
    <void property="scores">
    <array class="int" length="3">
    <void index="0">
    <int>100</int>
    </void>
    <void index="1">
    <int>90</int>
    </void>
    <void index="2">
    <int>75</int>
    </void>
    </array>
    </void>
    <void property="seat">
    <object class="java.awt.Point">
    <int>5</int>
    <int>3</int>
    </object>
    </void>
    </object>
    </java>


    객체의 타입과 할당된 값이 깔끔한 xml문서로 작성된것을 확인 하실 수 있습니다.

    자바에는 객체 직렬화(Serialize) 란게 있지요..
    위 XMLDecoder와 XMLEncoder가 직렬화 기능을 이용하는건지 아닌지 확인 해 볼까요?
    가장 정확한 방법은 XMLDecoder와 XMLEncoder의 소스를 보는것이겠지만 이미 위 예제 소스만으로도
    충분히 예상 하실 수 있습니다. 위 예제의 SampleBean 이 Serializable 하지 않음에도 xml문서로 생성되었습니다.
    예.. XMLDecoder와 XMLEncoder 내부적으로 java Reflection을 이용하여 xml, 객체간 변환을 수행하고 있습니다.

    java Reflection을 이용한다고 했습니다. 이는 getXXX, setXXX 메소드가 없다면 해당 변수를 xml로 만들어내지
    못하고 객체로 복원해 내지도 못함을 의미합니다.

    또 하나, XMLEncoder를 통해 변환된 xml은 문서의 형태로 보아도 외부 시스템과의 정보의 교환보다는
    객체의 상태저장/복원을 목적으로 사용하는게 더 어울릴거란 생각이 드네요.

    이 글의 관련글
  • Java 6u21 과 이클립스
  • 넷빈즈(Netbeans) 실행하기 - JDK 설정 v1.0
  • Ajax와 Java EE의 통합
  • JAVA Base64 Encoding / Decoding
  • Redirection When Session Times Out :: 서블릿 필터를 이용한 리다이렉션 코드
  • 넷빈즈(NetBeans) 실행하기 - ClassPath 설정 v1.0
  • 소수 자리 숫자들의 사칙연산
  • WebRowSet 을 이용한 JDBC 활용하기 2부
  • JDOM과 XML 파싱
  • XML-RPC Response 문서 포맷
  • JavaMail :: 인증을 요하는 메일 SMTP에 접속하는 방법
  • IE8의 IE7 에뮬레이션 CSS Hack
  • 2009/01/08 21:01 2009/01/08 21:01
    Trackback Address:http://www.yunsobi.com/blog/trackback/345
    [로그인][오픈아이디란?]

    Java 7 로드맵 업데이트와 커뮤니티의 반응.

    2009년 12월 수정 : Java 7에 클로저를 도입하기로 했네요.( http://www.yunsobi.com/blog/513 )

    2010년 초반 출시를 목표하고있는 Java 7의 기능을 Java SE의 수석 엔지니어 Mark Reinhold가 Devoxx에
    게시한 이후 여러 반응이 나오고 있습니다. 비록 그의 발표가 완전히 결정나지 않은 사항에 대한 잠정적인
    내용이라곤 해도 커뮤니티 - 특히 클로저(Closure)의 누락을 주시하는 - 의 반응은 대단합니다.

    Mark의 소식을 전한 Hamlet D'Arcy는 그의 블로그에 Java 7 Update from Mark Reinhold at Devoxx
    제목으로 Devoxx에 발표한 Java 7 중요한 새로운 기능을 요약해 올렸습니다.
    모듈화 - JSR-294와 Project Jigsaw.
    JSR 292 - JVM의 dynamic language 지원
    JSR 203 - 진정한 비동기 I/O( non blocking I/O가 아닌)로 구현되는 더 새로워진 I/O API
    JSR TBD - 아래에 기술하는것 같은 약간의 언어적 변화
       - 안전한 rethrow
       - Null dereference 표현식 : '?' 신택스를 이용한 Null 체크
       - 향상된 타입 추론
       - Multi-catch : catch 절에 ','를 이용하여 다수의 Exception 기술
    JSR 296 - 스윙 어플리케이션 프레임워크
    6u10 기능들의 개선(자바 커널, 퀵스타트,플러그인 등)

    위 내용과 함께, 심사숙고했지만 Java 7에 포함되지 않을 몇몇 기능도 언급했습니다.
    Closure - 의견을 통일하지 못해서.
    구상화 제네릭 ( Reified generics )
    퍼스트 클래스 프로퍼티
    연산자 오버로딩
    BigDecimal Syntax
    JSR 295 - Beans Binding

    이에대해 Java.net 에는 "Java 7에서 제외된 아래 기능 중 당신이 가장 관심을 두고 있는것은 무엇?"이란 주제로
    투표가 진행되고 있습니다.
    Java 7 and closure

    많은 이들이 Closure의 부재에 대해 관심을 갖고 있군요.


    Ricky Clarkson같은 사람은 극단적으로 Closure없이는 자바는 죽을 것이라고까지 표현하고있습니다.
    So it's confirmed. Despite James Gosling wanting closures, despite 3 working closure
    prototype compilers, despite every other JVM language supporting closures, Java 7 will
    not have closures.
    Martin Kneissl 역시 Java7에 Closure가 빠진것을 아쉬워하는 사람 중 하나입니다.
    It should have closures instead of the new style "for" loop added in Java 5. It should
    have closures in Java 6. Now it seems that it will not get closures in Java 7. Closures
    are not that difficult to understand. At least when you compare them to anonymous inner
    classes in Java. Others disagree.(새 창으로 열기) I don't follow the reasoning of the closure opponents
    when they say that because there are stupid Java programmers out there you should limit
     the Language trying to prevent them from doing too much harm. That's just impossible.
    Incompetent programmers will shoot themselves in the foot in any language(새 창으로 열기). Fortunately
    there are other languages on the JVM that can use the real strength of Java: libraries,
    portability, and (to some extent) tooling.
    이 외에도 정말 많은 개발자들이 자바언어의 Closure 미 지원을 아쉬워합니다.

    이번 발표와 커뮤니티의 반응을 통해 너무나 많은 개발자들이 클로저를 원하고 있다는 사실을 알수 있었습니다.
    아직 Java 7의 모든 기능 확정되지 않은 상황이기에 커뮤니티의 반응에따라 기능이 추가될 여지도 배제할
    순 없지만 개인적으로도 개발의 편의성을 고려하여 언어차원에서 클로저를 지원하면 좋겠다는 생각입니다.
    현재 한국 자바 개발 현장에선 1.4가 주류를 이루고 있다고 보여지고 많지 않은 곳에서 1.5 이상이 쓰이고 있는
    현실에 비추어보면 1.7이 현장에서 침투하기까진 적지않은 시간이 필요하겠지만요..

    Closure에 대해 관심을 갖으신 자바개발자라면 "Neal Gafter의 자바를위한 클로저 프리젠테이션" 을 훑어
    보시는것을 추천합니다.
    이 글의 관련글
  • Sun Tech Days 2008 개발자 컨퍼런스 무료 등록자에 선정되다. (4)
  • 자바 프로그래밍으로 온라인 XML 데이터 검색하기
  • 문자열 오브젝트의 길이는?
  • 자바 SE 플랫폼 개괄 :: Java SE Platform at a Glance
  • WebRowSet 을 이용한 JDBC 활용하기 4부
  • Web Services (JAX-WS) in Java EE 5
  • Java VisualVM
  • JAVA 5 한글 api
  • Ajax와 Java EE의 통합
  • Version 0.2 xcEPC Network Core for Java - epcnetwork java api
  • JDK 7 에서 기본 제공했으면하는 메소드는?
  • JAVA.UTIL.SCANNER로 텍스트 스캔하기
  • 2009/01/05 21:52 2009/01/05 21:52
    Trackback Address:http://www.yunsobi.com/blog/trackback/459
    1. 전 자바팬은 아니지만 어째 제가 더 아쉽군요^^

    2. Blog Icon
      서비

      Generics(JSR-14 였었나요?)가 JSR에 올라가서 1.5에 추가되기까지 8년이라는 시간이 걸렸죠.
      기존 코드와의 역방향 호환성을 유지하면서 도입의 영향을 최소화하기 위해 그렇게나 긴 시간을 들여 고민을 한 것인데요.
      클로저를 도입하는데도 저런 긴 시간을 들인다면 그 사이 어떤 전개가 펼쳐질지 궁금합니다.

    [로그인][오픈아이디란?]