Java Web 应用程序“插件”架构

Posted

技术标签:

【中文标题】Java Web 应用程序“插件”架构【英文标题】:Java Web application "plugin" architecture 【发布时间】:2012-12-30 12:56:24 【问题描述】:

请提供有关如何为 Java Web 应用程序做“插件”架构的建议。

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

我需要像Redmine 这样的东西。可以启用/禁用任何模块的地方,更新

请排除 OSGi、Portlet 等繁重的选项。

OSGi 太重,没有很好地采用 web 技术。我已经看过Eclipse Germini; Portlet 只是老了,从来没有流行过。

【问题讨论】:

我已授予赏金,但问题仍未结束。 【参考方案1】:

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

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

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

【讨论】:

如何将此应用到 Web 部件?你会把所有的插件都做成 .war 吗? 好吧,如果这些插件可以是独立的 webapps,那么你不需要做任何事情,例如 Tomcat manager webapp 允许你启动/停止/重新加载 webapps 而无需关闭和重启服务器:tomcat.apache.org/tomcat-7.0-doc/manager-howto.html 插件不应该是独立的网络应用。这样,如何集成它们(交叉链接、安全性、单点登录等)将有很多工作 那我想把插件做成 .war 文件是没有意义的。【参考方案2】:

我将尝试提供几种可能的解决方案。我确实花了一些时间为我正在从事的项目准备小型 PoC,所以希望下面的选项是相关的。

重要提示:定义一些扩展点、解析并找到可用的实现真的很容易。有很多可用的解决方案,例如好的简单的一种——JSPF

资源是WEB应用的主要问题

OSGi

OSGi,还不错,而且很有用。它似乎很重(有些实现很重),但这是标准化平台的价格。我建议检查Apache Felix。它可以在“轻量级”模式下使用。顺便说一句,它包括构建为松散耦合的基于插件的应用程序的 Web 控制台,可能会有所帮助:

一些例子Extending the Apache Felix Web Console

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

您也可以查看eie-manager,它简洁明了,使用 OSGi 管理插件。对你来说可能是一个很好的例子。

自定义插件框架

我建议查看Jenkins/Hudson 背后的解决方案。我想说Jenkins插件系统相当成熟可靠。可以作为一个很好的例子。

也请查看Hudson Plugin Architecture

简单的解决方案

对于我的项目,我使用自定义依赖解析器构建了基于 JSPF 的插件抽象层。

优点:

简单又小巧 干净的概念 效果很好

缺点:

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

我建议仅在您确实需要一些简单性并想要控制一切时才使用JSPF。 JPF 提供了许多开箱即用的有趣功能,例如:

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

问题是 JPF 已经死了。

建议

请花些时间与Apache Felix 相处。它已经足够成熟,因此您的时间投资可能会得到很多回报。

【讨论】:

【参考方案3】:

Atlassian 开源了他们的插件系统here。我看到 Atlassian 团队正在大力工作。值得探索它的documentation

【讨论】:

以上是关于Java Web 应用程序“插件”架构的主要内容,如果未能解决你的问题,请参考以下文章

Java Web 三层架构详解

大型Java Web项目的架构和部署问题

Java MVC Web 框架的架构差异

Gradle构建Java Web应用:Servlet依赖与Tomcat插件(转)

Java高级架构,java8新特性,P2P金融项目,程序设计,功能设计,第三方支付,web安全视频教程

Java 安全架构