我有一個相當簡單的場景:OSGi或URLClassLoader?
我的應用程序有核心jar文件,其中包含我的應用程序的邏輯。這個核心jar應該在運行時動態監視文件夾,當插件jar被放置在那裏時,它應該加載並準備好使用它。可能有很多插件罐。
什麼是你的經驗最快和最可維護的方式來實現呢?我有兩個建議:
1)一些OSGi容器,Apache Felix文件安裝(觀看dir的新包)。而核心罐被作爲捆綁裝入容器中。
1.1問題是核心jar應該如何檢測到新安裝的bundle是它的插件?是否有辦法監視每個添加的包,並使用我的獨特字符串(如「kalazplugin」)來查找某種設置?換句話說:如何區分我的插件包?
2)只要觀察目錄中的變化以及何時刪除jar,然後使用URLClassLoader動態加載它並自己實現它。我可能需要某種配置文件爲每個插件,這將指定一些設置,例如...
謝謝我要使用Felix的iPOJO Implementatino。但是我認爲使用標準的BundleActivator類可以(理論上)完成幾乎相同的功能,而我所有的「擴展」實現相同的接口。是否有任何折衷(除了更多的代碼)與擴展模式? –
是的,你可以在BundleActivator中做同樣的事情,但是,如果你有200個插件,這將達到200個BundleActivators,對插件註冊過程的任何改變將需要改變和重新部署200個插件包!你得到的照片。 –
擴展模式可能不是最好的選擇,儘管OP並未指定他在安裝後實際上想要對庫進行的操作。想必你想從它加載一個類?最好使用Objects而不是Classes來做到這一點...即使用OSGi Service Registry。只需定義一個接口並允許插件JAR發佈該接口的實例。 –