참조 : Spring: Component Scan + Load Time Weaver (LTW)

아침에 올라온 댓글을 보고 확인해봤습니다.

질문은 @Configurable과 JPA 그리고 Jetty를 사용했을 때, @Configurable이 동작하지 않아서 도메인 객체가 가지고 있는 레퍼런스 타입의 객체들이 세팅되지 않고 null 인 상태라는 제보였습니다.

예상으로는 웹 서버를 동작 시키실 때, -javaagent 옵션을 주지 않으신 게 아닌가 싶습니다.

사용자 삽입 이미지이클립스에서 톰캣을 사용하는 이런 화면에서 가운데 보이는 Open lunch configuration에서 옵션을 줄 수 있습니다.

사용자 삽입 이미지일단 서버에서 테스트 하려면 Sevlet 에서 코드를 작성해서 확인해봐야겠지만, 그 전에 @Entity랑 @Configurable이 같이 묶여도 이상이 없다는 것은 확인하고 넘어가야겠기에 테스트를 해봤습니다.

@RunWith(SpringJUnit4ClassRunner.class)
@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에 주어야겠죠.

사용자 삽입 이미지
테스트는 통관합니다. 설정은 다음과 같습니다.

    <tx:annotation-driven />

    <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에서 위의 코드를 실행해보겠습니다.