首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Equinox开始通知

Equinox开始通知
EN

Stack Overflow用户
提问于 2014-01-30 09:05:47
回答 2查看 117关注 0票数 0

背景

我正在使用Eclipse中的Equinox运行一组包(其中有些是Eclipse工作集中的项目)。

在启动Equinox之后,我想提供一些服务。一种选择是使用工作正常的控制台,但是,我希望在单击" run“按钮之后自动运行一些东西,而不是每次都在控制台窗口中编写命令。

我想要运行的服务的另一个特殊之处是它消耗了另一个只能在运行时解析的服务。在运行时,我的应用程序检查谁可以提供某些服务并在服务提供者之间进行选择。这意味着:

  • 只有在安装和启动了所有包之后,我才能运行我的应用程序。
  • 我无法预先知道(在编译时)我的应用程序依赖于哪一个包。服务提供者是根据运行时参数选择的。

我的问题是:

有没有办法注册一些通知,以便知道Equinox什么时候完成了它在启动时应该安装和启动的所有包?

如果有这样一个钩子,我可以用它来知道什么时候可以启动我的应用程序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-02 08:39:44

找到了。

通过调用框架事件在Bundle的激活器上注册一个context.addFrameworkListener,并在触发已启动事件时启动应用程序。

很好,我只是想知道我是需要在一个新线程上启动应用程序,还是可以直接从事件处理程序启动我的应用程序。

票数 0
EN

Stack Overflow用户

发布于 2014-01-31 10:37:27

我认为在OSGi中,当试图在应用程序中构建可扩展性时,这是一个非常常见的问题。让我们看看我的理解是否正确。

您有一个服务接口,用于为您的包提供某种扩展。当加载了所有扩展时,您的包应该运行。

所以问题是,当所有的包都打开时,您不知道。顺便说一句。如果提供服务隐式的捆绑包正在使用例如蓝图,那么它们的包可以是活动的,而蓝图扩展程序还没有运行。因此,可能没有真正确定所有包何时完全启动的解决方案。

因此,在这种环境中,有两个可能的解决方案:

  1. 您的包开始使用现有的服务,并侦听即将出现的其他服务,并进行必要的工作来集成这些服务。
  2. 您可以在配置中描述哪些扩展应该在那里。在这种情况下,每个扩展可以使用服务属性中的唯一名称注册它们的服务。然后,您可以在包的配置中定义哪些名称需要在包真正启动之前出现。

例如,在CXF DOSGi中使用了案例2。在那里,服务端点可以指定为它所需要的“意图”。只有当所有意图都以具有这些名称的服务的形式出现时,才会发布服务端点。例如,如果您有一个安全服务,并且您的包可能在没有它的情况下启动,那么这种情况是很有用的,因为那时它是不安全的。

除了这两个变体,我不知道任何可靠的机制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21451911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档