http://static.springframework.org/spring/docs/2.0.x/reference/transaction.html#transaction-declarative

위 사이트의 9.5.6. Using @Transactional 부분.

첫째, @Transactional은 인터페이스(및 메소드), 구현클래스(및 public 메소드)에 붙일 수 있다.
특히나 public 메소드에만 적용되는 점은 아래와 같이 설명하고 있다.
Method visibility and @Transactional

When using proxies, the @Transactional annotation should only be applied to methods with public visibility. If you do annotate protected, private or package-visible methods with the @Transactional annotation, no error will be raised, but the annotated method will not exhibit the configured transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.

둘째, self-invocation 상황(내부 호출)에서는 적용되지 않는다. 즉 외부의 클래스에서 그 메소드를
호출해야 트랜잭션이 걸린다.

Note: Since this mechanism is based on proxies, only 'external' method calls coming in through the proxy will be intercepted. This means that 'self-invocation', i.e. a method within the target object calling some other method of the target object, won't lead to an actual transaction at runtime even if the invoked method is marked with @Transactional!

며칠 동안 두가지 상황을 모두 겪으면서 삽집한 생각을 하면... 으 ...... 바보같다.. ㅠ.ㅠ

궁금점 : @Transactional을 Class 선언부에 안붙이고 메소드에만 붙이면 어떻게 되는거지?
여기저기 찾아보면 당최 메소드에만 붙어있는 예제가 없다.


Posted by 에코지오
,
본격적으로 TDD를 수행하기 위해 노력하고 있는 요즘,
mock 객체의 필요성을 느끼고 있다.

jmock, easymock 둘 중 어떤 것을 데리고 놀까 고민하다가 초보학습자에게 좋은
easymock으로 결론짓고 자료를 검색하니,

역시나 기선님 자료가 위에 랭크되어 나온다... (기선님 쵝오 ^^b)

http://whiteship.tistory.com/search/easymock

2008/03/02 EasyMock - Using Stub Behavior for Methods
2008/03/02 EasyMock - Flexible Expectations with Argument Matchers
2008/03/02 EasyMock - Strict Mocks, Switching Order Checking On and Off
2008/03/01 EasyMock - Relaxing Call Counts
2008/03/01 EasyMock - Changing Behavior for the Same Method Call
2008/03/01 EasyMock - Creating Return Values or Exceptions
2008/03/01 EasyMock - Working with Exceptions
2008/03/01 EasyMock - Specifying Return Values
2008/03/01 EasyMock - Expecting an Explicit Number of Calls (2)
2008/02/06 EasyMock으로 클래스의 Mock 객체 만들기
2007/08/22 인터페이스를 사용할 때와 안 할 때의 테스팅 차이
2007/06/22 Spring MVC 리팩토링 4
2007/06/21 AbstractModelAndViewTests 사용하여 Controller 테스트하기
2007/06/19 Testing Controller
2007/06/19 EasyMock을 사용한 Service 계층 테스트2
2007/06/18 EasyMock을 사용한 Service 계층 테스트1
2007/04/09 Testing (2)
2007/04/08 이번 주 할 일
2006/12/30 주소록 개발 카탈로그 (4)
2006/12/17 중간점검
2006/12/11 페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL) (2)
2006/12/06 Easymock 연습하기 3탄
2006/12/05 Easymock 연습하기 2탄
2006/12/05 Easymock 연습하기
2006/12/05 단위 테스트 모르겠슴 ㅠ.ㅠ
2006/10/08 Layers of Abstractions

이제 남은 일은 공부하고 직접 돌려보는 것뿐.
Posted by 에코지오
,
하이버네이트는 항상 느끼는 거지만 코딩할 때마다 헷갈리는 부분이 많다.

늦은로딩, 페칭, 세션, 캐쉬, 객체연관, 객체상태, DB와 동기화 시점 등등.

어떡하지...? 뭘 어떡하나. 부지런히 자료찾아보고 테스트하고 메모해나가는 수밖에....

이미 그런 분들이 꽤 계시다...  특히 기선님하이버네이트3 책 요약 시리즈

나처럼 우매한 대중에게는 너무 고마운 자료다.

일단 기초적인거 하나 붙잡고 읽어보자.
 
하이버네이트 API: 저장하고 읽어들이기

session.load() 메소드 사용팁을 잘 정리해주셨다.

DB에 있는 객체 하나를 꺼내서 다른 객체에 세팅해줘야 하는 경우. Comment.setForAuction(item). 이 경우 굳이 item은 load()로 가져와도 된다. 굳이 DB에서 전부 가져올 필요가 없다. Comment를 저장할 때, item의 id를 외례키로 저장하게 되는데, load()로 가져온 Proxy가 딱 그 id만 가지고 있기 때문이다

session.delete() 호출후 식별자를 제거하기 위한 팁도 있다.

Transient 상태가 될 때, 식별자도 제거하려면 hibernate.use_identifier_rollback 이 설정을 해줘야돼.

다른 글도 읽어보자. 다 피가 되고 살이 된다.
 

Posted by 에코지오
,
AppFuse-light 버전이 너무 간단한거 같아 AppFuse 2.x를 받아서
소스 좀 볼 요량으로 appfuse.org를 갔는데 웬걸 다운로드 링크가 없다... ㅠㅠ

설치 자체가 Maven을 이용하는 것으로 바뀌었다. 헐... 메이븐 설치도 안했는뎅!~

우선 Spring-MVC Basic 아키타입을 받고,

mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-spring -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.1 -DgroupId=com.mycompany.app -DartifactId=myproject

myproject 디렉토리로 이동해서 mvn 날린후 아래 명령으로 전체 소스를 받는다.

mvn appfuse:full-source
혹시 받다가 URL 관련 에러날 경우에는 apache-maven-2.0.8\conf\settings.xml 를 열고,
로컬 메이븐 저장소 경로를 디폴트 경로(C:\Documents and Settings\Administrator\.m2\repository)에서
스페이스 없는 경로로 바꾸면 된다.

<settings>
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ~/.m2/repository
  -->
  <localRepository>D:\MavenRepository</localRepository>

* 자바지기님의 메이븐 강좌도 참고하자.
Maven 강좌 7 - Maven을 이용하여 Appfuse 프로젝트 생성하기

Posted by 에코지오
,
Spring+Hibernate 조합 환경에서 단위테스트에 대한 토비님의 글.

AppFuse DAO Test 코드의 문제점

Rod Johnson의 Testing with Spring

Spring기반의 Hibernate DAO Unit Test 만들기

특히나 하이버네이트의 1차레벨 캐쉬 때문에

C/U/D 한 뒤 다시 객체를 읽어오는 경우 읽기전에 세션을 flush 해주어야 한다는 지적은

AppFuse 만든 Matt도 미처 몰랐던 사실!


spring-test 모듈의 AbstractTransactionalJUnit4SpringContextTests 사용환경에서는 아래처럼
만들어 놓고 중간중간 flushAndClearSession(); 해주면 될 듯. 
 @Autowired
 protected SessionFactory sessionFactory;

 protected Session getCurrentSession() {
  return SessionFactoryUtils.getSession(sessionFactory, true);
 }

 protected void flushSession() {
  getCurrentSession().flush();
 }

 protected void flushAndClearSession() {
  Session s = getCurrentSession();
  s.flush();
  s.clear();
 }



Posted by 에코지오
,
이클립스에서 static import 설정 팁.
http://whiteship.tistory.com/1416

스프링 2.5 레퍼런스의 테스트 부분.
http://static.springframework.org/spring/docs/2.5.x/reference/testing.html

스프링 샘플에 포함된 petclinic 테스트 소스 참고.
http://www.springframework.org/docs/petclinic.html

최범균님 스프링2.5 프로그래밍 책의 테스트 파트.


그 외.
http://mudchobo.tomeii.com/tt/233

http://otamot.tistory.com/61

http://cafe.naver.com/deve/2580
Posted by 에코지오
,
요즘은 이상하게 애자일을 실천하는데 필요한 도구들에 관심이 간다.

빌드, 단위테스트, 버전관리, 버그관리, 자동화된 통합 등등.

CVS를 통한 버전관리를 제외하곤 사실상 거의 손놓은지 꽤 되었는데,

그동안 이런저런 툴들이 많이 쏟아져나왔다.


Younghoe.Info :: [리뷰] Continuous Integration으로 결점을 조기에 발견하기
http://younghoe.info/681


FindBugs : PMD랑 비슷한 놈인가?
http://findbugs.sourceforge.net/

Hudson : CruiseControl보다 직관적이라는데...
https://hudson.dev.java.net/

Java Power Tools : 새로 나온 책.
http://www.wakaleo.com/java-power-tools
Posted by 에코지오
,

TDD 링크

카테고리 없음 2008. 3. 25. 13:47
http://www.tdd.or.kr/

http://xper.org/wiki/xp/TestDrivenDevelopment

http://www.xper.org/LineReaderTdd/

http://blog.naver.com/joycestudy/100033800978

http://blog.naver.com/scroco/40006039152

http://wiki.javajigi.net/display/OSS/TDD

  • 테스트 주도 개발 (켄트 벡 저, 김창준 & 강규영 역,인사이트)
  • 실용주의 프로그래머를 위한 단위 테스트 with JUnit (데이비스 토머스 & 앤드류헌트 공저, 이용원 & 김정민 역, 인싸이트)
  • 책만 읽으면 뭐하냐. 실천하자.
    Posted by 에코지오
    ,
    따라하지 말자? ㅋㅋ

    류한석님의 글에서 좋은 글귀를 발견.
    http://bobbyryu.blogspot.com/2008/03/openproj-10.html


    도구가 실패하는 프로젝트를 성공시켜주지는 못한다고 생각합니다. 단지 프로젝트의 가시성을 향상시키고 프로젝트 관리에 효율성을 부여할 뿐이죠.

    모든 것을 관리하려고 하면 아무 것도 관리하지 못하게 됩니다. 툴은 단지 툴일 뿐.

    툴은 중립적입니다. 쓰는 사람이 똑똑하면 똑똑한 결과를 만들어 내고, 쓰는 사람이 멍청하면 멍청한 결과를 만들어 내죠.

    지나친 프로세스/방법론 의존도 마찬가지 인것 같다.

    프로세스가 실패하는 프로젝트를 성공시켜주지는 못한다고 생각합니다.

    모든 것을 따라할려고 하면 아무 것도 따라하지 못하게 됩니다. 프로세스는 단지 프로세스일 뿐.

    프로세스는 중립적입니다. 쓰는 사람이 똑똑하면 똑똑한 결과를 만들어 내고, 쓰는 사람이 멍청하면 멍청한 결과를 만들어 내죠.
    Posted by 에코지오
    ,
    사실 JSF의 MVC와 Struts의 MVC가 다른 것은 알겠는데,

    무엇이 어떻게 다른지 남들에게 설명하는데 애를 먹고는

    MVC 자체를 내가 정확히 이해하지 못하고 있구나 좌절을 느꼈다.

    그러다가 결정적으로 V에서 M을 참조하는 방식이 Pull / Push로 다름을 알고

    아하 그렇구낭.... 좋아했는데,
     
    오늘 또 PAC/HMVC를 보고는 헷갈리기 시작했다.
    Posted by 에코지오
    ,