根据java系统属性

时间:2015-11-11 15:12:25

标签: java osgi

是否有可能不根据java系统属性激活OSGI声明服务?

例如,如果我使用以下属性启动java,我不想启动某个DS: -DdoNOtActivate =真

我考虑过阅读特定DS的激活器中的问题,但接下来是什么?呼叫停用?

编辑:

好的,我得到了服务本身,感谢Balazs通过程序化激活的回答,但我的服务还为org.osgi.service.event.EventHandler提供了一个接口,那部分不起作用。我在component.xml中有这个:

<service>
    <provide interface="org.osgi.service.event.EventHandler" />
    <provide interface="com.example.test.MyService" />
</service>

<property name="event.topics">
    test
</property>

所以我删除了整个服务部分并离开了event.topics部分,在我的java类激活器中添加了以下内容:

myServiceReg = context.registerService(this.getClass().getName(), this, null);
eventHandlerReg = context.registerService(EventHandler.class.getName(), this, null);

因此myService已激活并注册,一切正常。 EventHandler似乎也已注册,但没有事件到达我的handleEvent()方法。

有关于此的任何想法吗?

1 个答案:

答案 0 :(得分:1)

  

我考虑过阅读特定DS的激活器中的问题,但接下来是什么?呼叫停用?

回来什么都不做。不要使用自动服务注册,而是在activate和deactivate方法中以编程方式注册和注销必要的OSGi服务。 E.g:

public void activate(ComponentContext cc) {    
  BundleContext bc = cc.getBundleContext();
  myServiceReg = bc.registerService(this.getClass().getName(), this, cc.getProperties());
  eventHandlerReg = bc.registerService(EventHandler.class.getName(), this, cc.getProperties());
}

您的组件将处于活动状态,但如果指定了系统属性,则它将不执行任何操作。

修改

  

因此myService已激活并注册,一切正常。 EventHandler似乎也已注册,但没有事件到达我的handleEvent()方法。

请注意,您注册的服务没有服务属性。如果服务注册是自动的,则组件的所有属性将自动添加为服务属性。如果以编程方式注册服务,则情况并非如此。我会以下列方式更改代码:

.*\/(\d+)

通过传递组件的属性,服务将使用与使用自动方法注册的属性相同的属性进行注册。