no transaction is in progress – jpa셋팅중에 만난 알수없는 메세지.

javax.persistence.TransactionRequiredException: no transaction is in progress

웹셋팅을 마치고 나니 이런 메세지가 뜨면서 addPost가 동작하지 않는다.

그래서 junit을 통해 테스트코드를 만드니까 돌아간다.

여기서 @transactional태그와 관련된 문제라는 판단.

한마디로 Junit에서는 @Transactional태그가 먹히고 Web에서는 먹히지 않는다.

Jpa의 셋팅이 DiapatcherServlet의 servlet-context에서 재 로딩되면서 발생하는 문제가 아닐까 싶었다.

 

해결방안으로 생각했던 것이… 모든 셋팅을 root로 옮기는것.

그러면 로딩할때 한꺼번에 해서 이런 문제가 안 생기지 않을까 싶었다

근데 귀찮아서 나랑 비슷한 상황이 있나 한번 더 검색해보니…

http://stackoverflow.com/questions/10633240/spring-jpa-transactions-works-only-in-junit-test-but-not-in-application/10869397#10869397

exactly same problem이 나왔다.

servlet에 <tx:annotation-driven/>을 추가해주랜다.

잘된다.

설정 깔끔하게 하려고 필요없는거 이것저것 제외하고 하다보면 이런 문제를 더 많이 겪는 것 같다. 옛날에 잘 할줄모를때는 이것저것 지저분하게 막 갖다껴놔가지고 그냥 대충 막 돌아갔었는데