1

I am working on a project that requires to monitor and manage (start, stop, install, uninstall, update) OSGi bundles in an OSGi based application using pre-programed instructions, similar to java reflections, the OSGi application can reflect upon itself by monitoring itself and its context, it can update or remove some bundle or can add(install and start) a new bundle.

For example, there is a chat application developed using OSGi bundles. In order to add self-managing characteristics to it, there need to be a mechanism to monitor and manage (install/uninstall, start/stop, update) OSGi bundles autonomically (without human intervention or as little human involvement as possible). Any idea how this can be achieved?

I tried to explain the problem, but feel free to ask if you dont understand my question.

P.S. I am using OSGi Equinox framework.

Regards.

4

4 回答 4

3

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

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

org.osgi.framework.BundleContext

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

一旦你有了 Bundle 对象,你就可以查找关于这个包的所有内容,比如名称、导入的包等;并启动、停止、更新捆绑包。因此,您可以在那里实现您的零管理策略状态的任何逻辑(例如,在发生错误时重新启动所有插件包,或搜索合适的插件并在必须呈现新内容时安装它,或其他)

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

希望这可以帮助 :)

于 2012-07-16T06:59:46.997 回答
1

看看org.osgi.framework javadoc。从包的包上下文中,您可以安装和获取包。捆绑API 允许您停止、启动和更新捆绑。

于 2012-07-15T20:56:12.657 回答
1

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

于 2013-07-17T06:14:51.793 回答
1

BundleListener类可能对您有用,它会通知您任何捆绑包开始或停止。

于 2012-07-16T06:17:46.750 回答