【问题标题】:OSGI and cloning a serviceOSGI 和克隆服务
【发布时间】:2013-01-28 14:10:13
【问题描述】:

我需要从一个捆绑包中注册多个服务,我认为我不能使用服务工厂,因为我只有一个捆绑包使用服务 换句话说,我有一个代表物理设备(例如温度传感器)的包,因为我有多个物理设备(例如 10 个温度传感器,每个都有一个唯一的 ID),那么我需要有多个(10)我的实例来自同一个捆绑包的服务,我该怎么做?

【问题讨论】:

  • 您需要澄清您的问题并添加更多详细信息。例如,“克隆”服务是什么意思?
  • 我的意思是多次注册相同的服务,例如我有一个代表物理设备的包,因为我有多个物理设备,所以我需要有多个相同服务的实例。如果我改写我的问题,我有十个温度传感器,每个都有一个唯一的 id,我如何注册代表温度传感器的 10 个捆绑实例
  • 谢谢,我现在试着回答这个问题。您最好编辑原始问题以添加此附加详细信息。

标签: osgi


【解决方案1】:

可以通过重复调用context.registerService() 来注册服务的多个实例。每个注册都可以携带一组不同的属性,例如:

Properties props1 = new Properties();
props1.put("my_id", "ID1");
context.registerService(Foo.class.getName(), new FooImpl(), props1);
// ...
Properties props2 = new Properties();
props2.put("my_id", "ID2");
context.registerService(Foo.class.getName(), new FooImpl(), props2);
// ...

(请注意可能会为您节省一些混淆的术语小问题。捆绑包不会将自身注册为服务。它们创建对象并将其注册为服务。捆绑包是部署单元或可执行文件的容器代码。Bundles 可以注册零到多个服务,和/或使用其他 bundle 注册的服务。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多