@Configurable + @Entity
참조 : Spring: Component Scan + Load Time Weaver (LTW)
아침에 올라온 댓글을 보고 확인해봤습니다.
질문은 @Configurable과 JPA 그리고 Jetty를 사용했을 때, @Configurable이 동작하지 않아서 도메인 객체가 가지고 있는 레퍼런스 타입의 객체들이 세팅되지 않고 null 인 상태라는 제보였습니다.
예상으로는 웹 서버를 동작 시키실 때, -javaagent 옵션을 주지 않으신 게 아닌가 싶습니다.
이클립스에서 톰캣을 사용하는 이런 화면에서 가운데 보이는 Open lunch configuration에서 옵션을 줄 수 있습니다.
일단 서버에서 테스트 하려면 Sevlet 에서 코드를 작성해서 확인해봐야겠지만, 그 전에 @Entity랑 @Configurable이 같이 묶여도 이상이 없다는 것은 확인하고 넘어가야겠기에 테스트를 해봤습니다.
@ContextConfiguration(locations={"file:web/WEB-INF/applicationContext.xml"})
public class MemberTest {
@Test
public void injectionTest() throws Exception {
Member member = new Member();
assertNotNull(member);
assertNotNull(member.getMemberRepository());
assertNotNull(member.getMemberRepository().getSessionFactory());
}
}
물론 이 테스트를 돌릴 때에도 -javaagent 옵션을 주셔야 합니다. 이 경우에는 junit에 주어야겠죠.
테스트는 통관합니다. 설정은 다음과 같습니다.
<context:load-time-weaver />
<context:spring-configured />
<context:component-scan base-package="domain" />
<bean id="member" class="domain.Member" abstract="true"
scope="prototype" p:member-dao-ref="memberDao" />
이밖에도 sessionFactory, datasource, transactionManager 가 빈으로 등록되어 있지만 생략하겠습니다.
어쨋든 조금 쉬었다가 Servlet에서 위의 코드를 실행해보겠습니다.