【问题标题】:Publish non-@Instantiate OSGi service with iPOJO使用 iPOJO 发布非@Instantiate OSGi 服务
【发布时间】:2013-02-12 13:11:42
【问题描述】:

我有 OSGi 模块化系统,其中包含以下组件:

  • 一些特定的协议实例实现,表示通过特定协议到特定服务器的连接(每个连接服务实例化)
  • 一些特定的协议实例管理器服务,按需创建和预配置实例(通常来自不同捆绑包的多个单一服务)
  • 连接管理器,它聚合协议管理器服务并在需要时要求它们提供协议实例(单一单调服务)

它们被打包到 OSGi 包中,如下所示:

`-ConnectionManager
      `-ConnectionManager.class
`-IrcProtocol
      `-IrcProtocolManagerService.class
      `-IrcProtocolInstance.class
`-XMPPProtocol
      `-XMPPProtocolManagerService.class
      `-XMPPProtocolInstance.class

ConnectionManager 带有注释

@Provides
@Instantiate
@Component

并实现Subscriber 接口,使其能够发送和侦听通过某种类型的Event Admin 传递的消息。


每个*ProtocolManager 都带有注释

@Provides
@Instantiate
@Component

并实现ProtocolManager 接口,使其能够被ConnectionManager 服务监听器发现。


每个*ProtocolInstance 都带有注释

@Provides
@Component

并实现Subscriber 接口。它还实现了ProtocolInstance接口,提供了connect()disconnect()等通用连接操作。


这里的问题是ProtocolInstances是手工创建的,使用new操作符,在ProtocolManager内部,而不是@Instantiate注解触发器,正因为如此-不参与iPOJO服务发布,尽管是 @Provides 注释。


问题:如何正确地(最好是声明式地,使用注释)发布这个以编程方式创建的ProtocolListener 服务,而不需要手动深入到原始 OSGi 服务发布(至少在某种工厂之外,也许)?或者,可能,如何重新构建我的系统,以使其更好地与不言而喻的 iPOJO 指南一起运行?

【问题讨论】:

    标签: java osgi ipojo


    【解决方案1】:

    iPOJO 不支持使用“new”创建对象。事实上,一个 iPOJO 实例不仅是 this 对象,也是包装它的容器。

    但是,您有两种解决方案:

    【讨论】:

      猜你喜欢
      • 2016-02-07
      • 2023-03-13
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 2014-10-02
      • 2019-04-15
      • 1970-01-01
      • 2013-06-14
      相关资源
      最近更新 更多