본문 바로가기

Java

Jrebel Ibatis plugin.

보니까.. Jrebel 에서 플러그인 제공하는 방식이
프레임워크에 소스를 끼워넣어서
인터셉트 혹은 특정 메서드 실행 후에 동작 할 수 있도록
해주는 방식이 있어서...

아주 심플하게 생각해서...
sqlmapclient를 사용하기 위해
SqlMapClientBuilder를 사용해서

SqlMapClient client = SqlMapClientBuilder.buildSqlMapClient(reader);
를 실행 할 때마다 reader를 체크하여 reload해주면 되지 않을까 생각...

그냥 쓸 때마다 xml을 읽어오도록 구성 되어 있으면 문제 없지만 보통은 최초 기동시에 xml 정보를 읽어 놓고
그것을 재사용 하는 방법을 사용하고 있을 것이므로... 재기동이 문제가 되는 경우가 있다.

일단 , 최종 수정일을 체크해야겠지만
동작되는지 보는게 급해서..그냥 만들어 보았다.






위 소스는 SqlMapClientBuilder.buildSqlMapClient(Reader reader) 가 호출 될 때마다
그전에 reader를 다시 읽어들이는 방식이라 굉장히 비효율적이다.
아니 비효율 정도가 아니라..SqlMapConfig.xml이 커지면..매번 저걸 호출하게 되므로
개발하기가 쉽지 않다 -.-;

반드시 파일 변경 여부를 체크하는 로직이 들어가야 할 듯....

어차피 사이트마다 SqlMapClient를 호출하는 부분이 다르기 때문에
어디에서 인터셉트를 해야 할지 천차만별이라...
아무튼...

Manager 클래스에서 적당히 xml을 체크해서 변경된 녀석이 있으면 reader를 다시 읽도록 하던가...
아니면..Ibatis를 더 까고 들어가서 (사실 IbatisPlugin이라고 하면 이게 맞을 듯...)
어딘가 Map 같은 걸로 관리 되고 있을 각각의 쿼리 XML 파일만 다시 load되도록 해주면
좀 더 멋진 코드가 작성 될 수 있을 것 같다.

라고 하지만..아이바티스..2.3 버전은
JavassistClassBytecodeProcessor 의 제약에 너무 많이 걸린다..


암튼..일단, 플러그인 작동 방식이 궁금해서 작성해본 것... 우리 사이트에 맞게 수정해서 만들었는데
꽤 잘 된다...
JavassistClassBytecodeProcessor를 알게 된 것도.. 큰 행운..


저런 생각을 하는 사람들은
정말 뭐하는 사람들일까.. --; AOP 비슷하기도 하고... 대단하다..