1. 프로젝트 디렉토리 만들기

# mkdir petclinic

2. 디렉토리로 이동하기

# cd petclinic

3. 루 실행

# roo

4. 스크립트 실행

roo> script clinic.roo
roo> exit

5. 이클립스 프로젝트로 변환

mvn eclipse:eclipse

6. 이클립스 프로젝트로 임폴트

7. 콘솔에서 테스트

mvn test

8. Run As -> Run on server

간단하네요.. 소스 코드를 봤더니, 애노테이션과 AspectJ의 향연입니다. 자바 소스 코드는 거의 없다시피 합니다. 하이버네이트를 사용했습니다. 도메인이 CRUD를 담당하는지(물론 어딘가로 위임하겠죠.), 도메인과 컨트롤러 밖에 보이지 않습니다. 도메인이 역할을 위임하는 녀석들이 보이지 않습니다.

@Entity
@RooJavaBean
@RooToString
@RooEntity(finders = { "findVisitsByDescriptionAndVisitDate", "findVisitsByVisitDateBetween", "findVisitsByDescriptionLike" })
public class Visit {

    @Size(max = 255)
    private String description;

    @NotNull
   @Past
    @Temporal(TemporalType.TIMESTAMP)
    private Date visitDate;

    @NotNull
    @ManyToOne
   @JoinColumn
    private Pet pet;

    @ManyToOne
   @JoinColumn
    private Vet vet;
}

하늘색은 JPA 애노테이션(하지만 실제로 사용하는 라이브러리는 하이버네이트, 왜냐면 JPA가 표준이까) 녹색은 Roo 애노테이션, 남색은 javax.validation 애노테이션입니다. @Past는 항상 입력되는 Date가 입력되는 시점 기준으로 이전 날짜여야 한다네요. 오호..

Roo를 학습하려면 Roo가 제공하는 애노테이션과 그 기능을 파악하는게 주요해 보입니다. 그리고 Roo가 가정하고 있는 CoC도 익혀야겠죠. 좀 더 자세히 보려면 Roo가 제공하는 Aspect들을 조사해봐야겠습니다.

AspectJ 파일들을 보려면 이클립스에서 네비게이터로 보면 됩니다. 아니면 Filters 옵션에서 Hide generated ROO ITDs의 체크를 없애면 패키지 익스플로러에서도 볼 수 있습니다.

흠.. 기발한 것 같습니다. AspectJ를 자동생성해서 자바로 만든 클래스에 @Configurable을 붙이고 테스트까지 자동생성합니다. @_@ 와.. 정말이지 이건 애노테이션과 AspectJ의 향연입니다.