Java中可动态加载和卸载的应用程序模块-怎么样?

弗拉迪斯拉夫·拉斯特鲁尼:

我正在编写一个使用外部模块的服务器应用程序。我想使它们无需服务器重新启动即可升级。我怎么做?我已经找到了OSGi,但对于我的任务而言,它看起来非常复杂且庞大。

简单的* .jar文件是可以的,但是我想一旦将它们加载,就无法从VM卸载它们并即时替换为另一个版本。

您可以建议哪种方法?

迈克尔·皮格(Michael Pigg):

似乎OSGi正是您所要的。它可能很复杂,但是有解决方法。通过使用SpringDM或类似的东西来处理运行时注册和使用服务的样板任务,可以减轻某些复杂性。注释驱动的服务注册和依赖注入确实减少了需要编写的代码量。

降低复杂性的另一种方法是将大量应用程序部署在单个捆绑包中,而仅将需要模块化的部分部署到自己的捆绑包中。这减少了您在运行时注册和使用其他捆绑软件中的服务的风险,并降低了部署的复杂性。与标准Java应用程序一样,在捆绑包中运行的代码可以使用同一捆绑包中的其他代码-无需与OSGi运行时进行交互。这种方法的反义是将您的应用程序分解为许多离散的捆绑包,这些捆绑包将定义明确的服务导出到系统中的其他捆绑包。尽管这是一种非常模块化的方法,但它确实带来了额外的管理所有捆绑软件的复杂性以及与OSGi运行时的更多交互。

我建议阅读“ OSGi in Action”一书,以了解这些问题并查看一些不错的示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

OOAD和Cassandra。怎么样?

Java。算术运算。怎么样?

Java Antivirus ...可能吗?怎么样?

ABAP中的字典。怎么样?

金属中的多个模型。怎么样?

怎么样 榆树中读过的符号?

您是否在Vim中调试C ++代码?怎么样?

PHP中的两个数组相减怎么样

在GTM中,字符串> 0。怎么样?

Yii2 + AngularJS在单个应用程序中-怎么样?

部署为仅WAR的EJB 3.1应用程序:ejb-jar.xml怎么样?

尝试在 ASP 应用程序中使用 Https,`xmlns` 的 <html> 属性怎么样?

将点击处理程序添加到动态生成的内容中。怎么样?

在Flutter Firebase应用中存储API密钥?我需要隐藏它们吗?怎么样?

怎么样[H | _]和[_ | T]在谓词中起作用吗?

最后一个UITableViewCell中的UICollectionView和一致滚动?怎么样?

NodeJS,fs.readFileSync逐字符串读取和运行。怎么样?

Spring Websocket配置:一起使用WebSocketMessageBrokerConfigurationSupport和WebSocketConfigurer-怎么样?

每个类分别发送和插入容器值。怎么样?

将数组和其他参数传递给函数。怎么样?

“ apt-get”和“ aptitude”之间的真正区别是什么?(“ wajig”怎么样?)

将Array中的“键:值”对中的StandardSQL BigQuery值分成单独的列。怎么样?

怎么样当HashMap的值就是Java 8由多个属性的对象的列表

Java继承。家长有家长的名单,孩子必须有孩子的名单。怎么样?

怎么样?运算符不同于在类型中包括未定义?

Hibernate源代码中的volatile屏障将“与其他线程同步状态”。怎么样?

在C中没有参数的printf()可以正常编译。怎么样?

怎么样“在[0,0]中for(const [[[[[[[a,b,c]]]]]];” 甚至有效吗?

装入运行在Heroku dyno上的Docker容器中。怎么样?