보통 객체를 초기화 할때 다음과 같은 코드를 많이 쓴다. InventoryHistory inventoryHistory = new InventoryHistory();
inventoryHistory.setSeqId(1L);
inventoryHistory.setInventoryStatus(DummyData.getIumCode("0001"));
inventoryHistory.setStatus(DummyData.getIumCode("0001"));
inventoryHistory.setUpdateYmdt(Calendar.getInstance());
inventoryHistory.setInventory(getDummyInventory());
dao.insertInventoryHistory(inventoryHistory);
매번 inventoryHistory를 처야하니 여간 불편한게 아니다 하지만 다음과 같은 문법으로 간결하게 쓸수 있다.
dao.insertInventoryHistory(new InventoryHistory() {
{
setSeqId(1L);
setInventoryStatus(DummyData.getIumCode("0001"));
setStatus(DummyData.getIumCode("0001"));
setUpdateYmdt(Calendar.getInstance());
setInventory(inventory);
}
});
다음은 관련 링크!http://isagoksu.com/2009/development/java/double-brace-initialization/ |
'Development/Java'에 해당되는 글 6건
- 2011/06/18 2011 한국 자바개발자 컨퍼런스 시간표
- 2010/06/25 Groovy 에서 디비 접속하기!
- 2010/03/30 이클립스로 자바 원격 디버깅 하기 (1)
- 2010/01/06 구글 웹 툴킷 SmartGWT Hello World ( Google Web Toolkit SmartyGWT Hello World )
- 2009/12/23 로보코드 ( Robocode )
- 2009/12/13 아마존 상품 광고 API ( Amazon Product Advertising API ) (1)
Posted on 2011/08/09 23:28
Filed Under Development/Java
Posted on 2011/07/04 05:09
Filed Under Development/Java
디버깅을 하면 자꾸 ThreadPoolExecutor 에서 이클립스가 멈춘다. 멈춘동시에 해당 위치로 커서도 가고 에디터도 전환되서 코딩중 그런경우가 잦았다. 구글링하다가 찾게 되어 적는다 http://stackoverflow.com/questions/6290470/eclipse-debugger-always-blocks-on-threadpoolexecutor-without-any-obvious-exceptio |
Posted on 2011/06/19 19:13
Filed Under Development/Java
일단 인증샷 =_=![]() 기조연설 1 - "SW 산업 활성화 정책 및 개발자 지원정책" - NIPA 양유길 소프트웨어진흥단장그냥 최근 대한민국이 이런이런걸 하고 이런 지원을 하는구나 하는데 개발자라 그런지 별 관심은 안가더군요 그냥 아 그렇구나~ 하는 정도였습니다. 기조연설 2 - "The Furture of the java Platform" - James Lee, Oracle APAC여러가지 오라클에 대한 앞으로의 정책에 대해서 얘기가 나왔지만 가장 많이 들었던것은 "오라클은 썬에서 지원하던걸 그대로 지원한다" 입니다. 요즘 썬이 인수되면서 자바의 방향이 바뀌는것 아니냐에대한 우려에 대한 표시인듯 합니다. 오라클은 썬이 해왔던 커뮤니티의 지원이나 그외의 것들을 그대로 지원하며 앞으로도 쭉 그럴것이니 자바를 떠나지말라 라고 하는듯했습니다. 또 자바에서 큰 이슈인 JDK 7 에 대한 얘기도 했는데 오는 7월 7일에 정식으로 오픈할꺼라고 하더군요 또 다음 세션을 두려워(??)하며 빨리 끝내겠다고 하는 얘기에 모두들 빵 터졌습니다. 축하공연 - 달샤벳+_+ 눈이 번쩍 ㅋ 여성아이돌이 나왔지만 모두 개발자이다보니 클래식 음악처럼 노래 시작할때랑 끝날때만 박수치는 기이한(?) 광경을 목격했습니다. 중간에 음향장비 문제로 음악이 멈췄었는데 달샤벳 멤버들의 순간 당황한 모습이 귀엽더군요 한국 자바개발자 컨퍼런스는 총 7개의 룸에서 동시에 세션이 진행됐습니다. 모두 듣고 싶은데 아쉽더군요 7개중 1개를 택한다는게 쉽지는 않았습니다. 1교시 - "Java Annotation과 MyBatis로 나만의 ORM 프레임웍을 만들어보자" - 강동혁(한솔헬스케어주식회사 웹개발팀/팀장)기존에 모든 SQL 문을 MyBatis 설정에 때려박는 방식에서 간단한 1:1 쿼리들을 동적으로 생성해서 사용하자라는 내용이었습니다. 어노테이션은 쓰기만 했지 만드는건 생각안했었는데 덤으로 알게됐네요. 비록 프레임워크라고까지 하기는 작은 내용이지만 그 효과는 컸습니다. 일일이 써넣어야 했던 쿼리들을 자동화시키므로써 써야하는 쿼리의 양을 줄이는 효과를 냈으니까요. 바로 적용할만 하다 생각이 들었습니다. 진행한 내용에 대한 실제 구현물은 http://code.google.com/p/mybatis-orm/ 에서 받을 수 있습니다.2교시 - "LBS with MongoDB" 이용혁(itemBay 신사업팀 팀장)정말 MongoDB는 쉽구나 라는 생각이 들었습니다. 연사께서 실제 데모를 보여주셨는데 RDBMS로는 상상도 할 수 없는 퍼포먼스가 나오더군요. 그것도 일게 노트북에서 ( 맥북프로 ) . 또 MongoDB에서 LBS를 지원하는 기능중 하나가 지역자료를 입력하면 두 지역간의 거리를 자동으로 구해준다는겁니다. 정말 쉽게 LBS 기능을 구현할수 있겠다는 생각이 들었습니다. 데모중에 uClude AP의 IP가 계속 변해서 살짝 당황하시긴 한거 같은데 잘봤습니다.3교시 - "Realtime Web Application with Java" - 변정훈(NHN Business Platform), 박용권(DreamInfra 개발실 / Application Architecture)Comet나 Polling, WebSocket 에 대한 클라이언트와 서버사이드에 대한 세션이었습니다. 처음에 OX퀴즈를 내는 페이지를 보여주고 실시간으로 (세션에 있었던 사람들이) O와 X로 원이 이동하며 결과를 보여주는 데모에 다들 감탄했습니다. http://www.springsprout.org:10000/ 물론 많은 사람들이 몰려서 마지막에는 살짝 오류가... 머 서비스하는것도 아니라서 머 ㅋㅋㅋ 퀴즈를 마감하는 카운트다운을 한다는것도 인상적이었습니다. 서버단에서 클라이언트를 컨트롤 할수 있는것이니까요. 내용은 사실 거의다 아는 내용이라 별건 없었지만 마지막에 서버사이드 쪽에 WAS별 지원하는 서버측 기술과 Servlet 3.0 에서 지원하는 부분에 대한 설명은 잘들었습니다. 또 Lightstreamer 와 Streamhub등 오픈소스 라이브러리들에 대한 소개도 있었습니다.4교시 - "오픈소스를 활용한 배치 처리 플랫폼 공유" - 김용환(NHN에서 Backend 개발/유지보수, 개발 지원, 시스템 관리/지원, 트러블 슈팅, 웹 환경 설치/설정 표준화)NHN 내부에서 배치 처리에 대한 고민과 그에 대한 결과물을 공유하는 자리였습니다. 결론은 Spring Batch와 Hudson의 연동, Hudson에 Plugin을 개발하였다는 내용이었습니다. 오 저거다 싶어 NHN에서 공개했는지 노트북으로 강연내내 찾고 있었습니다. 헌데 마지막 Q&A자리에서 다른분이 공개 여부를 물어보니 김용환님께서 자신에게 메일을 많이 보내주시면 위에 요청하여 오픈소스화 시키는걸 고려해보겠다고 하시더군요. 바로 메일 보냈습니다 =_=5교시uClude 활용사례에 대한 얘기들이었습니다. 실제 돌아가고 있는 서비스들에서 사용되고 있는 uClude 의 장점들을 설명하는 자리였습니다. 특히 마지막에 허광남 대표님 특이하시더군요. raction 이라는 서비스를 만드셨는데 동영상보고 특이하다 했더니 대표님의 스타일이 녹아들어간든한 느낌이 들더군요. 보통 이런자리에 돈얘기 나오기 힘든데 uClude에서 실제로 쓰고 있는 비용들도 공개해주시고 하시더라는. 특히 저예산의 경우 클라우드는 필수인듯 합니다. |
Posted on 2011/06/18 07:52
Filed Under Development/Java
http://www.kjdc.org/ 관심있는 섹션은 빨간색으로... 다 볼수는 없구나 ㅜㅡ ![]()
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posted on 2010/06/25 09:00
Filed Under Development/Java
| 요즘 회사 이직후 적응하는중이라 여유가 없어서 포스팅을 못하네요 ㅋ 그중에서도 회사일 하는중에 간단하게 해야할일 ( 데모를 위한 데이터 정리? ㅋ)을 그루~비! 로 해봤습니다. 역시나 맘에 들도록 간결하게 나오더군요 ㅡㅜ 까오! 데이터베이스 접속
import groovy.sql.Sql
def sql = Sql.newInstance("jdbc:mysql://127.0.0.1:3306/my_db", "root", "pass",
"com.mysql.jdbc.Driver")
sql.eachRow("SELECT * FROM table") { row ->
println row.field
}
sql.execute("update table set field = ?", [11])
설명이 필요없을 정도로 간결한... 요즘은 아예 groovyConsole 을 실행해놓고 테스트나 계산 같은걸 바로바로 해본답니다. ㅎㅎ |
Posted on 2010/03/30 03:46
Filed Under Development/Java
| 보통 프로그램을 만들면 로컬에서 테스트한것과 실제 릴리즈 한것에 대한 차이 때문에 에러 잡기가 애매한경우가 있다. 해서 이클립스와 자바에서는 원격 디버깅을 지원하는데 다음과 같이 실행해볼수 있다. 원격지 java -jar -Xrunjdwp:transport=dt_socket,address=8000,server=y takeone.jar 위에서는 8000포트, 서버모드로 자바 프로그램을 실행한다. 물론 원격지의 방화벽 8000 포트를 열어줘야 한다. 위에처럼 실행하면 자바 프로그램이 다음과 같은 메세지를 띄우며 대기상태가 된다. Listening for transport dt_socket at address: 8000 이클립스 ![]() Debug에서 Remote Java Application을 선택해줍니다. host는 원격지의 IP를 입력해주고 아까 정했던 8000 포트로 지정합니다. 그런후 디버깅~ 누르면 로컬과 똑같이 디버깅을 수행할수 있습니다. 위에서 Connection Type을 Socket Listen으로 바꾸면 반대로 원격지에서 로컬로 접속할수 있습니다. 원격지가 유동IP인경우 좋겠네요 |
Posted on 2010/01/06 11:47
Filed Under Development/Java
SpringSource Tool Suite 가 무료화 됐습니다. 기본적으로 자바는 물론 그루비, 게일스 까지 지원하니 좋군요 바로 설치했습니다.GWT 설치Help > Install New Software... 를 선택해 http://dl.google.com/eclipse/plugin/3.5 를 추가합니다. 그후 모두 선택하여 설치합니다. 그럼 GWT는 설치완료! SmartGWT 설치SmartGWT 에 가서 smartgwt.jar과 smartgwt-skin.jar를 다운로드 받습니다. 그리고 eclipse에서 build path 에 추가합니다. smart 라는 프로젝트를 생성합니다. 물론 구글 웹 프로젝트로 생성합니다. 그후 smartgwt를 build path 에 추가합니다. 그후 Smart.gwt.xml를 열고
를 추가합니다. smartgwt를 사용하겠다는 의미지요 그리고 Smart.html에서 smart.nocache.js 위에
를 추가하면 완료! (꼭 smart.nocache.js 보다 상위에 와야합니다.) Smart.java다음을 임포트하고
onModuleLoad 에 다음과 같은 코드를 추가합니다.
혹은 RootPanel.get().add(button); 으로도 화면에 추가할수 있습니다. Hello World 버튼을 누르면 다음과 같은 메세지가 나타나면 성공입니다. ![]() smart.7zSmart GWT Hello World by takeone |
Posted on 2009/12/23 18:25
Filed Under Development/Java
로보코드란 자바코드로 로봇을 만들어 경쟁하는겁니다. 그 과정에서 자바에 대해서 배울수도 있고 창의력도 키울수 있다고 하는군요 -_-실제 구동화면![]() 이렇게 저 로봇 하나하나가 클래스 입니다. robocode.Robot을 상속해서 구현해주시면 되는데요 우리 홍만님의 코드를 보면 import robocode.Robot; import robocode.ScannedRobotEvent; public class HongManChoi extends Robot { public void run() { while (true) { ahead(100); turnGunRight(360); back(100); turnGunRight(360); } } public void onScannedRobot(ScannedRobotEvent e) { fire(1); } } 간단하죠? 설명을 드리면 run 메소드안의 코드는 로봇의 움직임입니다. ahead는 앞으로~ trunGunRight 총을 우측으로 back은 뒤로 등입니다. 그리고 onScannedRobot은 적이 발견되었을경우 fire! 이구요 저 단순한 동작을 반복하면서 상대 로봇과 전투하게 됩니다.
최종 승자는 터미네이터 -_- 3위한 로봇은 다운로드 받은녀석인데 올해 최악의 로봇 머 이런건가 전혀 힘을 못쓰네요 ㅋㅋ 다운 받으셔서 바로 실행하면 됩니다. 후후 |
||||||||||||||||||||||||||||||||||||
Posted on 2009/12/13 18:07
Filed Under Development/Java
|
간만에 제대로된 기술적인 포스팅이네요 ㅡㅜ 이번에는 아마존 상품 API를 다뤄볼까 합니다.
우리나라의 오픈마켓 쇼핑몰들 처럼 아마존도 API를 제공하는데요 아무래도 우리나라에는
관련문서가 없더군요. 해서 이번 포스팅에서 한번 다뤄볼까 합니다.
라이센스 얻기
아마존 상품 API를 이용하려면 아마존에 가입하여 Access Key ID 와 Secret Access Key가 있어야 합니다. 우측 상단에 Create an AWS Acount 를 클릭하여 계정을 만듭니다. 계정만드는건 복잡하지 않습니다. 아이디는 이메일로 입력합니다. 가입후 로그인을 합니다. 우측 상단의 Your Acount > Security Credentials 로 들어갑니다. Access Credentials 밑에 보면 Access Keys 라고 해서 액세스 키들이 있습니다.Secret Access Key 에서 show를 해보면 Secret Access Key를 볼수 있습니다. 현재는 한 계정에 2개를 생성할수 있습니다. 물론 가입절차가 간단하여 여러 이메일로 생성할수 있습니다. 한 KEY당 하나의 아이피에서만
사용할수 있기 때문에 더 필요하다면 계정을 생성하거니 돈을 지불해야 합니다. 이렇게 Access Key ID 와 Secret Access Key 를 기억해둡니다. 물론 외울수는 없으니 C&P!
요청 분석 웹서비스에는 많은 오퍼레이션들이 있지만 오늘 예제로 쓸 ItemSearch 와 ItemLookup에 대해 살펴보겠습니다. ItemSearch는 흔히 쇼핑몰들에서 '리스트'페이지 역할을 합니다. 한번에 10개의 상품을 가져올수 있고
총 400페이지까지 진행이 가능합니다. ItemLookup은 상세페이지라고 보시면 되구요
많은 인자들이있지만 기본적인 인자로는 Keyworlds, Title 등의 '검색 속성'으로 보시면 되겠습니다. 이걸 지정해야
실제로 검색이 됩니다. 또 ItemSearch와 ItemLookup 공통으로 쓰이는 ResponseGroup 는 받을 데이터를 지정하는것입니다. 아무것도 지정하지 않을경우 최소의 정보가 리턴됩니다.
ItemLookup에서 가장 중요한 인자는 ItemId 입니다. 여기에는 ASIN이라는 코드가 들어가는데 아마존에서 상품을 구분하는 유일한 값입니다. 이것을 지정해줘야 정상적으로 상품의 정보를 가져옵니다.
샘플코드 얻기
샘플코드로 가보시면 Java, PHP, Ruby, C#, Perl 등 다양한 언어로 된 코드들이 존재합니다. 각자 구미에 맞는 언어를 선택하시면 되는데 각 언어별로 특성이 좀 있을뿐 기본적은 동작방법은 비슷합니다. 제가 실무 작업할때는
PHP를 주로 사용했지만 이번에는 자바로 작업해보다록 하지요.
아 그리고 Product Advertising API Signed Requests Helper 는 Access Key ID와Secret Access Key로 실제 서비스 요청 URL를 만들어주는 페이지입니다. 여기서 먼저 테스트 해보셔도 좋습니다.
제가 사용한 코드는 이겁니다. 그런데 2009년 12월 12일 현재 이 코드는 제대로 동작하지 않습니다. SignedRequestsHelper.java 에서 183 줄
Base64 encoder = new Base64(0); 처럼 바꿔야 제대로 동작합니다.
또 위 코드는 org.apache.commons.codec.binary.Base64 를 사용하기때문에 아파치 라이브러리중에 다운받아 세팅해야합니다.
에서 바이너리를 다운로드하여 프로젝트에 세팅합니다.
ItemLookupSample.java 에서
private static final String AWS_ACCESS_KEY_ID = "AKIAJVTU6YAIEJI26SGA";
/*
* Your AWS Secret Key corresponding to the above ID, as taken from the AWS
* Your Account page.
*/
private static final String AWS_SECRET_KEY = "CbLiKWY8ycHdNMWQ2eoVi12oE6ISxiJcFbFK6R0O";
/*
* Use one of the following end-points, according to the region you are
* interested in:
*
* US: ecs.amazonaws.com
* CA: ecs.amazonaws.ca
* UK: ecs.amazonaws.co.uk
* DE: ecs.amazonaws.de
* FR: ecs.amazonaws.fr
* JP: ecs.amazonaws.jp
*
*/
private static final String ENDPOINT = "ecs.amazonaws.com";
/*
* The Item ID to lookup. The value below was selected for the US locale.
* You can choose a different value if this value does not work in the
* locale of your choice.
*/
private static final String ITEM_ID = "B001666E4I"처럼 바꿉니다. 실행하면
처럼 나오면 성공입니다. 위상품은 우리 소녀시대의 1집 입니다. ㅎㅎ
위에서 Operation=ItemLookup 부분을 보시면 오퍼레이션이 ItemLookup입니다. 즉 상품 하나의 정보를 보는것이지요 쇼핑몰로치면 상품 상세페이지 정도가 되겠네요. 그럼 상품 리스트 페이지를 해봐야겠죠? 그런데 몇가지 제한사항이 있습니다. 첫째 한번에 불러올수 있는 리스트의 수가 10개입니다. 또한 최대 400페이지까지 호출 가능하지요 머 제한사항이라고 보기도 민망하지만, 여튼 해봅시다!
샘플코드에 리스트를 부르는 부분은 없으니 만들어야 합니다. 일단 ItemLookupSample.java 를 C&P하여 ItemSearchSample.java 로 만듦니다.
다른부분은 다 똑같지만
요청하는 부분이 다릅니다. 오퍼레이션이 ItemSearch 로 바뀌고 SearchIndex 는 일종의 카테고리 개념으로 보시면 되구요 Keywords 가 소시입니다. 후후 TotalPage 값도 주고 Page값을 요청할수 있기때문에 일반적으로 하는 페이징 처리도 아마존 서비스로 가능합니다.
위와 같이 나온다면 성공입니다!
다른언어들도 각 언어의 특성을 따를뿐 요청하고 XML을 처리하는 방법으로 진행됩니다. 단순히 상품 정보뿐만아니라 장바구니 API도 제공하고 있어 실제로 아마존 사이트에 들어가지 않고도 주문까지 구현할수 있습니다. 재미있겠죠~
아래는 지금까지 진행한 예제입니다. 라이브러리도 넣어놨으니 바로 실행해보실수 있지만 키값들을 넣으셔야 합니다.
by takeone |




smart.7z