0

我是OSGI技术新手。动态添加模块到工作程序的想法对我来说似乎很有吸引力。我知道OSGI每个包使用自己的类加载器。据我了解,因此我们有“热部署”。但我误解了这是如何工作的。

我想了解这项技术是如何工作的。因此,我想用热 .class 文件替换编写自己的“热部署器”。

例如在我的脑海中诞生了以下想法:

使用 2 个线程编写应用程序:

第一个线程old message在永恒循环中输出一些消息()

在第二个线程中,我们等待一段时间,然后替换输出的类的 .class 文件old message。现在我们的 thread1 输出new message。不一定new message在第二个线程执行后立即输出。我知道我们不能卸下阶级力量。

我只是想看看是否可以编写自定义“热部署器”。

我在谷歌中找不到可以帮助我的信息。

请帮助我实现我的想法。

附言

我真的没有足够的信息可以在哪里搜索信息以及如何实现。我已阅读所有答案 - 但我无法意识到这一点。

PS 我知道在 jsp 和 servlet 中解决了熟悉的问题。规范强制热替换 jsp 而无需重新启动服务器。但我知道 jsp 最终会编译为 .class 文件。

4

2 回答 2

1

在 OSGi 中,您可以在运行时部署或更新包,而不是包中的类。可能您正在寻找 JRebel 提供给您的类似解决方案。

您应该专注于将捆绑包设计为简单,而不是替换类。在这种情况下,捆绑部署将与您刚刚替换一个类一样快(片刻)。此外,您应该以这样一种方式设计您的架构,即如果您更新一个捆绑软件,它不会导致您的所有技术重新启动。

我建议,你应该阅读其他人在 OSGi 世界中使用的模式来保持他们的包延迟耦合:白板模式扩展器模型

于 2014-05-06T09:04:09.170 回答
1

我想学习如何驾驶汽车……请向我解释如何制造我自己的燃气涡轮发动机。是的,我知道汽车不使用燃气涡轮发动机,但我仍然想制造一台,因为我相信这将帮助我更好地理解驾驶。

OSGi 模块重新加载在类级别不起作用,它在作为类聚合的包(模块)级别起作用。它通过处理和重新创建整个类加载器来做到这一点。

想知道底层细节并没有错,但这通常应该在广泛了解之后进行。

于 2014-05-08T10:58:36.883 回答