레이블이 자바인 게시물을 표시합니다. 모든 게시물 표시
레이블이 자바인 게시물을 표시합니다. 모든 게시물 표시

9/13/2013

Google Protobuf 에서 객체 안에 있는 배열에 값 세팅하기


Java 에서 Google Protobuf 객체를 생성할때는, 예를 들어 Classroom안에 ArrayList인 People 이 있고 이를 세팅해야 한다고 할때

Classroom classroom = Classroom.newBuilder().setPeople(0, people1).build();

와 같은 형태로 작성해 놓고 ArrayIndexOutOfBoundsException 이 발생하는 이유를 몰라서 끙끙대는 경우가 종종 생기는데,  이럴때는 setXXX 를 쓰지 말고 addXXX 로 생성되어 있는 메소드를 사용하면 된다.

다시 말해, people1을 위에다가 먼저 생성하고 그걸 가지고

Classroom classroom = Classroom.newBuilder().addPeople(people1);

이런식.  왜 그런지 궁금하면 생성된 Protobuf로 생성한 자바 파일을 까보시라.

6/03/2011

Spring3에서 @RequestMapping시 URI tempate이 제대로 먹히지 않는 경우

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);  
  model.addAttribute("owner", owner);  
  return "displayOwner"; 
}
The URI Template "/owners/{ownerId}" specifies the variable name ownerId. When the controller handles this request, the value of ownerId is set to the value in the request URI. For example, when a request comes in for /owners/fred, the value fred is bound to the method parameter String ownerId.

The matching of method parameter names to URI Template variable names can only be done if your code is compiled with debugging enabled. If you do not have debugging enabled, you must specify the name of the URI Template variable name in the @PathVariable annotation in order to bind the resolved value of the variable name to a method parameter.

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html




요약 : Spring3에서 아래와 같이 작성을 해주면 /owners/1234 와 같이 URL이 GET으로 호출되는 경우 String ownerId 에 1234 라는 값이 자동으로 저장된다. 하지만 이건 debug enabled로 컴파일 되었을 때의 경우이고(디버깅용으로 생성된 정보를 이용해서 매칭해 준다는 거지), 제대로 하려면 @PathVariable("ownerId") 처럼 해줘야 한다는 것. 이 경우 실제 변수명은 꼭 ownerId가 아니어도 상관없다.(당연)  즉, String ownerId 이든 String theOwner이든 앞에 @PathVariable("ownerId") 만 URI tempate의 것과 맞으면 값을 할당됨.

은근히 처음 방법으로 코딩해 놓은 것들을 많이 찾아볼 수 있는데, 항상 디버깅 정보를 넣은 채로 컴파일이 되는 건 아니니까 항상 이름을 명시해주는 방식으로 코딩하자.

-P.S-
그러고보니 이 블로그에 이런 내용을 쓰는건 진짜 백만년만인듯...

8/13/2010

Eclipse 에서 메모리 Heap 상태 체크하기 및 GC하기

몇몇 플러그인도 있는 것 같습니다만, 3.5 이상은 기본으로 들어가 있는 듯 합니다. ( 그전부터 있었을지도?? )

 

Preference –> General 을 선택하면 아래와 같이 “Show heap status” 라는 컬럼이 있는데, 기본으로는 체크가 되어 있지 않습니다.

 

 

체크를 켜고 나면 화면 우하단에 아래와 같이 힙사이즈를 보여주는 UI가 나타납니다.

전체 HeapSize는 본인 PC의 세팅 및 eclipse.ini 에서 세팅한 –Xmx 같은 파라메터의 영향을 받겠지요.

 

 

보시면 지금 이 스샷을 뜬 이클립스는 전체 992M 중에 224M를 쓰고 있다는 걸 알 수 있네요.

그 옆에 보면 휴지통 모양이 있는데, 네 맞습니다. 누르면 Garbage Collection합니다.

 

너무 무거운 어플리케이션 띄우거나 해서 Heap Size 다 썼다는 오류를 허구한 날 보시는 분이라면 틈틈히 저 버튼 눌러주시면 되겠습니다.

(그럴 일이 자주 없길 바랍니다. –_-;;)

4/20/2009

오라클과 썬 마이크로시스템즈 합병

image

20일, 썬 마이크로 시스템즈와 오라클은 SUN의 주식을 주당 9.5달러의 가격으로 오라클이 썬을 인수한다고 발표했습니다. 무려 74억달러짜리 거래군요.

자고 일어났더니 이런 일이 –_-;;;

출처 : http://www.sun.com/aboutsun/pr/2009-04/sunflash.20090420.1.xml


최근 경제적으로 어려움을 겪고 있는 SUN을 IBM이 인수하지 않을까라고 생각했습니다. 얼마전에 그런 시도도 있었구요.

오라클의 SUN 인수는 어떻게 보면 좀 생뚱맞기도 하지만 또 한편으로 보면 SUM-IBM의 조합과 달리 SUN-Oracle 조합은 서로 정리할 사업분야가 거의 없는 상태이기 때문에 아주 훌륭한 선택일 수도 있겠습니다. ( IBM에 있어서 SUN 은 계륵 )

이제 막대한 자바 라이센스비는 Oracle 이 꿀꺽꿀꺽하시겠군요.


Oracle + Java + MySQL + 솔라리스 + H/W   >  DB2 + H/W + ? (무지하여 IBM쪽 솔루션들은 생각나는게 없네요 –_-;; 리눅스야 뭐 양쪽에서 다 쓸 수 있는것이니 제외하고)


이제 대세는 기울어져 가는 건가요? –_-;

11/27/2008

Java SE 6 update 10 released!

image 어제 점심먹고 커피 한잔 하면서 제안서를 쓰고 있는데 java update 가 준비되었다고 java updator 가 뿅~ 하고 뜨길래 눌러봤더니 java se 6 update 10이 발표되었군요.

update 7 이 마지막이었던 것 같은데 8/9 생략하고 곧바로 10으로 점프했군요. 뭐가 바뀌었는지 궁금해서 update release note 를 살펴봤습니다.

간단하게 각 항목에 대해 언급해 보자면

Olson Data 2008c : Olson time zone 의 2008c 버전을 포함합니다. JavaDoc 의 java.util.TimeZone 을 읽어보시면 알겠지만 Three-letter time zone ID 는 deprecated 되었습니다. "CST" could be U.S. "Central Standard Time" and "China Standard Time" 등과 같은 이유에서라고 하네요.

Java DB : 이번 릴리즈에는 Java DB 10.4 가 포함되어 있습니다. Java DB 는 Apache 프로젝트인 Derby ( Java 로 만든 경량  DBMS ) 의 SUN 배포한 정도입니다. 사용하기 간단하고 전체 사이즈도 대략 2MB 정도로 가볍습니다.

Next Generation Java Plug-in : RIA로써의  Java Applet ( JavaFX? ) 의 기능향상을 위한 이런저런 패치가 들어간 듯 하네요.

  • ability to increase the heap size and specify command-line arguments on a per-applet basis
  • ability to select a particular version of the Java Runtime Environment for an individual applet
  • improved reliability
  • better and more portable integration between the Java and JavaScript programming languages
  • improved support for accessing the DOM of the containing web page
  • enhanced support for web services

New Direct3D Accelerated Rendering Pipeline for Microsoft Windows Platforms, Enabled by Default : 무려 "fully hardware accelerated graphics pipeline based on the Microsoft Direct3D 9 API" 라고 합니다. 당연히 비디오카드의 드라이버를 최신버전으로 업데이트시켜야겠죠. 새로 구입하신 분들이면 뭐...

Direct3D 파이프라인 기능을 끄고 싶으면 JavaVM  설정시 -Dsun.java2d.d3d=false 를 세팅해 주면 되며, Direct3D API 에서 직접 제공하지 않는 XOR paind mode 등을 사용하는 경우 예전보다 느려질 수 있다고 하니 사용하시는 분들으 주의하셔야겠습니다.

Known Auto Update Issue on Window Vista : 6u10 build 이전의 릴리즈들은 UAC가 설정된 Administrator 사용자의 Vista 에서는 auto update 가 되지 않았었다고 하는군요. ( 굳이 자동으로 안해주셔도 -_-;; )

문제가 있었던 분들은 예전버전을 삭제하고 이번 릴리즈( 6u10 GA(1.6.0_10-b33)) 을 설치하면 됩니다.


그외 awt/swing/2d 등을 포함해 무려 720개의 bug fix 를 제공하고 있으니 지금 당장 업데이트 고고싱~!

참, Sun Developer Network 에 가입된 분들이라면 얼마전 개최되었던 SUN Tech Day 의 발표자료들이 올라와 있으니 관심있는 분들은 참고하시면 되겠네요.

10/13/2008

방금 막 알게 된 엄청난 실수 하나

얼마전에 간단한 퀴즈에 대한 pseudo-code 를 작성할 일이 있어서 나름대로 java 비스무리게 코드를 작성해서 제출했었는데 지금 생각해보니 죄다 method 에다가 function 이라고 붙인 것  같다.

그러고보니 최근 한 몇주간 했던 작업이나 봤던 코드들이 XUL, javascript, flex action script ... 죄다 함수 선언시 function 을 쓰는 애들이네.

조건에 특정 언어를 명시하진 않았기 때문에 융통성 있게 넘어가 주면 좋긴 한데...

문제는 main 쪽은 List 를 써서 대략 'pseudo' 스러운데 내부 구현에 Vector 라든가 Integer.valueOf() 같은 것들을 사용했다는 거 ㅠ.ㅠ


그래도 실행환경 없이 5분만에 pseudo 코드 작성했으면 됐지 뭐.. -_-;; ( 라고 변명해본다 )

6/11/2008

Tomcat 5.0 -> Tomcat 5.5 이후 forward 된 jsp 에서 request.getRequestURL() 의 값이 이상해진 경우

forward 된 jsp 페이지에서 최초의 브라우저 또는 클라이언트 프로그램으로 부터 호출될 때 사용되었던 URL을 구하기 위해 request.getRequestURL() 이나 request.getRequestURI() 를 사용했던 페이지들 중 tomcat 을 5.0에서 5.5 로 업그레이드 한 이후에 출력값이 달라지는 문제가 발생함을 경험하신 분들이 계실겁니다.

이는 Tomcat 5.5.7 버전부터 getRequestURL() 의 구현이 바뀌었기 때문인데(bug fix), 더이상 최초의 URL 을 넘겨주지 않고 forward 된 jsp 페이지의 URL을 넘겨주도록 되었습니다.

해결책부터 적는다면 5.5.7 이후부터는 getRequestURL() 대신에

request.getAttribute("javax.servlet.forward.request_uri");


를 사용하면 됩니다.

좀 더 자세한 내용은 wiki 에 작성해 둔 http://www.potatosoft.com/wiki/wiki.php/TOMCAT5#s-9  을 참고하시기 바랍니다.

10/17/2007

JSTL <sql:query> 에서 where 조건검색시 한글이 안먹힐때

일단 상황은 Altibase4에 웹페이지를 죄다 UTF-8로 세팅해서 쓰고 있는 경우.

주소록에서 특정인의 이름을 받아서 like 검색을 하려고 했다.


query 파라메터로 받은 값을 이용해서


    <sql:query var="addrlist" dataSource="jdbc/mmsgw">
        select * from tbl_address where group_id in (
            select group_id from tbl_addrbook_group where user_id = 'hitchi'
        ) and user_name like '%<c:out value="${param.query}"/>%'

    </sql:query>


로 하려고 했으나 계속 한글인식이 안되는 상황, <%= %> 로 해도 마찬가지고...


얼마전 Servlet 쪽에서 한글검색하다가 유사한 상황이 있었을 경우 PreparedStatement 로 해결했던 경험이 있어, 똑같이 서블릿으로 분리하려고 했으나, '너무' 간단한 기능이고 또 분리하기도 귀찮고, 결정적으로 고칠때 고치더라도 'JSTL' 상에서 꼭 해결해 보고 싶었다.


JSTL에서 PreparedStatement 로 쿼리하는 방법은 <sql:param> 을 이용하는 것이다.

물론 한글도 잘되고~

코드에 사용한 JSTL은 다음과 같다.


<c:choose>
<c:when test="${param.query != null}">
    <sql:query var="addrlist" dataSource="jdbc/mmsgw">
        select * from tbl_address where group_id in (
            select group_id from tbl_addrbook_group where user_id = 'hitchi'
        ) and user_name like ?
        <sql:param value="%${param.query}%"/>
    </sql:query>
</c:when>
<c:otherwise>
    <sql:query var="addrlist" dataSource="jdbc/mmsgw">
        select * from tbl_address where group_id in (
            select group_id from tbl_addrbook_group where user_id = 'hitchi'
        )
    </sql:query>
</c:otherwise>
</c:choose>

요즘 포스팅을 모두 medium쪽으로 하고 있습니다

안녕하세요? 어쩌다보니 그냥 한번 써보기로 한 medium.com 에다가 죄다 최근 포스팅을 하고 있습니다. 현재 도메인인 potatosoft.com 은 제가 대학때인가 사회 취업한지 얼마 안됐을때부터 유지해 온 도메인이고, 블로그 시스템은 그...