앞서 만들었던 Embedded Jetty Restful API Server에 Infinispan 6.0 Alpha를 내장시키고, 거기에 Quartz를 추가해서 주기적으로 Infinispan Data를 Cleansing하는 스케쥴러를 등록했다.
jar 패키지 하나에 Jetty, Infinispan, Quartz를 모두 내장하려고 하다보니 패키지 크기가 너무 커져서 source를 컴파일한 내용만 jar 패키지로 묶고, 나머지는 외부 라이브러리 참조로 했다.
그나저나 Quartz도 굉장히 쓸만하게 잘 만들었던데 갑자기 나도 뭔가 오픈소스로 만들어보고 싶어진다..-.-
만들고 있는 Open API Delivery Platform은 크게 다음과 같이 나누어 진다.
- Memory Data Grid : Infinispan
- Log Collector : Flume NG
- Log Analyzer : Hadoop Map/Reduce
Gateway와 Memory Data Grid간의 통신은 Restful API로 하기로 했다.
그런데 문제는 Memory Data Grid와 API Center간에도 Restful API로 데이터 연동을 해야 한다는 것.
Jboss가 너무 무겁기 때문에, Jetty 9와 Infinispan 6을 Embedding하여 하나로 묶고, Restful API를 제공할 수 있는 별도의 Java Application을 작성하기로 했다. Jetty + Jersey + Infinispan을 하나로 묶어서 jar 패키지로 만들기 시작했다.
그런데, 패키지로 배포하는 Jetty에서 제공하는 라이브러리들과 Infinispan에서 제공하는 라이브러리들이 버전이 달라 충돌을 일으켰다. 실행은 되지만, 가장 중요한 Restful API의 Path 인식이 제대로 안 된다..-.-
javax.ws.rs.core Module이 뭔가 오작동을 일으키는데 무엇 때문에 @Path Annotation을 인식하지 못하는지 한참을 헤매다가, 라이브러리들 간의 Dependency로 인한 버전 충돌을 의심하게 되었다.
그래서 결국 라이브러리들의 Dependency를 관리하기 위해서 Maven을 손대게 되었다.
행여나 최악의 경우를 대비해서 Infinispan만 내장한 Jboss용 WAR를 하나 만들어 놓고, 수십번의 삽질 끝에 드디어 최적의 라이브러리들이 담긴 jar 패키지를 완성했다. 크흑...
이건 정말 인간 승리다.
지난 주말 이틀 간의 시간을 돌리도!
댓글을 달아 주세요
댓글 RSS 주소 : http://www.yongbi.net/rss/comment/575