2015-02-19 3 views
0

Я использую референсный прослушиватель с параметрами Service, Dictionary в моем методе прослушивания.OSGI - Найти ссылку Bundle по сервисному идентификатору

Словарь имеет service.id, тогда мне нужно иметь комплект этой Службы.

Мой вопрос: иметь Сервис и идентификатор службы, как получить объект Bundle.

Пример:

<reference-listener 
      bind-method="bindFormProcessor" 
      unbind-method="unbindFormProcessor" 
      ref="mainSvc" 
      > 

    </reference-listener> 

Мой Java Метод

public void bindFormProcessor(IFormProcessor formProcessor,Dictionary dictionary) { 
    try { 
     Bundle bundle = OsgiUtil.getBundleByObject(dictionary.get("service.id")); 
     logger.info("************************ GOOOAAL " + bundle.getSymbolicName()); 
     //Now, I have the bundle of my Service 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

С уважением,

ответ

2

Вы можете определить ServiceReference в качестве параметра метода связывания. Используя это, вы можете получить пакет, который предлагает услугу.

Если вы не хотите, чтобы определить ServiceReference как тип параметра (по какой-либо причине), вы можете получить его с помощью следующего кода:

ServiceReference serviceRef = bundleContext.getServiceReferences(IFormProcessor.class, "(service.id=" + serviceId + ")"); 
+0

Благодаря Балаж, я не знал, что параметр фильтра, я хотел используйте параметр ServiceReference Param .. Но у меня есть проблема Cast Exception, когда я получаю сервис с этим ServiceReference. Большое спасибо – jrey