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

2009.10.06 09:20 개발관련
RC2가 생각보다 빨리 발표 되었네요. 좀 성급하다할 정도로 말이죠. 지금도 지속적으로 업데이트 되고 있는데, 좀 산만해 보입니다. 이렇게 서두르는 것은 가을 세미나 때문일까요? 아무튼, 버그 픽스 되자 마자 RC2를 바로 발표해버리는 것이 뭔가 쫏기고 있는듯한 인상을 줍니다. 아래는 RC2 발표 되기전인 Revision 319 버전일때 RC1과 RC2의 비교 테스트한 내용들 입니다.


1. 프로젝트 생성하기
Befer 이하 [B]
create project -topLevelPackage kr.js.sms -projectName max

After 이하 [A]
project --topLevelPackage kr.js.sms --projectName max --java 6

create명령 대신에 project명령으로 바뀌고, 옵션도 --로 바뀌었다. 새로 축된 --java 옵션도 있다. 위명령으로 생성되는 기본 디렉토리엔 WEBAPP가 포함되어 있어서 이젠 기본적으로 웹프로젝트를 염두해 두고 있다는것이 의외다.

2. 로깅 설정하기
[B]
configure logging -level DEBUG -package WEB

[A]
logging setup --level DEBUG --package ALL_SPRING

기존의 configure명령이 없어지고 logging명령으로 바뀌었다. --package옵션으로는 더 다양한 값들은 제공하고 있다.(ALL_SPRING, AOP, PERSISTENCE,  PROJECT,  ROOT,  SECURITY, TRANSACTIONS, WEB)

3. ORM 설정하기
[B]
install jpa -provider HIBERNATE -database ORACLE

[A]
persistence setup --database ORACLE --provider HIBERNATE

install명령이 제거 되었고, persistence명령이 추가 되었다. database.properties 핸들링 명령도 약간 바뀌었는데 아래와 같다.
[B]
database set -key database.url -value jdbc:oracle:thin:@127.0.0.1:1521:XE
database set -key database.username -value max
database set -key database.password -value 1111

[A]
database properties set --key database.url --value jdbc:oracle:thin:@127.0.0.1:1521:XE
database properties set --key database.username --value max
database properties set --key database.password --value 1111


4. Domain Entity 추가하기
[B]
new persistent class jpa -name ~.domain.Account

[A]
entity --name ~.domain.Account --table t_account

new persistent class jpa라는 명령에서 entity로 바뀌었다. 훨씬 깔끔해 졌다. --table같은 옵션도 추가 되었고, 기타 추상(abstract),확장(extends) 같은 명령 등이 포함되었다. 특히 --identifierColum 과 --identifierField이 추가 되었는데 무슨 차이일까~요?

5. Entity field 추가하기
[B]
add field string -class ~.domain.Account -fieldName accountId -notNull -sizeMin 2 -sizeMax 20
add field number -class ~.domain.Account -fieldName totalPoint -type java.lang.Long -decimalMin 0
add field date jpa -class ~.domain.Account -fieldName regDate -type java.util.Date

[A]
field string --class ~.domain.Account --fieldName accountId --notNull --sizeMin 2 --sizeMax 20
field number --class ~.domain.Account --fieldName totalPoint --type java.lang.Long --decimalMin 0
field date --class ~.domain.Account --fieldName regDate --type java.util.Date

기존에 add field명령으로 시작 되었던것들이 모두 field명령으로 바뀌었지만, 특별히 달라진건 없다.

6. Integration Test 하기
[B]
new integration test -entity ~.domain.Code

[A]
test integration --entity ~.domain.Code

테스트 관련되어서 보다 직관적이게 test명령으로 시작하게 바뀌었다. 새로 추가된것은 'test mock' 명령이다.

7. 관계 설정하기
[B]
add field set jpa -class ~.domain.Account -fieldName points -element ~.domain.Point
add field reference jpa -class ~.domain.Point -fieldName account -type ~.domain.Account

[A]
field set --class ~.domain.Account --fieldName points --element ~.domain.Point
field reference --class ~.domain.Point --fieldName account --type ~.domain.Account

add로 시작되는 명령 대신에 field로 시작되고, 서너개의 구분 명령을 2개의 구분 명령으로 단순화 하였다.

8. Controller 추가하기
[B]
new controller automatic -name ~.web.AccountController -formBackingObject ~.domain.Account

[A]
controller scaffold --name ~web.AccountController --entity ~.domain.Account --dateFormat yyyy-MM-dd

기존의 명령이 controller scaffold으로 변경되여 무엇이 생성될지 좀더 직관적이게 네이밍되었다. 옵션으로 --dateFormat이 추가 되었고, 모든 컨트롤러를 생성하기 위한 'controller all' 명령이 새로 추가 되었다.

9. 통합된 Maven 명령 사용하기
perform clean     perform command   perform eclipse   perform package   perform tests
Roo shell 안에서 위와 같은 Maven wrapper클래스를 제공한다.(Rev. 319 버젼에서는 잘 안된다. roo shell 밖에서는 잘됨.)

10. 기타 바뀐 명령들
[B]
new selenium test -controller ~.web.AccountController

[A]
selenium test --controller kr.js.sms.web.AccountController

[B]
list finders for -class ~.domain.Account

[A]
finder list --class ~.domain.Account


[B]
install finder -finderName findAccountsByAccountName -class ~.domain.Account

[A]
finder add --finderName findAccountsByAccountIdLike --class ~.domain.Account


[B]
install security

[A]
security setup


[B]
install email provider -hostServer localhost -protocol SMTP -port 25

[A]
email sender setup --hostServer localhost --protocol SMTP --port 25


11. ITDs 파일의 변화.
319 리비젼의 백미는 ITDs로 생성된 *.aj파일들이다. 말이 필요없다. 아래 생성된 파일을 보라. 이것이 주는 의미는 상당하다. 무엇이 상당하다는 걸 까~요?

[B]
privileged
aspect Article_Roo_Entity {
   
    @javax.persistence.PersistenceContext   
   
transient javax.persistence.EntityManager Article.entityManager;   
   
    @javax.persistence.Id   
   
@javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)   
    @javax.persistence.Column(name = "id")   
   
private java.lang.Long Article.id;   
   
    @javax.persistence.Version   
   
@javax.persistence.Column(name = "version")   
   
private java.lang.Integer Article.version;   
   
    public java.lang.Long Article.getId() {   
        return this.id;       
    }
...



[A]
privileged
aspect Account_Roo_Entity {
   
    @PersistenceContext   
   
transient EntityManager Account.entityManager;   
   
    @Id   
   
@GeneratedValue(strategy = GenerationType.AUTO)   
    @Column(name = "id")   
   
private Long Account.id;   
   
    @Version   
   
@Column(name = "version")   
   
private Integer Account.version;   
   
    public Long Account.getId() {   
        return this.id;       
    }
...

저작자 표시
신고
posted by Max.
TAG ROO, Spring
2009.10.05 15:36 개발관련


controller all --package ~.web
Revision 300 이상을 받아서 보면, 위와같은 명령으로 생성된 Entity의 모든 Controller를 자동으로 생성하여 타이핑 수를 줄여준다. 굳이 꼭 모든것을 생성할 필요가 있겠냐만은 이러한 기능도 있다는걸 기억하자. (
http://jira.springframework.org/browse/ROO-236)


ITDs 로 생성된파일의 표현법이 바뀌었다.
이전 : private java.lang.Integer Pizza.version;
이후 : private Integer Pizza.version;
앞에 거추장스러운것들이 사라졌다. 해당 버전을 다운받아 실행해보는것이 필수다. 거의 봉사 눈뜨는 겪이다.(http://jira.springframework.org/browse/ROO-177)


Maven명령 일부가 Roo shell에서도 가능하다.
추가된 Maven 명령 예는 아래와 같다.
perform clean = mvn eclipse:clean clean
perform eclipse = mvn eclipse:clean eclipse:eclipse
perform package = mvn package
perform tests = mvn test
이게 필요하다 싶으면서도, 굳이 포함할 필요가 있을까 하는 의문도 생긴다. (http://jira.springframework.org/browse/ROO-201)


ORM fetch 옵션이 추가 되었다.
이부분의 지원이 미약 했는데 좋은 소식이다. 예제는 아래와 같다.
field reference --class ~.domain.Pet --fieldName owner --type ~.domain.Owner --fetch EAGER
field set --class ~.domain.Owner --fieldName pets --element ~.domain.Pet --mappedBy owner --notNull false --cardinality ONE_TO_MANY --fetch LAZY
field set --class ~.domain.Vet --fieldName specialties --element ~.reference.Specialty --cardinality MANY_TO_MANY --notNull false --fetch EAGER
Entity 설정이 복잡할때, 모든걸 Roo Shell에서 다 설정할수 있게 하는것이 좋은건지는 모르겠다. 이런식으로 하나둘 추가되면, 은근히 기대할련지도 모르겠다.


추석 다녀온후 약간(?)의 변화가 생겨나고 있다. 기존의 Roo명령(RC1)과도 많이 달라졌다.(여기 저기 정리되어지는 느낌이 든다고나 할까) GA 나오기까지 여러가지도 변화될것이 틀림없다. Reference 문서도 작업을 해야 할텐데, 고작(?) 그 두사람이 과연 얼마나 할수 있을까 하는 의문도 든다. 작업 시간때를 보더라도 Alex 같은 경우 오전 정식 근무시간 전이나, 오후에만 작업하고, Stefan은 말 그대로 짬나는 시간마다 하는 것 같다.(오전 근무 시간전, 점심때, 그리고 오후 짬짬이 커밋하고 있다.) 뭐 이런식으로 해도 잘되어간다는게 신기하기만 하다.

저작자 표시
신고
posted by Max.
TAG ROO, Spring
2009.09.29 09:03 개발관련

그동안, 날짜형식이 맞지 않아서, 자동 생성된 *Controller_Roo_Controller.aj와 관련된 모든 CRUD *.jsp파일을 MMM d, yyyy에서 yyyy-MM-dd로 바꿔줘야 했다. 도메인 객체 수가 조금만 들어도 수정해야 할 파일의 숫자는 상당하다.


만약, 다시 Roo 스크립트를 추가하려면, 기존에 수정한 내용은 모두 되돌아 간다. automaticallyMaintainView = false로 하더라도, *.aj파일은 어쩔수 없다. 해당 날짜표시 문화권의 사람들이 아니면, 선택의 여지가 없는 번거러움이 발생했는데, 어제부로 이런 불편한 것이 제거 되었다.


바로 새로운 옵션인, -dateFormat 이 추가되 었기 때문이다. new controller automatic 명령에서 옵션으로 추가할수 있고, 이미 생성된 Controller에서 @RooWebScaffold의 속성으로 추가 할수 있다.

이것은 최근에 순전히 내가 불편해서 요청을 했는데, 정말 빠르게 반영시켜 주었다. 다른 이슈보다 수정되어야 할 파일들이 비교적 많은 작업이였는데, 작업해준것이 고마울 따름이다. 최근 포럼에서 Roo에 대한 불만이 나오면서, 해당 개발자들이 바빠르게 움직이는것 같다. 주말 사이에 많은 이슈 내용이 업데이트 되었다.


아래는 dateFormat 내용에 대한 스테판(Stefan)의 커밋 내용이다.

ROO-210: Dateformat conversion for free... as yyyy-MM-dd

Added a new dateFormat parameter to the @WebScaffold annotation. This allows you to define the date format on a per-controller basis and is reflected in the initbinder method of the controller itself as well as its related view artifacts (JSPs and Dojo artifacts).

The automatic controller command reflects this with the new (optional) -dateFormat flag:

new controller automatic -name ~.web.OwnerController -formBackingObject ~.domain.Owner -dateFormat dd-MM-yyyy

-------------------------------
M : /trunk/addon-web-mvc-controller/src/main/java/org/springframework/roo/addon/web/mvc/controller/ControllerCommands.java 
M : /trunk/addon-web-mvc-controller/src/main/java/org/springframework/roo/addon/web/mvc/controller/ControllerOperations.java 
M : /trunk/addon-web-mvc-controller/src/main/java/org/springframework/roo/addon/web/mvc/controller/RooWebScaffold.java 
M : /trunk/addon-web-mvc-controller/src/main/java/org/springframework/roo/addon/web/mvc/controller/WebScaffoldAnnotationValues.java 
M : /trunk/addon-web-mvc-controller/src/main/java/org/springframework/roo/addon/web/mvc/controller/WebScaffoldMetadata.java 
M : /trunk/addon-web-mvc-jsp/src/main/java/org/springframework/roo/addon/mvc/jsp/DojoUtils.java 
M : /trunk/addon-web-mvc-jsp/src/main/java/org/springframework/roo/addon/mvc/jsp/JspDocumentHelper.java 
M : /trunk/addon-web-selenium/src/main/java/org/springframework/roo/addon/web/selenium/SeleniumOperations.java 



이것이 스프링 커뮤니티의 위력인가? 제안한 내용이 바로 적용되어 버렸다. 최신버전으로 빌드하면, 해당 기능을 확인 할수 있다.
@RooWebScaffold(path = "account", automaticallyMaintainView = true, formBackingObject = Account.class, dateFormat = "yyyy-MM-dd")
@RequestMapping("/account/**")
@Controller
public class AccountController {
}

해당 코드를 돌려보고 확인했다. 잘된다.

- 관련된 포럼 해당 글은 http://forum.springsource.org/showthread.php?t=77825 이다.
- 관련된 JIRA 해당 글은 http://jira.springframework.org/browse/ROO-210 이다.
저작자 표시
신고
posted by Max.
2009.09.28 13:53 개발관련

보다 자세한 내용은 저장소의 readme.txt파일에 있다. 기본적인 테스트 환경은 JDK1.6 + maven 2.0.9 + svn + window vista 환경이다.

Roo를 다운로드할, 특정 디렉토리에서 SVN명령을 아래와 같이 실행한다.

다음으로, 윈도우 환경설정에서 아래와 같은 시스템 변수를 추가한다.
MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=512m"
ROO_CLASSPATH_FILE="{사용자경로}\trunk\bootstrap\target\roo_classpath.txt"

Dos 커멘더에서 SVN으로 받은 폴더의 trunk로 이동후 아래와 같은 Maven 명령을 실행힌다.
mvn clean install site assembly:assembly
(가끔 컴파일시, PDF 생성에서 자바 outOfMemory가 나올수 있다.)

실행후 target폴더에 해당 버전의 zip파일이 생성되어 있다.
ex) org.springframework.roo.parent-1.0.0.RC2.zip

특정한 디렉토리에 압축을 풀고, 환경변수(ROO_HOME,PATH)에 추가하여 roo.bat를 실행하면 된다. 개발모드 실행은, 환경변수(PATH)에 "{사용자경로}\trunk\bootstrap"  추가하여 roo-dev.bat를 실행하면, 개발모드로 실행할수 있다. 주의할것은 위의 roo.bat와 roo-dev.bat는 각각 다른 roo실행파일을 참조하고 있다는것다.

화면은, ROO1.0.0.RC2의 개발 버전인, 2009-09-27 오전11:33:29 에 커밋된, Revision #274 버전이다.


저작자 표시
신고
posted by Max.
2009.09.09 18:30 개발관련


1. 리소스 메시지를 하나 찍기 위해 <spring:message code="${rsvp.email}"/> 같은 많은 양의 코딩을 해야 한다 이런 하드코딩을 개선할 생각이 없는가? 이미 관련해서 가능한 개선을 했고, trunk에서 checkout 받아서 테스트 하면, 잘 된다는것을 확인할수 있단다.

2. Roo UI를 구성하는 jsp 화면을 보면, 아주 simple하게 구성되어 있는데, 이를 좀더 편리하고 실제 프로젝트에서 쓸만한 다양한 검색이나 Order 기능을 포함한 풍부한 UI를 제공하길 바라는 글이 올라왔다. (마치 Appfuse처럼) 질문자의 첨부된 파일을 보면, 혹 할정도 인데, 개발진에서 코멘트가 없는걸 보니, 아직 그것까지 신경쓸 여력이 없는것 같다.

3. DAO,Service, Facade 같은 addon을 후속으로 제공할 것인가에 대한 물음에 Stefan의 대답은 이것이다.

At the moment Roo generated applications do not generate a traditional repository or service layer, but instead encourage a rich domain layer. The data access is fully included in the domain layer without actually showing up in the Java sources. It is, instead, handled by introduced code (ie Roo_Entity aspects). Since most JPA-managed repositories we see today do actually not add much value we believe Roo's approach can offer the same without the need for this extra layer. Keep in mind that Roo allows you to customize your data access as you wish.

As for the services layer, it is really hard to figure out what you want to do in there. Roo allows you to create simple java classes to get you started. Roo cannot determine which methods for business logic that is not included in your rich domain layer you need in the services layer. Again, we don't much value in a services layer which acts as a simple facade that just hides a repository by mapping its methods 1:1. So long story short, Roo does not prevent you from creating your own services layer when needed but this cannot be generated by Roo as this layer would typically contain application specific business logic.

컨설턴트 집단이라 그런지, 말과 글이 구렁이 담넘어간다.

4. Web 프로젝트로 인식 시킬려면, 적어도 하나이상의 Controller 명령을 내려야만 한다. 이거 이해가 안된다 라고 Roo 골수팬인 Raul이 말하자. Stefan은 이미 알고 있지만, 이슈로 등록해 주길 바란다고 한다. 그런데 가만히 보면, 이사람들도 개발자다 보니, 이슈를 고객으로 부터 나오는것을 선호(?) 또는 의도(?) 하는것 같다. 사업주에게 보여지는 부분을 신경쓰는것 같다.

5. @RequestMapping 이 모두 ITDs로 설정되기 때문에, URL을 개발자가 마음대로 설정할수 없다.(ROO-183)라는 이슈에 대해, @RooWebScaffold에 -path 라는 속성을 추가 해서 변경 가능하도록 업데이트 했다. 2009-09-08일자 Stefan이 한 짓이다.

신고
posted by Max.
TAG ROO, Spring
2009.09.07 08:46 개발관련

사실 SpringOneEurope에서 'Extreme Productivity in Application Development with Roo' 섹션을 보고 거의 매일 같이 관련 PPT가 공유될까 모니터링하고 있었는데, 안나오더라구요. 거의 포기 했었죠. 그런데 오늘아침 이게 문서와 함께 동영상이 인포큐에 공유 되었군요.
멋진 소식입니다. 감상해 보시죠. ^^*


SpringOne Europe 2009 Session: Ben Alex
InfoQ continues to publish fantastic content from SpringOne Europe 2009. In this technical presentation, Ben Alex talks about extreme productivity in application development using the new Spring Roo project. The recorded presentation is from April of this year and Roo has progressed significantly since and is now at release candidate stage. Be sure to check out Ben's blog posts describing Roo: Fantastic presentations like this will be happening again, October 19-22nd, in New Orleans at SpringOne 2GX 2009. Be sure to register now!


신고

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

감성 에너지 고갈  (0) 2009.09.10
Spring Roo 잡소식(2)  (2) 2009.09.09
SpringOne Europe 2009에서 발표된 Spring Roo 섹션영상 공개됨  (0) 2009.09.07
Roo를 바라보는 시선  (0) 2009.09.05
몇 안남은 옛날 개발자  (4) 2009.09.04
Roo addon-web-mvc-jsp  (0) 2009.09.02
posted by Max.
2009.09.05 00:30 개발관련

소스 생성 툴적인 기능이 강합니다. ITDs라는 그동안 관심이 별로 없던 기술이 등장하면서, 그 임팩트가 크고, Roo를 소스 생성 툴로 보는 경향이 제일 강한듯 합니다. 그래서, 새로운 프로젝트를 자주 자주 하지 않는 팀에서는 별로 관심을 보이지 않는것 같습니다. 완전히 새로 구성된 제너레이터와 소스구성(생소한 개념의)으로 한두번 돌려보고, 아직은 아니다 라는생각을 하겠지요.

DDD를 구현한 이상적인 프레임워크로 보는 것도 강합니다. 말 그대로 '이상적인'것이라, 현장에 쓰기엔 자도 거리가 있어 보이는 거겠죠. 개념도 생소하고, 생성된 코드도 맹맹합니다. 도대체 현장에서 쓸수 있는거라곤 찾아보기 힘들다라고 생각하실테지요.

도메인 생성 도구로서의 Roo로 본다면 어떨까 하는 생각이 들었습니다. 프로젝트 전체를 Roo로 하지 않고 부분만 적용하는 거지요. 그 부분이 실용적인 부분만 때어내는 거지요. 그럼 소스코드에 큰변화없이 특정 지역만 편리하게 생성하고 관리되어진다면, 실무에도 적용이 가능하지 않을까요? 이것은 과거 Spring의 점진적인 적용 전술과 흡사 합니다.

한방에, 단번에 모두 적용하기는 힘들겠지요. 아직 정식버전도 안나왔는데, 적어도 2.0 이상은 되어야 하는 생각도 들구요. 어쩌면, 앞으로 2~3년 이상 더 걸리수도 있겠지요. Spring이 처음에 그랬던것처럼...


신고

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

Spring Roo 잡소식(2)  (2) 2009.09.09
SpringOne Europe 2009에서 발표된 Spring Roo 섹션영상 공개됨  (0) 2009.09.07
Roo를 바라보는 시선  (0) 2009.09.05
몇 안남은 옛날 개발자  (4) 2009.09.04
Roo addon-web-mvc-jsp  (0) 2009.09.02
쉬운것 과 어려운것  (5) 2009.08.27
posted by Max.
TAG ROO, Spring
2009.09.02 14:40 개발관련

한동안 Roo 개발이 뜸 했었습니다. 9/1일자로 다시 시작되고 있는데, 최근에 개발되고 있는 addon 모듈이 바로 web-mvc 입니다. 과거 제가 Roo UI는 구리다 라고 했는데, addon-web-mvc에서는 layout을 tiles로 바꾸고, css와 Dojo-dijit 테마, i18n message 그리고 spring:theme 까지 추가해서 개발되고 있는걸 보니, 또다른 UI를 선 보일듯 합니다.

새로운 UI에 대한 addon 개발은 다소 의도적인듯 합니다. Roo가 활성화 되려면, 여러가지 UI addon 모듈이 개발되길 원하는 전략적인 것인지도 모르겠습니다. 아무튼 좋은소식입니다. 하루빨리 나오길 기대해 봅니다.

신고

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

Roo를 바라보는 시선  (0) 2009.09.05
몇 안남은 옛날 개발자  (4) 2009.09.04
Roo addon-web-mvc-jsp  (0) 2009.09.02
쉬운것 과 어려운것  (5) 2009.08.27
Spring Roo ITDs의 가독성  (0) 2009.08.22
김대중 전 대통령의 서거를 기록한다  (4) 2009.08.20
posted by Max.
TAG addon, ROO, Spring
2009.08.22 14:48 개발관련

Spring Roo는 도메인 객체를 여러 ITDs로 분리함으로 도메인 객체의 복잡성을 체계화여 직관성을 높여줌으로써 개발의 효율성을 주고자 했던것이 ITDs를 이용하게된 Roo의 전략이라 할수 있습니다.

문제는 이런 복잡성은 사라지지 않고, 잘 조직되어 있다는게 문제입니다. ITDs로 조직됨으로써 필연적으로 Aspectj를 이용한 *.aj파일들이 생성되는데, 그 언어적 특성상 해당 소스코드는 일반 자바코드 보다 복잡하게 보입니다. 물론 자바를 알고 있으면 해독하는데 큰문제는 아니지만, 가독성에 직관화를 해치는건 어쩔수 없이 느껴지게 됩니다. 예를 들어 아래 코드는 일반자바 코드와 비교해도 사용되는 텍스트수가 좀 지나치다 싶은 생각을 지울수 없습니다.

Article_Roo_Entity.aj :

privileged aspect Article_Roo_Entity {
    @javax.persistence.PersistenceContext   
    transient javax.persistence.EntityManager Article.entityManager;    
    @javax.persistence.Id   
    @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)   
    @javax.persistence.Column(name = "id")   
    private java.lang.Long Article.id;    

    ...(생략)....

    public static javax.persistence.EntityManager Article.entityManager() {   
        javax.persistence.EntityManager em = new Article().entityManager;       
        if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");       
        return em;       
    }   
   
    public static long Article.countArticles() {   
        return (Long) entityManager().createQuery("select count(o) from Article o").getSingleResult();       
    }   
   
    public static java.util.List<net.max.article.domain.Article> Article.findAllArticles() {   
        return entityManager().createQuery("select o from Article o").getResultList();       
    }   
   
    public static net.max.article.domain.Article Article.findArticle(java.lang.Long id) {   
        if (id == null) throw new IllegalArgumentException("An identifier is required to retrieve an instance of Article");       
        return entityManager().find(Article.class, id);       
    }   
   
    public static java.util.List<net.max.article.domain.Article> Article.findArticleEntries(int firstResult, int maxResults) {   
        return entityManager().createQuery("select o from Article o").setFirstResult(firstResult).setMaxResults(maxResults).getResultList();       
    }     
}

*.aj파일은 자동으로 생성되고, 관리되어 지기 때문에 직접 수정하는 일은 추천되지 않습니다. 그러나, 해당 소스를 들여다 볼일이 생기는건 어쩔수 없고, 그렇다면, 해당 코드를 좀더 직관적으로 이해할수 있게 하려는 노력이 필요할듯 합니다. (Roo로 몇가지 예제를 만들어 보면, aj파일을 안 볼수 없게 만듭니다.) 

다행히도 이러한 점에 대해 Tomas Salfischberger가 약간의 재미있는 아이디어를 냈습니다. 코드블럭({code})으로 감싸서 마치 자바코드 처럼 보이게 한다는 것 같은데요. 아직 10여일이 지나도록 멘트가 없는걸 보니 살짝 불안한데, 받아들여질지 지켜봐야 겠습니다. 그가 말한 코드는 아래처럼 한다는 것입니다.

Pizza_Roo_Entity.aj:

{code}
    private java.lang.Integer Pizza.version;

    public Integer Pizza.getVersion() {
        return this.version;
    }
    
    public void Pizza.setVersion(Integer version) {
        this.version = version;
    }
{code}

이정도면 가독성에 크게 문제가 없을듯 하니다.

그리고, 영어가 짧으면, 인내는 길어지는 법인가 봅니다.예전부터 Roo에 대한 버그를 많이 접했는데, 이를 알려줄 방법(?)이 없어서, 누군가 그 버그를 찾아내거나, 지적해 줄때까지 참고, 인내하는 것이 생활이 되는것을 느끼고 있습니다. 학원이라도 다녀야 할듯 합니다.
신고

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

Roo addon-web-mvc-jsp  (0) 2009.09.02
쉬운것 과 어려운것  (5) 2009.08.27
Spring Roo ITDs의 가독성  (0) 2009.08.22
김대중 전 대통령의 서거를 기록한다  (4) 2009.08.20
휴가  (2) 2009.08.07
Spring Roo 잡소식  (8) 2009.07.30
posted by Max.
TAG äj, ITDs, ROO, Spring
2009.07.30 09:45 개발관련

3rd party addon 개발은 언제쯤...

현재는 Roo 관련된 어떤 정식 문서(Reference)도 없는 상태에서 addon개발은 약간 시기상조인 것일까? 지금도 addon은 개발하는데 큰 문제는 없지만, Roo개발자는 addon관련된 모듈을 정리(refactoring)할때까지 기다려주길 원하고 있다. (일관성 있게 addon을 개발할수 있게 지원할 모양이다.) 향후 올해 SpringOne USA에서 addon 개발과 관련된 발표에서 관련정보를 오픈할 생각이라고 한다. 그때가 아마 가을.. 이지??? 기다림의 미덕을 보일때다..



Roo가 웹프로젝트 전용은 아니다.

Roo 프로젝트를 생성했다고, 해당 프로젝트(maven프로젝트)가 웹프로젝트로 생성되는건 아니다. new controller라는 명령을 최초로 실행했을때, 비로서 WEB-INF니, web.xml이 생성된다. 나는 모듈프로젝트(웹프로젝트가 아닌)를 생성할때 create project, configure logging 이 두개의 명령으로 생성하여 기본 골격만 생성하는데 Roo를 사용할 때도 있다.



Static Finder를 위한 Mock 테스트는 어떻게...

Roo M2 버전때 새로 추가된 명령 중에 new mock test 가 추가 되었다. 로드존슨이 만들었고, EasyMock 형식으로 사용한다. 이걸로 Mock은 끝나는줄 알았는데, Phil이란 사람이 태클을 걸고 나섰다. 아무 이유 없이(사실 이유를 설명할 문서도 없다) 이런식으로 강제하면 곤란(lock in)하지 않느냐 난 Mockito가 좋은데 말이지?.. 이렇게 강력하게 의견을 표현하니, Roo 개발자은 언제나 그렇듯 좋은의견이라며, 정리되는대로(?) Mockito addon을 추가할 모양이다. 여기에 우리의 스타 Toby님이 한줄 댓글로 PowerMock을 지그시 알려주신다. (그래도 Mockito addon은 나올것 같다.)



xxx.roo 파일을 만들어주는 기능이 필요하다.

프로젝트 만들때마다 여러명령을 조합하는데, 그것을 기록할 방법이 없다고 투덜 댈수밖에 없다. 그래서 반드시, 확실히,기필코,꼭 그 기능을 추가할 예정이라고 Roo개발자는 말한다. 하지만, 지금 당장은 아니라며 스미일표시를 보낸다. :)



Roo UI는 구리다.(구리city 하고는 관계없음... 안 웃기네-.,-)

controller 명령으로 각종 crud 및 환경에 관련된 jsp들이 생성된다. UI는 Spring-JS를 사용하니, 현재 지원되는건 Dojo뿐이다. 이조차도 오류가 내눈에도 보일정도면 많은 모양이다. 하지만, Roo개발자가 Spring-JS 프로젝트를 어찌할수는 없을테다. 기능은 둘째치고라도 모양새도 별로 이쁘지 않다. Dojo도 각종 extention(Dijit,dojox)을 이용하면 볼만하련만, Roo UI 디자인은 영~ 꽝이다.(어설프게 이미지도 들어있다.) UI 디자인이 ext-Js처럼 예쁘면, 관리자용으로 활용해 보련만...
그런데 Spring-JS에서 jQuery는 언제 지원하려는걸까? jQueryUI도 볼만하던데...



Rul Rewrite Filter 처음 써본다면...

오래전 아파치 프로젝트에서 이 프로젝트가 존재하고, 무엇에 쓰는 물건인지도 이해하고 있었지만, 직접사용해본적이 없었다. Roo에 이게 포함되어 있는데, 알아둘것이 있다. 여기서 정의되지 않은 경로는 웹에서 접근할수 없다는 것이다. js,css 등도 마찮가지다. Rulrewrite 설정파일에 추가해줘야 한다. 안하고, 왜 페이지나 js파일이 없다고 나올까? 라고 삽질하는 수가 있다. :)

신고

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

김대중 전 대통령의 서거를 기록한다  (4) 2009.08.20
휴가  (2) 2009.08.07
Spring Roo 잡소식  (8) 2009.07.30
Spring Roo 1.0.0.RC1 Released  (0) 2009.07.23
Spring Roo 스크립트 활용하기  (0) 2009.07.17
살아남는법 vs 살아가는법  (2) 2009.07.17
posted by Max.
TAG ROO, Spring
prev 1 2 3 4 5 6 next

티스토리 툴바