如何通过程序监视和管理(启动,停止,安装,卸载,更新)OSGi包

时间:2012-07-15 18:23:59

标签: reflection osgi

我正在开发一个项目,需要使用预先编写的指令监视和管理(启动,停止,安装,卸载,更新)基于OSGi的应用程序中的OSGi包,类似于java反射,OSGi应用程序可以反思通过监视自身及其上下文,它可以更新或删除一些包,也可以添加(安装和启动)新包。

例如,有一个使用OSGi包开发的聊天应用程序。为了向其添加自我管理特性,需要有一种机制来自动监视和管理(安装/卸载,启动/停止,更新)OSGi包(无需人为干预或尽可能少的人为参与)。知道如何实现这一目标吗?

我试图解释这个问题,但随便问你是否不理解我的问题。

P.S。我正在使用OSGi Equinox框架。

问候。

4 个答案:

答案 0 :(得分:3)

OSGi框架已经包含了这样一种机制,使您可以使用最基本的OSGi接口完全控制捆绑生命周期。

如果你想从OSGi包中控制它,让我们称之为管理代理包,你可以使用这个包的BundleContext来:

org.osgi.framework.BundleContext

installBundle(java.lang.String location)           从指定的位置标识符安装捆绑包。 getBundles()           返回所有已安装捆绑包的列表。 getBundle(长id)           返回具有指定标识符的包。

拥有Bundle对象后,您可以查找有关该包的所有内容,例如名称,导入的包等;然后启动,停止,更新捆绑包。因此,您可以实现零管理策略所声明的任何逻辑(例如,在发生错误时重新启动所有插件包,或搜索合适的插件并在必须呈现新内容时安装它,或其他)

现在,如果您想从“外部”OSGi执行所有这些操作,则必须在管理代理程序包中为外部发布某种类型的界面。一种可能性是网页(OSGi包含一个简单的嵌入式Web服务器,请检查HTTPService)。还有很多其他的,取决于你想要达到的目标。

希望这有帮助:)

答案 1 :(得分:1)

查看org.osgi.framework javadoc。从您的捆绑包的bundle context,您可以安装并获取捆绑包。 bundle API允许您停止,启动和更新捆绑包。

答案 2 :(得分:1)

BundleListener类可能对您有用,它会通知您任何启动或停止的包。

答案 3 :(得分:0)

您可能希望查看Apache Felix FileInstall源代码。它可能是最简单的“管理代理”,可用于完全管理OSGi框架(包括非常重要的配置管理员)。

相关问题