Whiteship's Note


Eclispe 미안해. 내 눈이 삐구였어.

Good Tools : 2007.11.26 12:13


아.. 환장하겠네요. @Configurable이 잘 안되서(정확하게는 LWT 설정일 잘 안 먹어서.. 좀 더 정확하게는 java 명령어에 아규먼트가 안 먹혀서) 근 3일동안 낮에는 안절부절 못하고, 밤에는 잠을 설쳐야 했습니다. 토비님께 바보라는 댓글까지 받았지요.

그런데 정말 저는 바본가 봅니다. 이걸 알아채고는 괴로움의 비명 한마디와 자신에 대한 원망으로 책상을 칠 수밖에 없었습니다.(다행입니다. 집에는 저밖에 없었습니다.)

서론이 길었으니 요점만 적겠습니다.
사용자 삽입 이미지

그림을 보고 제가 어떤 실수를 했을지 짐작하시는 분들도 계시겠죠. 부끄럽더라도 말씀드리자면, 저는 위에다가 적었었습니다. 눈이 삐꾸죠. 아래는 보지도 않고, 그냥 위에 빈칸이 보이고, 끝 즈음에 아규먼트란 단어가 보이길래 저기에 넣었었습니다.

에휴... 바보 ...ㅠ.ㅠ 아우.. OTL

Eclipse 미안해. 내가 잠시 널 의심했었어. 쏘리!


top

  1. Favicon of http://toby.epril.com BlogIcon 토비 2007.11.27 03:20 PERM. MOD/DEL REPLY

    왜 그랬어~

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.11.27 09:33 신고 PERM MOD/DEL

    그러게요~ 아~ 부끄러워서 참...이클립스를 마주 할 면목이 없네요.

Write a comment.


@Configurable 왜이리 안 되지;

Spring/Chapter 6 : 2007.11.23 16:43


http://forum.springframework.org/showthread.php?t=43690
위 링크에 있는 것과 똑같은 현상이 벌어지고 있습니다.

1. @Confiurable 애노테이션을 도메인 객체위에 붙이고...
2. XML 설정에서 해당 도메인 객체를 등록하고 이 때 scope을 prototype으로...
3. <context:spring-configured /> 추가해주고.. (@Configurable 붙은 녀석이 애플리케이션에서 생성될 때 스프링이 관리하도록...)
4. <context:load-time-weaver/> 추가해주고.. (LTW 사용해야 3번일을 할 수 있으니까..)
끝..

이렇게 하면
    @Test
    public void testDI() throws Exception {
        Member member = new Member();
        assertNotNull(member.getRepository());
    }

이 테스트가 통과해야 하는데..
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.context.weaving.AspectJWeavingEnabler#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeWeaver': Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:spring-agent.jar

-javaagent:spring-agent.jar 옵션을 추가해서 실행시키라는 에러가 발생합니다.

그래서 이클립스의 Run -> Open Reun Dialog 클리갛고, JUnit 에서 우클릭 한다음 new로 새로 하나 만들고 아규먼트에 인자를 다음과 같이 줬습니다.

-javaagent:sd:\eclipse\workspace\spring2.5\lib\spring-agent.jar

하지만 에러 메시지는 동일합니다. OTL...
레퍼런스에서 Table 6.1. DefaultContextLoadTimeWeaver  LoadTimeWeavers 표를 보고 위버 설정 파일을 다음과 같이 수정했습니다.

<context:load-time-weaver weaver-class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>

자... 그랬더니 이번에는 레퍼런스를 보라는 에러가...ㄷㄷㄷ

java.lang.IllegalStateException: Must start with Java agent to use InstrumentationLoadTimeWeaver. See Spring documentation.



top

  1. Favicon of http://www.ologist.co.kr BlogIcon ologist 2007.11.25 10:35 PERM. MOD/DEL REPLY

    아래 옵션이 제대로 안 먹은것으로 예상이 되네요.
    -javaagent:sd:\eclipse\workspace\spring2.5\lib\spring-agent.jar
    경로를 프로젝트 홈에서 상대경로로 바꾸어서 해보세요..^^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.11.25 13:44 신고 PERM MOD/DEL

    넹. 아무래도 그 옵션이 안 먹은것 같네요.
    감사합니다~ (__)/

Write a comment.


프로퍼티파일 변경 후 재컴파일이 필요하지 않을까?

모하니?/Coding : 2007.10.15 09:38


몇일 전에 경험했던 삽질을 공개합니다.

xxx.properties 라는 파일이 있고 이 파일에 있는 내용을 yyy.xml 에서 사용하고 있었습니다. xxx.properties는 db connection 정보를 담고 있었고, yyy.xml은 spring에서 사용할 datasource를 정의할 때 xxx.properties에 있는 내용을 읽어다가 사용했습니다. 이때 xxx.properties의 내용을 변경했습니다.

저는 '음.. 그래 단순히 설정이 바뀐 것 뿐인데, Java 코드도 아니고 재컴파일 할 필요는 없겠지?'라고 생각했습니다.

그러나 왠 걸 서버를 실행해 보니, DB connection을 가져올 때 수정하기 전에 사용한 URL과 user, password를 사용하고 있는 것이었습니다. -_-;;

이런.. 컴파일 해야 되는구나.

왜?
사용자 삽입 이미지

이 녀석이 프로퍼티 파일을 읽어들인 다음 정보를 가지고 있는데, 이 녀석을 컴파일 한 class 파일로부터 정보를 가져오기 때문입니다. 프로퍼티 파일이 XML이었다면 어떨까요? 그때도 컴파일이 필요할까요? 흠.. 그건 아닐 겁니다.

여기서 생기는 의문점 하나..
사용자 삽입 이미지

이 녀석도 똑같이 프로퍼티파일을 읽어들여서 사용하긴 하지만, 국제화 지원을 위해서 또는 그냥 텍스트를 별도로 관리하기 위해 사용합니다. 앞서 본 프로퍼티 플레이스 홀더와 다른 점은 이 녀석은 프로퍼티파일을 변경한뒤 페이지 새로고침을 하면 view에 바로바로 적용이 된다는 것입니다.

흠... 어찌된 영문일까요?  ResourceBundleMessageSource API를 살펴보아도 번들은 VM이 살아있는 동안 영원히 캐쉬 된다고 합니다. 그럼 새로고침 한다고 해서 반영이 되면 안되고 이 역시 재컴파일이 필요할텐데 말이죠. 그래서 주기적으로 번들을 다시 읽어들이는 ReloadableResourceBundleMessageSource도 존재 하는데 말입니다. 흠.. 신기할 따름입니다. 프로퍼티파일을 변경하면, JSP가 변경 된 것으로 생각하고, JSP를 Servlet으로 바꾸고, 그걸 다시 컴파일 하면서 ResourceBundleMessageSource도 다시 컴파일 하게 되는 걸까요?? 그렇다면 프로퍼티파일을 변경한 것을 JSP가 어떻게 알았을까요? 흠;; 미궁속으로 빠져드는 느낌입니다.

XML과 프로퍼티파일 그리고 JSP의 특징으로 인해 빚어진 에피소드였습니다.
top

Write a comment.