Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Web应用程序“;插件";建筑学_Java_Maven_Web Applications_Plugins_Architecture - Fatal编程技术网

Java Web应用程序“;插件";建筑学

Java Web应用程序“;插件";建筑学,java,maven,web-applications,plugins,architecture,Java,Maven,Web Applications,Plugins,Architecture,请就如何为Java web应用程序提供“插件”架构给出建议 目前,我们在TomcatServlet容器中使用非常简单和标准的Spring+Hibernate+Struts 2。(使用maven构建) 我需要像这样的东西。其中任何模块都可以启用/禁用、更新 请排除OSGi、Portlet等重选项 OSGi太重了,并没有很好地采用web技术。我已经看过了 它只是很古老,从未流行过 查看此问题的答案: 如果您不信任插件代码,可以实现沙箱,如下所述: 开源项目支持插件停用,即使对于您的目的来说它太重

请就如何为Java web应用程序提供“插件”架构给出建议

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

我需要像这样的东西。其中任何模块都可以启用/禁用、更新

请排除OSGi、Portlet等重选项

  • OSGi太重了,并没有很好地采用web技术。我已经看过了
  • 它只是很古老,从未流行过

查看此问题的答案:

如果您不信任插件代码,可以实现沙箱,如下所述:


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

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

重要提示:定义一些扩展点、解析和查找可用的实现非常容易。有很多可用的解决方案,例如好的和简单的解决方案--

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

OSGi

OSGi并没有那么糟糕,而且非常有用。它看起来很重(有些实现很重),但这是标准化平台的价格。我建议你检查一下。它可以在“轻量级”模式下使用。顺便说一下,它包括Web控制台,它构建为松散耦合的基于插件的应用程序,可能会有帮助:

一些例子

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

您还可以检查哪个插件干净、简单,并使用OSGi管理插件。可能是你的一个好榜样

自定义插件框架

我建议回顾一下背后的解决方案。我想说Jenkins插件系统是相当成熟和可靠的。可以作为一个很好的例子

请同时检查

简单解决方案

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

优点:

  • 简陋
  • 清洁概念
  • 很好用
缺点:

  • 没有适当的插件管理可能会很慢(完整的类路径搜索)
  • 提供非常基本的功能
  • 可能需要额外注意
我建议只有当你真的需要一些简单性并且想要控制一切时才使用。提供了许多开箱即用的有趣功能,例如:

插件可以“热注册”,甚至在运行期间取消注册 应用程序执行。更重要的是,注册的插件可以 “动态”激活和停用,最小化运行时资源 用法

问题是JPF已经死了

建议


一定要花点时间和她在一起。它已经足够成熟了,所以你的时间投资可能会有很大回报。

Atlassian开源了他们的插件系统。我看到亚特兰西队正在进行大量的工作。值得探索它的

如何将其应用于web部件?您会将所有插件都设置为.war吗?如果这些插件可以是独立的webapps,那么您不必做任何事情,例如,Tomcat manager webapp允许您启动/停止/重新加载webapps,而无需关闭并重新启动服务器:插件不应该是独立的webapps。通过这种方式,将有大量的工作如何集成它们(交叉链接、安全性、simgle登录等),然后我想将插件作为.war文件是没有意义的。我已经奖励了bounty,但问题仍然没有解决。