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

'Sping'에 해당되는 글 1

  1. 2010.08.10 Spring Roo(1.1.0.M1) 에서 addon 맛보기
2010.08.10 10:09 개발관련
현재(2010-08-09) Spring Roo는 1.1.0.M3 [rev edaeb84] 버전이지만, addon Command 부분에 약간의 문제가 있다. 심지여 Window O/S 에서는 빌드도 정상적으로 안된다. 아무튼, 이런 난관에도 불구하고, 구버전(M1)에서 테스트 해보았다. 과거 addon 개발처럼, 무식하게(spring-roo-addon-facade 만들기), 프로젝트 생성해서, 직접 멘땅에 소스코드를 작성하는게 아니라, --template 옵션을 사용한 Roo 프로젝트로 작성할수 있다.( M2에서는 이부분을 분리하여, addon 이라는 Command를 새로 추가 했다, 실은 그것을 테스트 해보려고 했던 것인데...)

순서는 간단하다. 먼서 addon프로젝트를 생성하고 작성한 다음, 빌드하고, 생성된 jar를 사용하는 Roo 셀의 bundle 디렉토리에 넣고(왜 bundel일까? 그것은 roo에서 felix를 쓰고 있는 것과 관련이 있다. 실제 생성된 소스코드는 모두 felix 어노테이션으로 묶여져 있다), Roo 재시작 하면, addon을 사용할수 있다. 여기서 테스트할 예제는 첫번째이니, 1)기본예제 그대로 빌드해서 2)Roo 프로젝트에서 사용할수 있는지만 보자.



1)Spring Roo Addon 기본예제 빌드하기 

Roo 셀을 띄운 다음, 아래와 같이 프로젝트를 생성하고, 바로 빌드 한다. 아무것도 하지 않아도, ROO_ADDON_SIMPLE 예제엔 text 파일 생성 스크립트가 들어 있다.
project --topLevelPackage net.max.hello.roo.addon --projectName net.max.hello.roo.addon --template ROO_ADDON_SIMPLE

(다시한번, M3에서는 'addon create simple --topLevelPackage net.max.hello.roo.addon --description some word' 형식을 취한다)
 
이렇게 해서 생성된 소스코드는 아래와 같다.(기타 설정파일은 제외)
Commands.java - Shell 명령을 받아 처리 하는 부분
Operations.java - Interface
OperationsImpl.java - Commands로 부터 실제 처리할 명령어를 구현해 놓은 부분
ProertyName.java - addon 목적을 구현한 traget 클래스
이것 설명이 좀 어렵겠다 싶어서, 인터넷에 떠도는 자료를 참고 하면 아래 그림처럼 생각하면 되겠다.

Commands.java 소스코드를 보면, @CliAvailabilityIndicator 와 @CliCommand이 나오는데, 해석하는데 어렵지 않다, 각각 사용할수 있는 명령과 사용하는 명령을 나타내는데, 차후 천천히 보면 된다. 여기서는 이런 일련의 작업들이 쉽게 이해하라고, Ben Alex라는 아저씨가 예제를 만들어 줬으니 그냥 구경하고 빌드해 보자.

빌드는 mvn install 하면 된다. 이것 역시 maven 프로젝트는 별다를게 없다. 빌드하면, jar파일이 target 폴더에 생성되는데, 그걸 Roo의 셀에서 인식할수 있도록 bundle 폴더에 복사해서 붙여넣기 하면 이걸로 끝이다. 이제 Roo 셀에서 해당 명령을 볼수 있다. 그럼 이제, 새 Roo 프로젝트로 정말로 되는지 보자.



2) Roo 프로젝트에서 실행하기

일반적인 Roo 프로젝트 처럼 스트립트를 실행하고, 위에서 만든 Command를 실행한다. 위의 명령은 'welcome' 으로 시작되는 명령으로 3가지 옵션이 있다. 각각 실행해 보면, 본 프로젝트에 hello.txt와  hej.txt 파일이 생성된다.(아마도 나중에 쓸모있는 addon이 되려면, 이런 생성파일들이 java,xml,jsp 등의 파일 확장자를 가질 테지...) 내가 테스트한 스크립트는 아래와 같다.

project --topLevelPackage net.max.hello --projectName test-hello 
persistence setup --database HYPERSONIC_IN_MEMORY --provider HIBERNATE 
entity --class ~.doamin.Account 
field string --fieldName name
field string --fieldName email
welcome write hello
welcome property --name HOME_DIRECTORY 
welcome property --name USERNAME 
welcome write hej
controller all --package ~.web

'welcome write' 는 txt파일 생성 예제이고, 'welcome property'는 그냥 System 변수를 출력하는 예제이다. 이렇게 간단히 addon을 만들어 target프로젝트에 적용할수 있다. 

이번 기본 제공 예제에는 Metadata 구현 클래스가 없지만, 그것으로 Roo Entity Metadata인 '@RooJavaBean, @RooToString, @RooEntity' 같은 편리한 어노테이션도 만들수 있다. 다음엔 Metadata를 이용한 예제에 도전해 보자.

추가1) 
STS에 포함된 Spring Roo M2로 빌드도 가능한데, 달라진 부분은 addon명령으로 생성하는것과, 각 Commands, Operations에 도메인 마지막 패키지명이 붙는것(HelloCommands.java 같은) 이외에 OSGi 설정파일이 추가된것 뿐이다.

추가2) 
혹시나 해서, 오늘(2010-08-10) 다시 M3 빌드해 보니 에러없이 빌드만 잘된다(jline문제). 리비전도  1.1.0.M3 [rev 476ec5f] 으로 바뀌었다. 그러나 여전히 addon 명령은 안된다. 적어도 윈도우에선... Cygwin 에서도 안된다. 아마 정식 M3 공개 전까진 계속될듯 하다. 오류메시지는 아래와 같은데, 대략 짐작이 간다. *nix를 좋아하는... 

더보기


저작자 표시
신고
posted by Max.
prev 1 next

티스토리 툴바