【问题标题】:Need to install compendium to install EventAdmin?需要安装纲要才能安装 EventAdmin?
【发布时间】:2014-02-02 06:58:36
【问题描述】:

我有一个从 Web 应用程序接收大量事件(一些指标数据)的应用程序。我有一个接收这些事件并负责将这些事件转发到 osgi 包的非 osgi 应用程序。我正在尝试使用 EventAdmin 进行此通信。我看了EventAdmin is null in maven-osgi project,但没有明确回答几个问题。

我想安装 EventAdmin 服务(在非 osgi 应用程序级别)。我正在使用“org.osgi.service.event.EventAdmin”。但是,没有单独的罐子。它是纲要罐的一部分。我需要安装纲要 jar 吗?

如果我不执行上述操作,我从该调用返回的引用始终为空: ServiceReference ref = context.getServiceReference(EventAdmin.class.getName());

任何指针都非常感谢

谢谢 马斯蒂

【问题讨论】:

    标签: osgi osgi-bundle


    【解决方案1】:

    事件管理用于在一个 OSGi 框架内进行通信。您不能在 OSGi 之外使用它或在 OSGi 容器之间进行通信。对于您的情况,我建议使用 jms 进行通信,或者如果这太慢,那么 RabbitMQ 或 HornetQ 可能会起作用。为 OSGi 定义远程事件的工作也在进行中,但尚不可用。事件管理员和 jms 的一种可能组合可能是在一个包中接收 jms 并通过事件管理员转发事件。所以你的业务代码包可以从 jms 中抽象出来。

    【讨论】:

    • 谢谢克里斯蒂安。我正在使用它在我的应用程序和 osgi 包之间进行通信: bundleContext.registerService(DATA_TYPE, dataHolderMap, null);这适用于少量通话。我认为您可以以类似的方式在单个 JVM 上使用 EventAdmin
    • 如果你在同一个虚拟机中,那么你至少有机会使用 OSGi 服务。从 OSGi 框架之外,您只能访问不在包中的类和接口。因此,您可以尝试将企业规范 jar 添加到您的普通类路径中,并使用框架的 org.osgi.framework.system.packages.extra 选项导出事件管理服务的包。然后您应该能够从框架外部检索服务。
    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多