背景
我正在使用Eclipse中的Equinox运行一组包(其中有些是Eclipse工作集中的项目)。
在启动Equinox之后,我想提供一些服务。一种选择是使用工作正常的控制台,但是,我希望在单击" run“按钮之后自动运行一些东西,而不是每次都在控制台窗口中编写命令。
我想要运行的服务的另一个特殊之处是它消耗了另一个只能在运行时解析的服务。在运行时,我的应用程序检查谁可以提供某些服务并在服务提供者之间进行选择。这意味着:
我的问题是:
有没有办法注册一些通知,以便知道Equinox什么时候完成了它在启动时应该安装和启动的所有包?
如果有这样一个钩子,我可以用它来知道什么时候可以启动我的应用程序。
发布于 2014-02-02 08:39:44
找到了。
通过调用框架事件在Bundle的激活器上注册一个context.addFrameworkListener,并在触发已启动事件时启动应用程序。
很好,我只是想知道我是需要在一个新线程上启动应用程序,还是可以直接从事件处理程序启动我的应用程序。
发布于 2014-01-31 10:37:27
我认为在OSGi中,当试图在应用程序中构建可扩展性时,这是一个非常常见的问题。让我们看看我的理解是否正确。
您有一个服务接口,用于为您的包提供某种扩展。当加载了所有扩展时,您的包应该运行。
所以问题是,当所有的包都打开时,您不知道。顺便说一句。如果提供服务隐式的捆绑包正在使用例如蓝图,那么它们的包可以是活动的,而蓝图扩展程序还没有运行。因此,可能没有真正确定所有包何时完全启动的解决方案。
因此,在这种环境中,有两个可能的解决方案:
例如,在CXF DOSGi中使用了案例2。在那里,服务端点可以指定为它所需要的“意图”。只有当所有意图都以具有这些名称的服务的形式出现时,才会发布服务端点。例如,如果您有一个安全服务,并且您的包可能在没有它的情况下启动,那么这种情况是很有用的,因为那时它是不安全的。
除了这两个变体,我不知道任何可靠的机制。
https://stackoverflow.com/questions/21451911
复制相似问题