我是OSGI
技术的新手。动态添加模块到工作程序的想法对我来说似乎非常有吸引力。我知道OSGI
每个包使用自己的类加载器。据我了解
我们已经"热部署"。但我误解了这是如何运作的。
我想了解这项技术是如何运作的。因此,我想写自己的"热门部署者"用热的.class文件替换。
例如,在我的脑海里诞生了以下想法:
用2个线程编写应用程序:
第一个线程在永恒循环中输出一些消息(old message
)
在第二个线程中,我们等待一段时间,然后替换outputes old message
的类的.class文件。现在我们的thread1 outputes new message
。不一定new message
在执行第二个线程后立即输出。我知道我们不能卸下阶级力量。
我只是想看到可以编写自定义"热部署者"。
我在google中找不到可以帮助我的信息。
请帮助我实现我的想法。
P.S。
我真的没有足够的信息,我可以在哪里搜索信息以及如何实现。 我已经阅读了所有答案 - 但我无法实现它。
P.S。 我知道在jsp和servlet中解决了熟悉的问题。规范要求在没有服务器重启的情况下热替换jsp。但我知道jsp最终会编译成.class文件。
答案 0 :(得分:1)
在OSGi中,您可以在运行时部署或更新软件包,而不是在软件包中的类。您可能正在寻找JRebel为您提供的类似解决方案。
您应该集中精力设计捆绑包,而不是类更换。在这种情况下,捆绑部署将像您刚刚更换一个类(片刻)一样快。此外,您应该设计您的架构,如果您更新捆绑包,它将不会导致重新启动所有技术。
我建议你应该阅读其他人在OSGi世界中使用的模式,以保持他们的捆绑延迟:whiteboard pattern,extender model
答案 1 :(得分:1)
我想学习如何开车......请向我解释如何建造我自己的燃气涡轮发动机。是的,我知道汽车不使用燃气涡轮发动机,但我仍然希望建造汽车,因为我相信这将有助于我更好地了解驾驶。
OSGi模块重新加载在类级别不起作用,它在作为类聚合的bundle(模块)级别工作。它通过处理和重新创建整个类加载器来实现这一点。
想知道低级细节并没有错,但这通常应该在广泛的理解之后。