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

Notice

'2011/02/22'에 해당되는 글 2

  1. 2011.02.22 Roo로 개발시 주의사항
  2. 2011.02.22 Roo에서 list sorting
2011.02.22 13:54 개발관련
- 자동생성된 Entity 테스트 에러
자동생성되는 테스트가 성공한 것을 확인한 후, 개발을 진행하다가 다시 테스트시 실패하는 경우가 생긴다(DI된 bean을 찾을수 없다는 에러). 이는 작성한 Entity에 속성이 추가되거나, Roo shell에 의해서 변경된 사항이 잘 반영하지 못했을때, 가끔 발생한다. 조치는 roo shell을 끄고, 생성된 또는 관련된 aj 파일을 모두 지우고, roo shell을 기동시켜 다시 한방에 생성하면 정상적으로 테스트가 통과 된다. 

- 단위테스트 한글 엔코딩 문제
나의 경우에 한정된 문제일수 있지만, roo로 생성된 Entity를 한글 테스트 했더니 모두 깨져서 나왔다. 원인을 찾던중, STS의 자바소스 한글 엔코딩 문제였다.  General>Content Types>Test>Java Source File> *.java 의 Default encoding : 값이 UTF-8로 설정되어 있었다. 이것을 삭제하고 빈값을 넣고 적용(AspectJ Source File 도 동일하게 적용)하면, 단위테스트시 한글도 문제없이 동작한다.

- 웹테스트 한글 엔코딩 문제
Controller 단위 테스트까지 한글 문제가 없다면, 문제가 꼬일수 있다. 웹서버, 필터, 브라우져, JSP 등 여러가지 UI 관련 부분을 뒤져봐야 한다. 그중 가장 유력한게 web.xml에 설정하는 부분인데, HttpMethodFilter가 특히 문제가 될수 있다. POST,GET만 사용하고, PUT,DELETE 등을 사용하지 않는다면, 해당 부분을 주석처리 하고 테스트 해보는 것을 잊지 말자. 나같은 경우 해당 부분을 제거하자 한글문제가 해결되었다.





저작자 표시
신고
posted by Max.
TAG ROO
2011.02.22 10:21 개발관련
Roo Entity의 객체관계에서 sorting은 @OrderBy("title DESC") 형태로 가능하다. 그러나 Entity 자체를 정렬하는 것은 없다. 기본으로 생성되는 _Roo_Entity.aj에서는 기본적인 CRUD만 있고, 정렬관련된 옵션은 없다. 그럼 finder를 생각해 볼수 있는데, finder 역시 현재까지는 특별히 지원하는 정렬기능이 없다. Entity의 속성중 특정 속성을 조건으로 검색하는 것은 되지만, 정렬까지는 지원하지 않는다. 관련해서 이슈로 등록((https://jira.springsource.org/browse/ROO-1592)되었지만, 진행된 내용은 아직 없다. 즉, 현재 Roo 버전으로는 가능한 방법이 없다는 것이다.

자동완성 기능으론 할수 없으니, 손수만들면 된다. 좀 거시기하긴 하지만, 정렬기능이 지원될때까지 어쩔수 없다. 방법은 여러가지가 있겠지만, 가장 적당해 보이는 것이 finder 메서드를 직접 구현하는 것이다. 해당 Entity에 static 으로 구현하면 된다. 이때 HQL를 원하는데로 구현하면 된다. 아마도 자동완성의 한계를 이렇게 구현할수 있을 것이다. 
    public static List<Article> findArticleSortEntries(int firstResult, int maxResults) {
        return entityManager().createQuery("select o from Article o Order By o.id DESC", Article.class).setFirstResult(firstResult).setMaxResults(maxResults).getResultList();
    }

또다른 방법으론 Nicholas Albion 이 제안한 필터 방식(https://jira.springsource.org/browse/ROO-241)인데 이는 자동생성을 염두해둔 방법으로 제안한 것이다. 

finder add --finderName findEmployeesByDepartment --orderBy "userName ASC" --filterClass ~.server.domain.EmployeePagingFilter

//(annotation might be formatted something like this)
@RooEntity(finders = { {name="findEmployeesByDepartment",orderBy="userName ASC",filterClass=EmployeePagingFilter} })
public class Employee { ... }

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