簡體   English   中英

Java Web應用程序“插件”架構

[英]Java Web application “plugin” architecture

請提供有關如何為Java Web應用程序執行“插件”體系結構的建議。

目前我們在Tomcat servlet容器中使用了非常簡單和標准的Spring + Hibernate + Struts 2。 (用maven建造)

我需要像Redmine這樣的東西。 可以啟用/禁用任何模塊,更新 Redmine UI

請排除OSGi,Portlet等重要選項。

  • OSGi太重了,沒有很好地采用網絡技術。 我已經看過Eclipse Germini ;
  • Portlet它只是舊的,從未受歡迎。

我會嘗試提供幾種可能的解決方案。 我確實花了一些時間為我正在進行的項目准備小型PoC,所以我們希望下面的選項是相關的。

重要說明:定義一些擴展點非常容易,解決並找到可用的實現。 有很多可用的解決方案,例如好的和簡單的解決方案 - JSPF

資源是WEB應用程序的主要問題

OSGi的

OSGi,並不是那么糟糕,可能很有用。 它似乎很重(有些實現很重)但這是標准化平台的價格。 我建議檢查Apache Felix 它可以用於“輕量級”模式。 順便說一句,它包括構建為松散耦合的基於插件的應用程序的Web控制台,可能會有所幫助:

在此輸入圖像描述

一些示例擴展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項目支持插件停用,即使它太重,您也可以從中受到啟發。

Atlassian 在這里開源他們的插件系統。 我看到Atlassian團隊正在大力開展工作。 值得探索其文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM