2013-01-16 38 views
15

请给出关于如何为Java Web应用程序执行“插件”体系结构的建议。Java Web应用程序“插件”体系结构

目前我们在Tomcat servlet容器中使用了相当简单和标准的Spring + Hibernate + Struts 2。 (用maven构建)

我需要类似Redmine。哪里可以启用/禁用任何模块,更新 Redmine UI

请排除诸如OSGi,Portlet之类的繁重选项。

  • OSGi太重了,没有很好的网络技术的采用。我已经看过Eclipse Germini;
  • Portlet它只是老,从来没有流行。
+0

我已经授予赏金,但问题仍然是音符关闭。 –

回答

13

我会尽力提供几种可能的解决方案。我确实花了一些时间为我正在进行的项目准备小型PoC,所以我们希望以下选项是相关的。

重要注意事项:定义一​​些扩展点,确定并找到可用的实现非常简单。有很多可用的解决方案,例如良好的和简单的一个 - JSPF

资源是Web应用程序的主要问题

OSGi的

OSGi的,是没有那么糟糕,并能有用。它似乎很沉重(有些实现很重),但这是标准化平台的价格。我会建议检查Apache Felix。它可以用于“轻量级”模式。顺便说一句,它包括Web控制台,其是建立为松散耦合基于插件的应用,可能是有帮助的:

enter image description here

一些实例Extending the Apache Felix Web Console

Web控制台可以通过注册的扩展OSGi服务的 接口javax.servlet.Servlet的服务属性 felix.webconsole.label设置为标签(URL中的最后一个段) 页面。相应的服务被称为Web控制台插件或简称为 插件。

您还可以检查eie-manager这是干净和简单的,并使用OSGi来管理插件。可能是你的一个很好的例子。

自定义插件框架

我建议检讨背后Jenkins/Hudson解决方案。我会说詹金斯插件系统是相当成熟和可靠的。可以作为一个很好的例子。

enter image description here

也请您查看Hudson Plugin Architecture

简单的解决方案

对于我的项目,我已经建立基于JSPF自定义依赖解析器插件抽象层。

优点:

  • 简单的小
  • 廉洁理念
  • 做工不错

缺点:

  • 没有适当的插件管理可能会很慢(全类路径搜索)
  • 提供了非常基本的功能
  • 可能需要额外注意

我会建议使用JSPF只有当你真的需要一些简单,想控制一切。 JPF提供了很多有趣的功能开箱即用,例如:

插件可以“热注册”和 应用程序执行过程中甚至取消注册。更重要的是,已注册的插件可以在“即时”激活和停用 ,最大限度地减少运行时资源的使用情况 。

问题是JPF死了。

建议

请花一些时间与Apache Felix。它足够成熟,所以你的时间投资可能会收回很多。

6

检查出这个问题的答案:Best way to build a Plugin system with Java

如果你不信任插件代码,你可以实现沙盒,如下所述:Sandbox against malicious code in a Java application

开源Java Plug-in Framework项目支持插件停用,即使它对于您的目的来说太重了,您也可以从中获得灵感。

+0

如何将此应用于Web部件?你会将所有插件制作成.war吗? –

+0

好吧,如果这些插件可以是独立的webapps,那么你不必做任何事情,例如Tomcat管理器webapp允许你启动/停止/重新加载webapps,而不必关闭并重新启动服务器:http:/ /tomcat.apache.org/tomcat-7.0-doc/manager-howto.html – lbalazscs

+0

插件不应该是独立的webapps。通过这种方式,将会有很多工作要做(如交叉链接,安全性,simgle登录等) –

2

Atlassian开放源代码插件系统here。我看到它正在被Atlassian团队大量使用。值得探索其documentation