2012-05-03 31 views
2

有沒有人有過將Clojure代碼與現有JavaEE基礎結構(我的情況是Webspehere應用服務器8)結合的Clojure代碼?將用clojure編寫的EJB部署到獨立的應用服務器

當創建一個jar部署到應用服務器,我把(:aot [carina.stateless])project.cljcarina.stateless包括類和兩個接口所需的無狀態EJB),然後運行lein jar產生了巨大的jar包括所有相關的Clojure的命名空間。

我試圖避免lein uberjar,因爲我打算將更多的應用程序部署到相同的應用程序服務器並利用共享jar,但現在大部分代碼都已預編譯。

有沒有辦法避免這個AOT步驟產生一個巨大的jar文件,如果我正在執行的是javax.ejb.Remote並且延伸javax.ejb.Stateless

+0

我找到了一種方法來創建輕量級的EJB與clojure和部署而不需要AOT。我使用了用java編寫的小型EJB,它使用'clojure.lang.RT'來編譯clojure命名空間並調用clojure函數。示例項目可在github上獲得:https://github.com/alesk/clojure-javainterop –

回答

1

簡短的回答:

沒有,沒有辦法做你想做的。您可能能夠挑選出一些共享庫,並將它們移動到應用服務器中的類加載器層次結構中,但這可能不值得。

但關注此空間:

你的問題是,你需要(我希望)只有一些您的EJB使用的Clojure的。

目前clojure不是模塊化的,所以你不得不採取所有clojure.jar和任何依賴關係。

目前它並沒有幫助你,但你需要的功能是「樹木搖動」,通過某種尚未明確的過程,你可以「搖動」你的依賴關係和所有你不需要的部分,給你一個小的運行時間和jar。

我相信這是在最近的clojure conj與在android這樣的小平臺上進行部署有關。

+0

謝謝!罐子不是那麼大,但那個「搖樹」功能聽起來很有前途。 –

相關問題