블로그 이미지
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
31            

Notice

2011.04.11 17:24 개발관련

Spring STS 2.6.0에서 Flex addon 모듈을 사용하는 순서를 기록해 본다. 일반적으로 SpringRoo addon은 addon install 명령으로 가능하다. 그에 대해 동영상도 많이 제공하고 있다.

flex addon 관련되서는 http://www.youtube.com/watch?v=R84O87HPCQU&feature=player_embedded 를 보면, 쉽게 따라할수 있게 되어 있다. 하지만 하루가 다르게 바뀌는 roo의 특성상 잘 되지 안는다는거... 아마도 버전이 업데이트 되면서 여기저기 신경 쓸께 많을 것이다. 그래서 한번 테스트 해봤다. 

1) 먼저 springroo flex addon을 roo에 설치 해야 한다. http://s3browse.springsource.com/browse/maven.springframework.org/snapshot/org/springframework/flex/roo/addon/org.springframework.flex.roo.addon/1.0.0.BUILD-SNAPSHOT/ 에(OR http://s3browse.springsource.com/browse/maven.springframework.org/snapshot/org/springframework/flex/roo/addon/)  보면, 4월 10일자 최신 버전을 다운 받을수 있다. 다운받고, roo의 bundle 폴더에 넣는다.

2) Spring STS를 실행하고, Roo프로젝트를 생성하면, flex 명령이 추가되었음을 확인 할수있다.

3) Roo 스크립트는 다음과 같은 순서로 명령을 실행한다.
project --topLevelPackage kr.sng --projectName sng-server --java 6
persistence setup --database MYSQL --provider HIBERNATE
entity --class ~.article.domain.Article --testAutomatically
flex setup
flex remoting all --package ~.article.service
생성된 핵심 코드는 아래와 같다.

[ArticleService.java]
@RooFlexScaffold(entity = Article.class)
@RemotingDestination
@Service
public class ArticleService {
}

[ArticleService_Roo_Service.aj]
privileged aspect ArticleService_Roo_Service {
   
    public Article ArticleService.create(Article article) {
        article.persist();
        return article;
    }
   
    public Article ArticleService.show(Long id) {
        if (id == null) throw new IllegalArgumentException("An Identifier is required");
        return Article.findArticle(id);
    }
   
    public List<Article> ArticleService.list() {
        return Article.findAllArticles();
    }
   
    public List<Article> ArticleService.listPaged(Integer page, Integer size) {
        if (page != null || size != null) {
            int sizeNo = size == null ? 10 : size.intValue();
            return Article.findArticleEntries(page == null ? 0 : (page.intValue() - 1) * sizeNo, sizeNo);
        } else {
            return list();
        }
    }
   
    public Article ArticleService.update(Article article) {
        if (article == null) throw new IllegalArgumentException("A article is required");
        article.merge();
        return article;
    }
   
    public void ArticleService.remove(Long id) {
        if (id == null) throw new IllegalArgumentException("An Identifier is required");
        Article.findArticle(id).remove();
    }
   
}

4) 생성된 mxml 코드는 정상적으로 실행되지 않는다. 하지만, 생성된 mxml코드를 참조해서 아래와 깉이 flex builder를 통해서 Main.mxml 파일을 생성 할수 있다.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
 <fx:Script>
  <![CDATA[
   protected function getDataClickHandler(event:MouseEvent):void
   { 
    articleService.list();
   }
  ]]>
 </fx:Script> 
 <fx:Declarations>
  <s:ArrayList id="entities">
   <fx:String>Article</fx:String>
  </s:ArrayList>
  <s:ChannelSet id="remotingChannels">
   <s:AMFChannel id="amf" url="http://localhost:8080/sng-server/messagebroker/amf"/
  </s:ChannelSet>
  <s:RemoteObject channelSet="{remotingChannels}" destination="articleService" id="articleService">
  </s:RemoteObject> 
 </fx:Declarations>
 <s:VGroup width="100%" height="100%">
  <s:Button label="아티클 목록 가져오기" click="getDataClickHandler(event)"/>
  <mx:DataGrid dataProvider="{articleService.list.lastResult}" height="80%" id="articleGrid" width="80%">
   <mx:columns>
    <mx:DataGridColumn dataField="title" headerText="Title" id="titleColumn"/>
    <mx:DataGridColumn dataField="count" headerText="Count" id="countColumn"/>
    <mx:DataGridColumn dataField="userName" headerText="User Name" id="userNameColumn"/>
    <mx:DataGridColumn dataField="userId" headerText="User Id" id="userIdColumn"/>
    <mx:DataGridColumn dataField="writeDate" headerText="Write Date" id="writeDateColumn"/>
   </mx:columns>
  </mx:DataGrid>
 </s:VGroup>
</s:Application>


간단한 코드로 대충 보면, 데이터를 불려오는 것 뿐이다. 실행하면 데이터를 잘 가져온다. 물론 SpringFlex에 대해서 미리 알고 있어야 하고, Flex에 대해서도 알고 있어야 겠지만, 천천히 생성된 소스코드와 구조를 살펴보면, 기존의 spring-flex를 이용한 프로젝트 구조와 거의 같고, Flex Scaffold는 오히려 기존의 복잡한 UI(다른 Scaffold)보다 간단하여 응용의 여지가 많이 보인다.(예제에서 ArticleService.java와 ArticleService_Roo_Service.aj를 보라)

최근 작업중에 서버측 템플릿을 만들 일이 있어 간단히 테스트해 봤는데, 가능성 있어 보인다. 게다가 아직 M1 버전이다. :)

저작자 표시
신고
posted by Max.