我正在开发一个项目,需要使用预先编写的指令监视和管理(启动,停止,安装,卸载,更新)基于OSGi的应用程序中的OSGi包,类似于java反射,OSGi应用程序可以反思通过监视自身及其上下文,它可以更新或删除一些包,也可以添加(安装和启动)新包。
例如,有一个使用OSGi包开发的聊天应用程序。为了向其添加自我管理特性,需要有一种机制来自动监视和管理(安装/卸载,启动/停止,更新)OSGi包(无需人为干预或尽可能少的人为参与)。知道如何实现这一目标吗?
我试图解释这个问题,但随便问你是否不理解我的问题。
P.S。我正在使用OSGi Equinox框架。
问候。
答案 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框架(包括非常重要的配置管理员)。