블로그 이미지
Max.

calendar

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

Notice

2011.08.26 12:07 개발관련

먼저 업데이트할 기능을 추가하고, 저장소에 결과물을 반영한다.

1) addon 소스 수정
    - 'max web' 명령어에 '--entity' 옵션항을 추가하고 기능을 업데이트 함.

2) compile
   - 도스창에서 mvn assembly:assembly 실행하여, jar 생성

3) 결과물을 repository에 전송
    - eclipse를 이용하여 커밋 



최신 번들을 다운받아 사용한다.

1) 기존 OSGi 번들 제거
    - 'max osgi uninstall'

2) 새로 업데이트된 번들 넣기
    - 'max osgi install --version 1.0.0.M2'

3) 테스트 하기
    - 'max web --class ~.template.web.TemplateController --service ~.template.service.TemplateService --entity ~.template.domain.ContentPage' 을 실행하여 jsp 페이지까지 생성되면 성공이다.


 
SNG 프로젝트에 필요할때마다 수정해서 적용중인데, 불편하거나, 버그가 있을때 바로 수정해서 사용하기 편리하다. OSGi 번들의 장점을 어느정도 느낄수 있다. 특히 여러가지 과정을 max osgi install로 묶어놔서 더욱 편리하게 사용할수 있는 점이 좋은 것 같다.


 
저작자 표시
신고
posted by Max.
TAG ROO, Spring
2011.07.08 08:58 개발관련
희망의 나라로....




저작자 표시
신고
posted by Max.
TAG addon, max, ROO, Spring
2011.07.04 10:13 개발관련


spring roo addon max M1 final...
저작자 표시
신고
posted by Max.
TAG addon, max, ROO, Spring
2010.12.13 08:17 개발관련
아마도 이책이 스프링3에 대한 책이니 만큼 의례적으로 기대하는 스프링3 기술에 대한 욕구를 충족시켜주리라는 기대를 했을 것이다. 그리고, 대충 저자를 보니, 스프링 경험이 좀 있고, 책의 두께를 봐서, 스프링으로 개발할때, 모르는 내용을 찾아볼수 있을것이라 생각했을 것이다. 

또한, 각종 인터넷 서점의 서평과 책에 추천자들의 추천 내용을 보니, 책을 읽지 않으면, 자바 개발자로서 시대에 순응하지 못할것 같은 생각도 들것이다. 주위의 자바 개발자 동료나, 상급자인 팀장, 또는 신입사원 개발자가 이책을 보거나 이야기한적이 있을 것이고, 그 이야기 중에 디자인패턴이니, 스프링철학이니, 서비스추상화니 하는 귀신 시나락 까먹는 소릴 하던데 그게 무엇인지 알고싶어서 책을 봐볼까 하는 생각도 들것이다. 이처럼 기대와 염려 그리고 희망까지 이 '토비의 스프링 3' 라는 책이 다 채워줄꺼라 생각하는가? 그렇다. 채워준다. 더 많은것을 얻을 수도 있다. 

어떻게??? 

몇가지 조건이 있다. 첫째, 회삿돈으로 사든, 남의 돈으로 사든 어쨌든 내가 소유할수 있는 책으로 소유해야 한다. 도서관이나 공용책을 빌러서 보지 말라는 뜻이다. 필요할때 언제든지 볼수 있게 옆에 두고 봐야 한다(일반적으로 책을 좋아하는 사람들이 책을 사는 이유와 같다). 따라서 분책(책을 잘게 쪼개서 가지고 다니는 것)하지 마라. 분책은 여러가지로 안좋다 하지마라. 둘째, 읽고-따라하고-공유(말)해라. 공개 스터디나, 몇몇이 모여서 스터디해도 좋을것 같다. 셋째, 두번째까지 했다면 저자가 강조하는 것이 무엇이였는지 회상해 보자. 그리고 그런 강조가 어떤 의미가 있는지도 생각해 보자. 

나는 이책을 읽고 떠올릴수 있는 단어를 몇가지 적어보면, 'POJO, OOP, 학습테스트, 디자인패턴, 추상화, 확장포인트, AF, 아키텍처, @MVC, 철학, 공유' 등이다. 단어 하나 하나에 의미도 있겠지만, 전체적인 의미가 더욱 값진 것이였다. 이 책을 통해 배우고 느낀게 많다. 다른 많은 분도 이책을 통해 나와 같은 느낌을 공유할수 있으면 좋겠다. 나는 이책을 적극 권장한다.(책의 분량 대비 오탈자가 눈에 보이겠지만, 그것이 책이 주는 큰 의미를 희석시키진 못했다.)


저작자 표시
신고

'개발관련' 카테고리의 다른 글

Roo에서 list sorting  (0) 2011.02.22
Spring Roo 1.1.2 BUILD-SNAPSHOT 기념샷  (0) 2011.01.12
토비의스프링3 읽고나서...  (12) 2010.12.13
Jersey + XML 호출 예제 테스트  (0) 2010.12.13
Spring + Jersey + Dozer 예제  (0) 2010.12.10
SmartGWT stack_overflow  (0) 2010.10.07
posted by Max.
2010.12.10 20:09 개발관련
생각나는 김에 올린다. 요즘 정신없이 개발하고 있어서 하루가 금방이다. 거의 방치수준의 블로그를 이런식으로라도 유지하려는...;;; 아무튼, 제목 그대로 저 두개를 이용하여 객체를 반환하는 예제이다. 이것이 필요한 이유는, 웹서비스를 처리하는 그룹과 그것을 이용하는 그룹이 분리되어 있다면, 서로 다른 목적의 객체에 담기는게 유리하다. 그때 각각의 객체에 값을 이동할 필요가 있는데, 이렇게 복사해(매핑해) 주는 것이 Dozer다. 아래는 그 예제를 순서적으로 기록한 것이다.

1) Response 객체 (jersey 에서 사용)
@XmlType
@MappedSuperclass
@XmlRootElement(name="RESULT")
public class AccountResponse {
@XmlElement(name="RESULT_CODE")
private String resultCode;
@XmlElement(name="COUNT")
private int count;
@XmlElement(name="LINK_URL")
private String linkUrl;
...

2) DTO 객체
public class AccountResult {
private Long count;
private String linkUrl;
...

3) Dozer 매핑 설정
...
  <mapping map-id="ws_account"> 
    <class-a>kr.company.ws.model.AccountResponse</class-a>
    <class-b>kr.company.service.model.AccountResult</class-b>   
    <field custom-converter="kr.company.service.model.converter.IntToLongConverter">
      <a>count</a>
      <b>count</b>
    </field>
    <field>
      <a>linkUrl</a>
      <b>linkUrl</b>
    </field>
  </mapping> 
[Converter] 
public class IntToLongConverter implements CustomConverter {
@Override
public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass) {
Integer id = (Integer) sourceFieldValue;
return Long.valueOf(id);
}
}

4) Spring 설정
...
<bean id="dozerMapper" class="org.dozer.DozerBeanMapper">
   <property name="mappingFiles">
       <list>
           <value>META-INF/spring/dozer-bean-mappings.xml</value>
       </list>
   </property>
</bean>

4) 서비스 호출
public class AccountServiceProviderImpl ...
@Override
public AccountResult findAccount(Long id) {
AccountResponse accountResponse = accountWebService.findAccount(id);
return dozerMapper.map(accountResponse, AccountResult.class,"ws_account");
}
...

5) 테스트
    @Test
    public void 테스트(){
         ...

     AccountResult accountResult = accountServiceProvider.findAccount(account.getId());
     assertNotNull(accountResult);
    }

따로 설명없이 순서적으로 보면, 이해될수 있을 정도로 쉽다. Dozer를 몇년전에 시도 했을때는 설정이 복잡해 보였는데, 다시 해보니, 복잡하지도 않고 쓸만하다. 오히려 jersey설정이 더 복잡해 보인다. 그래도 jersey역시 쉽다.

저작자 표시
신고
posted by Max.
2010.08.04 10:29 개발관련

최근, 빌드를 하면,  로그에 새로운 Addon이  보인다.

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
...
[INFO] Spring Roo - Addon - Maven ............................ SUCCESS [0.764s]
[INFO] Spring Roo - Addon - JavaBean Information ............. SUCCESS [0.651s]
[INFO] Spring Roo - Addon - toString ......................... SUCCESS [0.921s]
[INFO] Spring Roo - Addon - JavaBean Method Manager .......... SUCCESS [0.669s]
[INFO] Spring Roo - Addon - Plural Details ................... SUCCESS [0.647s]
[INFO] Spring Roo - Addon - Property Files ................... SUCCESS [0.642s]
[INFO] Spring Roo - Addon - @Configurable Support ............ SUCCESS [0.639s]
[INFO] Spring Roo - Addon - Email ............................ SUCCESS [0.752s]
[INFO] Spring Roo - Addon - JPA .............................. SUCCESS [1.114s]
[INFO] Spring Roo - Addon - JMS .............................. SUCCESS [0.744s]
[INFO] Spring Roo - Addon - @RooSerializable Support ......... SUCCESS [0.656s]
[INFO] Spring Roo - Addon - Entity ........................... SUCCESS [0.868s]
[INFO] Spring Roo - Addon - Finder ........................... SUCCESS [0.862s]
[INFO] Spring Roo - Addon - Logging .......................... SUCCESS [0.739s]
[INFO] Spring Roo - Addon - Property Editor .................. SUCCESS [0.831s]
[INFO] Spring Roo - Addon - Test Data On Demand .............. SUCCESS [1.063s]
[INFO] Spring Roo - Addon - Automated Integration Testing .... SUCCESS [0.918s]
[INFO] Spring Roo - Addon - Backup ........................... SUCCESS [0.640s]
[INFO] Spring Roo - Addon - Web MVC Controller ............... SUCCESS [1.015s]
[INFO] Spring Roo - Addon - Web MVC JSP View ................. SUCCESS [1.322s]
[INFO] Spring Roo - Addon - Web MVC Embedded Extensions ...... SUCCESS [1.384s]

[INFO] Spring Roo - Addon - Spring Security .................. SUCCESS [0.873s]
[INFO] Spring Roo - Addon - Solr ............................. SUCCESS [1.119s]
[INFO] Spring Roo - Addon - Web - Flow ....................... SUCCESS [0.923s]
[INFO] Spring Roo - Addon - Web Selenium Test Generator ...... SUCCESS [0.891s]
[INFO] Spring Roo - Addon - Google Web Toolkit ............... SUCCESS [2.070s]
[INFO] Spring Roo - Addon - JDBC Driver Acquisition .......... SUCCESS [32.913s]
[INFO] Spring Roo - Addon - Database Reverse Engineering ..... SUCCESS [2.728s]
[INFO] Spring Roo - Addon - Creator .......................... SUCCESS [1.700s]
[INFO] Spring Roo - Annotations (ASLv2/GPLv3 Dual Licensed) .. SUCCESS [1:10.939s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 minutes 47 seconds
[INFO] Finished at: Wed Aug 04 08:56:47 KST 2010
[INFO] Final Memory: 78M/140M
[INFO] ------------------------------------------------------------------------

바로 Web MVC Embedded Extensions 이라는 addon인데, Spring Roo 1.1.0.M3 버전 부터 지원되는 기능이다.

무슨기능일까?

한마디로 외부 리소스를 연동하는 편리한 addon 명령어를 넣은 것이다.(이것이 의미하는 미래를 상상해보는 것도 재미 있을듯...) 현재 지원하는 리소스는 아래와 같다.


Video

  • YouTube
  • Google Video
  • Vimeo
  • Viddler
  • Screenr

Video Streaming

  • UStream
  • LiveStream

Photo Galleries

  • Flikr
  • Picasa

Documents

  • Google Presentations
  • Scribd
  • SlideShare
  • Google Maps
  • Google Wave
  • Twitter
  • Wikinvest

이런 리소스를 사용하게 해주는 명령은 아래와 같은데, 이중 generic은 자동으로 해당 리소스와 연결시켜 준다.

예를 들어 보자. 아래와 같은 평범한 Roo 스크립트를 실행하고, 웹에 띄우면?

project --topLevelPackage com.max.roo --projectName max-roo
web mvc embed generic --url http://twitter.com/#search?q=@heterosis
web mvc embed generic --url http://www.slideshare.net/yunsunghan/d-flexspring-blaze-ds-intergration

이런 화면이 나온다. (슬라이드쇼와 트윗터 슬라이딩이 잘된다.)


어떻게 작동할까?

소스 생성 로그를 보면 알수 있다. 안타갑게도, 관련 Java소스는 생성하지 않고, 입력 Param으로 구분만 한다. 해서, 생성되는 java코드는 없고, 해당 변수를 하드코딩하여 보여주는것이 전부다. 해서 로그도 간단하다.

com.max.roo roo> web mvc embed generic --url http://www.slideshare.net/yunsunghan/d-flexspring-blaze-ds-intergration
Created SRC_MAIN_WEBAPP\WEB-INF\tags\embed\document.tagx
Created SRC_MAIN_WEBAPP\WEB-INF\views\embed\slideshare.jspx
Managed SRC_MAIN_WEBAPP\WEB-INF\i18n\application.properties
Managed SRC_MAIN_WEBAPP\WEB-INF\views\menu.jspx
Managed SRC_MAIN_WEBAPP\WEB-INF\views\embed\views.xml
Managed SRC_MAIN_WEBAPP\WEB-INF\spring\webmvc-config.xml

소스를 보면 대충 이렇다.
...
<jsp:output omit-xml-declaration="yes"/>
...
        <embed:microblogging id="twitter_@heterosis" searchTerm="@heterosis"/>
        <embed:document documentId="dflexspringblazedsintergration-100507033946-phpapp01" provider="slideshare"/>

붉은색 테크가 그 역할을 수행한다. <embed> 테그의 정의는 tags 폴더에 있는데, 대충 각각의 리소스를 출력하기 위한 Html 테그들이 있다. 아래는 그중 일부를 발췌...

  <c:when test="${provider eq 'slideshare'}">
   <object id="__sse4735954" width="545" height="400">
    <param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=${documentId}" />
    <param name="allowFullScreen" value="true"/>
    <param name="allowScriptAccess" value="always"/>
    <embed name="__sse4735954" width="545" height="400" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=${documentId}" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"></embed>
   </object>
  </c:when>

그래서?

대략, Web MVC Embedded Extensions 이라는 addon이 이정도 기능을 한다. 사실 이런것들은 일반적인 SI나 솔루션하고는 거리가 먼 기능들인데, 이양반들이 이렇게 넣은 이유가 있을듯 하다. 구글과의 관계도 그렇고, 해외에서의 Social 바람도 그렇고, 메이븐 멀티 모듈 지원의 어려움도 그렇고... 구글과 스프링소스가 큰(?) 꿈을 꾸고 있는듯 하다.... (Roo는 솔루션이나, SI, IT서비스 업체를 위한 툴이 아니것 같다는...)
저작자 표시
신고
posted by Max.
2010.07.28 17:30 개발관련

STS가 더욱 다양한(또는 강력한) 여러가지 기능들을 담아가고 있고 STS에 좀 익숙해지면, Spring IDE Plugin으로 약소하게 사용하기엔 다소 이질적으로 느껴질것 같다. 특히 최근에 STS는 점점 더 많은 것들을 담아가고 있는데, Plugin의 약소한 기능으로는 그 개발 환경(또는 즐겨쓰는 패턴)에 익숙하지 않을수 있겠다는 생각이 든다.

결국, Spring STS에 익숙해져야만 하는 것 아닌가... 언제나 처럼 선택의 자유는 있지만, 좀더 나은 방법을 제시하는게 SpringSource의 전략이 아니던가... Spring이 그랬고, SpringMVC가 그랬다. SpringRoo도 Grails와 선택의 여지는 남겨두고 발전시키고 있다...

오늘 고전적인 Spring IDE를 Setting하며, 드는 생각을 간략히 적었...
저작자 표시
신고
posted by Max.
2010.07.20 12:10 개발관련
무척 기다렸던(사실 '얼마나 잘쓰나 두고보자'라는식도 약간 있었던 - 어떤걸 아는 것과 그것을 표현하는 것은 또다른 능력이니...-), 토비의 스프링3 라는 책이 나왔네요. 지금은 예약주문이 가능한 상태입니다. 토비 아저씨를 잘 모르는 분은 이책의 추천사를 읽어 보시고, '과연 살만한 책인가...' 고민하시는 분은 아래 저자 서문 중 일부를 발췌한 내용의 '저자의 고민'에 대해 읽어 보세요.


...(생략)... 책을 쓰는 동안 정확하고 완벽한 내용을 작성해야 한다는 부담 때문에 적지 않은 날을 썼던 내용을 지우고 다시 써가며 고민 속에서 지내기도 했다. 나는 책을 쓸 만한 실력이 없다는 좌절감에 포기하려고도 마음을 먹은 적도 있다. 하지만 그럴 때마다 이 책은 내 실력을 사람들에게 증명하고 뽐내려고 쓰는 것이 아니라 부족한 지식과 경험이라도 이를 나누면 누군가에게 도움이 될 수 있을 것이라는 작은 희망이 있기 때문에 쓰는 것이라는 생각으로 마음을 잡으면서 여기까지 올 수 있었다. 다른 것은 몰라도 이 책을 쓴 덕분에 내가 조금은 겸손해지지 않았을까 싶다. ...(생략)...
- 브리즈번에서 토비 이일민


무엇보다, 토비 아저씨 말씀이, 자바 초보자도 이해할수 있도록 쉽게 쓰여졌다고 하네요. 또한 블로그처럼, 읽는 재미가 쏠쏠하다고 하니, 이번 기회에 스프링 고수의 통찰을 느껴보는 것도 좋을듯 합니다.

워낙 추천사가 자극적(?)이여서, 기대치를 만족하기 힘들텐데, 얼마나 대단한 책인지, 책이 도착하는 대로 읽고, 중간에 소감문을 올리도록 하죠. 아무튼 이런 방대한 책이 한글로 나왔다는것 자체가 참 고무적인 일입니다. :)
저작자 표시
신고
posted by Max.
2010.06.14 14:27 개발관련
현재까지 가장 최신버전인 Spring Roo 1.1.0.0001를 기반으로 빌드하는 과정 기록.

1. Git 에서
Roo 소스 다운로드 하기
git clone git://git.springsource.org/roo/roo.git


2. GPG Key 생성하기
gpg --gen-key
gpg --list-secret-keys

ex)
-----------------------------------------------------
sec   1024D/8F0B35B1 2010-06-14
uid                  sunghan yun <yunsunghan@gmail.com>
ssb   1024g/2973172A 2010-06-14


3. Maven 빌드하기
mvn install


주의)
'Enhance Roo build to support wrapping arbitrary JARs as OSGi bundles'된 리비전에서는 빌드
에러가 발생함.
Older 버전에서는 에러를 피할수 있을 것임.

roo>git reset --hard
HEAD is now at 67fc22c ROO-977: Enhance Roo build to support wrapping arbitrary JARs as OSGi bundles


또, 언제 테스트해볼지 모르겠지만... 허망하네 -.,-;

[추가]
Wolfram이 오류내용을 확인해 주었다. warpping 프로젝트를 먼저 빌드한후 빌드하면 된단다. 왜 그런지는 여기 Wolfram 댓글 참조할 것.(Readme.txt 파일에 'OSGI WRAPPING JARS' 항목에 설명이 추가 되어 있다)

더보기


저작자 표시
신고
posted by Max.
2010.02.18 11:07 개발관련

Spring Framework
- 왜 Tiles를 선택했고, 지속적으로 Support 하는 것일까, 최근에도 새로운 버전을 위해, 여러가지를 추가 및 수정하는 것 같은데, 타일즈 쓰는 사람이 많은 걸까.(SPR-#2949 )
- GAE를 위해서 PersistenceAnnotationBeanPostProcessor를 특별히 만든것인가? GAE가 이제는 좀 쓸만해 졌나보다.(SPR-#2954)
- <spring:eval> 테그는 뭣에 쓰는 물건인지, 도날드가 스팸을 뿌리고 있다. 혹시 자바스크립트 eval()과 비슷한 기능? (SPR-#2956)
- 막 달리더니, 3.0.1이 릴리즈 준비가 되었다.(SPR-#3003)

Spring Web Service
- Spring Web Services 모듈과 Spring OXM 모듈이 분리되어 의존성을 가지기 위해, 관련 모듈들이 정리되고 있다.(SWS-#1515)
- SWS는 테스트를 많이 한다. 테스트 스팸 리비전이 많다.(SWS-#1536)

Spring Batch / Batch Admin
- Spring 3.0.1에 맞게 Spring Batch 2.1.0도 릴리즈 준비 중이다.(BATCH-#3997)
- Spring Batch Admin, 아직 별 볼일 없다.(BATCHADM-#135)

Spring Actionscript
- 드디어 1.0을 위한 베타 버전으로 바뀌었다. 감축한다.(SESPRINGACTIONSCRIPTAS-#1064)
- MVC 예제가 완료 되었단다.(SESPRINGACTIONSCRIPTAS-#1022)
- EventBus Doc 작업 시작했다. 이제 이벤트 기반의 개발을 더이상 미뤄선 안되는 것인가? (SESPRINGACTIONSCRIPTAS-#1079)
  [EventHandler(class="com.classes.events.MyEventClass")]

나머지 관심있는 모듈은 지리멸렬하다.


저작자 표시
신고

'개발관련' 카테고리의 다른 글

수식 표현 도구  (1) 2010.02.19
유전-재생산  (0) 2010.02.18
2010-02-18, Spring 잡생각  (0) 2010.02.18
무료 논문 검색 사이트  (2) 2010.02.16
Spring Surf 빌드 테스트  (0) 2010.02.16
만드는 놈, 쫓아가는 놈, 끌려가는 놈, 포기하는 놈  (2) 2010.02.16
posted by Max.
TAG Spring

티스토리 툴바