본문 바로가기

jrebel

Jrebel Ibatis Plugin. 내가 만들어서 올려두었던 Jrebel Ibatis Plugin이.. jrebel을 만든 회사의 사이트에서 거론되고 있었다. 내 블로그와 내가 올린 구글코드의 소스가.. ㅋ 기분이 묘하다. ㅎㅎ http://www.zeroturnaround.com/forum/topic.php?id=448 문제는 저 코드가.. 우리 사이트에 맞게 만들어진 것이라.. 다른 사이트에서는 동작을 안 한다는거 -_-;; 더보기
Jrebel Ibatis Plugin을 만들어 봅시다.. -3- Ibatis의 resultMap 클래스로 사용되는 Domain 클래스들에 대해서 리로드시 캐싱에서 지우는 것으로 만들어봤고..이제는 쿼리와 resultMap 클래스가 정의 되어 있는 xml 파일들을 모니터링하여 xml 파일 변경시 xml 파일을 리로드 하도록 해야 합니다. 다만, ibatis에서 최소 read 단위가 sqlMapConfig.xml 이어서... 이 xml이 커지면 로딩하는데 시간이 걸리게 됩니다. 더 작은 단위로 모니터링하여 로드되도록 하고 싶은데 아직 거기까지는 못 하였습니다. 일단,, 최소 ibatis에서 buildSqlMapClient 메서드를 실행 할 때 로딩하는 xml 파일을 모니터링 할 수 있도록 어딘가에 저장해두도록 해야 합니다. 그 역할을 하는 파일을 SqlMapFilesMa.. 더보기
Jrebel Ibatis Plugin을 만들어 봅시다.. -2- 일단 Jrebel 플러그인의 메인이 되는 클래스는 org.zeroturnaround.javarebel.Plugin 인터페이스를 구현해야 합니다. 여기서 중요한 메서드가 preinit() 메서드 입니다. 앞서 얘기했듯이 Jrebel이 다양한 프레임워크에서 플러그인을 통해 클래스 실시간 로딩을 지원하는 방법은 컴파일 된 바이트코드를 핸들링하는 것 입니다. 이렇게 핸들링 할 클래스를 합쳐주는 메서드가 바로 preinit() 메서드입니다. 그리고 , void org.zeroturnaround.javarebel.Integration.addIntegrationProcessor(ClassLoader arg0, String arg1, ClassBytecodeProcessor arg2) 를 통해 등록되는 형식을 보면 a.. 더보기
Jrebel Ibatis Plugin을 만들어 봅시다.. -1- 회사에서 jrebel을 사용하면서 ibatis 에서 사용하는 sqlMap.xml과 Domain 클래스들의 변경에 대한 이슈가 있어서 플러그인을 만들었습니다. 회사에서는 프레임웍이 있어서 순수 ibatis를 위한 플러그인은 아니라서 소스를 그대로는 못 보여드리고.. 순수 ibatis (2.3.x)에서 사용 가능한 ibatis 플러그인을 한번.. 의사 코드를 사용해서 만들어 보려고 합니다. 우선 jrebel의 플러그인은 이미 컴파일된 클래스의 바이트 코드에 원하는 코드를 끼워넣어서 thread를 가로채는 방식으로 원하는 메서드를 먼저 실행하거나 나중에 실행하도록 하는 것이 기본적인 구현 방식입니다. 기본적으로 ibatis를 사용 할 때는 이런식이 됩니다. 일반적으로 매번 저렇게 SqlMapClient를 bu.. 더보기
Jrebel Ibatis plugin. 보니까.. Jrebel 에서 플러그인 제공하는 방식이 프레임워크에 소스를 끼워넣어서 인터셉트 혹은 특정 메서드 실행 후에 동작 할 수 있도록 해주는 방식이 있어서... 아주 심플하게 생각해서... sqlmapclient를 사용하기 위해 SqlMapClientBuilder를 사용해서 SqlMapClient client = SqlMapClientBuilder.buildSqlMapClient(reader); 를 실행 할 때마다 reader를 체크하여 reload해주면 되지 않을까 생각... 그냥 쓸 때마다 xml을 읽어오도록 구성 되어 있으면 문제 없지만 보통은 최초 기동시에 xml 정보를 읽어 놓고 그것을 재사용 하는 방법을 사용하고 있을 것이므로... 재기동이 문제가 되는 경우가 있다. 일단 , 최종 수정.. 더보기