[英]Java Web application “plugin” architecture
請提供有關如何為Java Web應用程序執行“插件”體系結構的建議。
目前我們在Tomcat servlet容器中使用了非常簡單和標准的Spring + Hibernate + Struts 2。 (用maven建造)
我需要像Redmine這樣的東西。 可以啟用/禁用任何模塊,更新
請排除OSGi,Portlet等重要選項。
我會嘗試提供幾種可能的解決方案。 我確實花了一些時間為我正在進行的項目准備小型PoC,所以我們希望下面的選項是相關的。
重要說明:定義一些擴展點非常容易,解決並找到可用的實現。 有很多可用的解決方案,例如好的和簡單的解決方案 - JSPF
資源是WEB應用程序的主要問題
OSGi的
OSGi,並不是那么糟糕,可能很有用。 它似乎很重(有些實現很重)但這是標准化平台的價格。 我建議檢查Apache Felix 。 它可以用於“輕量級”模式。 順便說一句,它包括構建為松散耦合的基於插件的應用程序的Web控制台,可能會有所幫助:
可以通過為接口javax.servlet.Servlet注冊OSGi服務來擴展Web控制台,並將服務屬性felix.webconsole.label設置為頁面的標簽(URL中的最后一個段)。 相應的服務稱為Web控制台插件或簡稱插件。
您還可以查看eie-manager ,它簡潔明了,並使用OSGi來管理插件。 可能是一個很好的例子。
自定義插件框架
我建議審查Jenkins / Hudson背后的解決方案。 我會說Jenkins插件系統非常成熟可靠。 可以作為一個很好的例子。
還請檢查Hudson插件架構
簡單解決方案
對於我的項目,我使用自定義依賴項解析器構建了基於JSPF的插件抽象層。
優點:
缺點:
我建議只使用JSPF,如果你真的需要一些簡單性並想控制一切。 JPF提供了許多開箱即用的有趣功能,例如:
插件可以“熱注冊”,甚至可以在應用程序執行期間取消注冊。 更重要的是,可以“動態”激活和停用已注冊的插件,從而最大限度地減少運行時資源的使用。
問題是JPF已經死了。
建議
花點時間在Apache Felix上 。 它足夠成熟,所以你的時間投資可能會收回很多。
看看這個問題的答案: 用Java構建插件系統的最佳方法
如果您不信任插件代碼,則可以實現沙盒,如下所述: 沙箱對抗Java應用程序中的惡意代碼
開源Java Plug-in Framework項目支持插件停用,即使它太重,您也可以從中受到啟發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.