当前位置: 首页 > 知识库问答 >
问题:

春分开始通知

江奕
2023-03-14

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

启动Equinox后,我想运行一些服务。一种选择是使用工作正常的控制台,但是,我想在点击“运行”按钮后自动运行一些东西,而不是每次都在控制台窗口中再次写入命令。

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

  • 只有在安装并启动所有捆绑包后,我才能运行我的应用程序

有没有一种方法来注册一些通知,以便知道Equinox在启动期间何时完成安装和启动所有应该安装的包?

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

共有2个答案

彭星津
2023-03-14

通过调用context.addFrameworkListener在捆绑包的激活器上注册一个框架事件,并在启动STARTED事件时启动应用程序。

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

蒋茂材
2023-03-14

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

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

所以问题是,您不知道何时所有捆绑都已启动。顺便说一句,如果提供服务impl的捆绑包正在使用例如blueprint,那么当blueprint extender尚未运行时,它们的捆绑包可以处于活动状态。因此,可能没有解决方案来真正确定所有捆绑包何时完全启动。

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

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

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

除了这两种变体之外,我不知道有任何可靠的机制。

 类似资料:
  • 如何使用命令生成强化报告???在linux上。 在命令中,我们如何只包含一些用于分析的文件夹或文件,以及如何指定存储报告的位置。等 请帮忙。。。。 谢谢,Karthik

  • 我的Spring云流应用程序中有一个简单的Kafka生成器。当我的Spring应用程序启动时,我有一个@PostConstruct方法,它执行一些协调并尝试将事件发送给Kafka生产者。 问题是,当对账开始将enet发送到其中时,我的Kafka制作人还没有准备好,导致以下情况: org . spring framework . messaging . messagedeliveryexceptio

  • 我是Java的初学者,我有这个疑问。是否可以在ArrayList上使用Java中增强的for循环,但从指定的点而不是ArrayList开始[0]。 我可以使用增强的for循环并从calc[2]而不是calc[0]开始迭代吗??如果可能,我该怎么做?在我的特定情况下,使用增强的for循环会更好,而不是普通的for循环。

  • 本文档的目的是让您学习完成之后,能对 Jboot 有一个整体的了解,开始基于 Jboot 开发自己的应用程序。 本文档假设您已经具备了如下基本技能: Java 编程语言的使用 Maven 依赖管理的使用 Java 开发工具的使用 通过开发工具创建 Maven 项目 略 在 pom.xml 上添加 Jboot 依赖 <dependency> <groupId>io.jboot</groupI

  • 问题内容: 当我查看net / http服务器接口时,没有看到一种明显的方式来通知并在http.Server启动并 开始 侦听时作出反应: 直到服务器真正关闭后,该函数才返回。我还查看了服务器类型,但似乎没有什么可以让我把握这一时机。某些功能或频道会很棒,但我看不到任何东西。 有什么方法可以让我检测到该事件,还是我只需要“熟睡”一下以伪造它? 问题答案: ListenAndServe是一个帮助程序

  • 我想在记录器服务运行时显示通知。用户应该能够在通知中直接暂停或停止记录器。所以我在通知中添加了两个按钮,并实现了一个BroadcastReceiver来处理按钮点击。 它几乎像我想要的那样工作,但有一个问题我无法解决。当用户单击按钮时,我想显示活动。这是我的代码: 目前执行每个按钮的正确操作,但如果用户单击时应用程序不可见,则不显示该应用程序。如何实现这一点? 有必要在这里实现BroadcastR