在Java中,我可以动态地向类路径添加内容并装入类(“动态”是指无需重启应用程序)。是否有一个已知的框架/库可以在不重新启动的情况下动态加载/卸载模块?
通常的设置是负载均衡器,应用程序的几个实例,以及逐步部署和重启新版本。我正在寻找其他的东西-有几个服务/插件的应用程序,可能是单实例桌面应用程序,其中禁用单个服务的成本很低,但关闭或重新启动整个应用程序是不可行的。
我在考虑典型的插件基础架构,插件可以在不重新启动应用程序的情况下进行升级或安装。我是必须从头开始编程,还是已经有可用的东西了?Spring兼容和开源是一个加分,但不是必需的。
发布于 2009-01-06 07:49:57
您可以考虑在中运行spring应用程序。
我相信DMServer是一个基于模块的Java应用服务器,旨在运行基于OSGI的企业Java应用程序和基于Spring的应用程序
您可以在这篇Hello, OSGi, Part 2: Introduction to Spring Dynamic Modules文章中找到更多细节,特别是如何使用Spring DM在运行的系统中动态安装、更新和卸载模块。
注意:当您谈到“无需重启应用程序即可升级或安装插件”时,首先想到的就是。
这一切都是关于将应用程序模块化到更小的捆绑包中。
每个包都是一个紧密耦合的、可动态加载的类、jars和配置文件的集合,这些类、jars和配置文件显式地声明了它们的外部依赖(如果有的话)。
发布于 2009-01-06 08:00:46
也许最简单的方法是用自己的类加载器加载每个插件。然后丢弃类加载器并创建一个新的类加载器来重新加载插件。您会希望插件API中的init()和destroy()方法允许使用启动/关闭类型的功能。
这也有将插件相互隔离的优点。
URLClassLoader是你开始做这个的起点。一般的想法是,你提供一个XxxPlugin超类,任何插件的子类。以Applet为例,它本质上是一个GUI插件(或Midlet等)。
https://stackoverflow.com/questions/415733
复制相似问题