Декларативная служба OSGI ничего не печатает

Уважаемые талантливые программисты! Я работал с инфраструктурой OSGI и пытался применить декларативную службу в своей программе, но она ничего не выводила на экран. Моя программа проста, у меня есть только один интерфейс, один класс реализует его, а один класс использует интерфейс в качестве клиента.

– Интерфейс:

package test.osdids.date;

public interface IDateService {
String getDate();
                              }

- Класс реализует Интерфейс как Службу:

package test.osdids.date.service;

import java.util.Calendar;

import test.osdids.date.IDateService;

public class DateService implements IDateService {

@Override
public String getDate() {
    String date = Calendar.getInstance().getTime().toString();
    return date;
                        }

                                                  }

XML для регистрации службы:

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"
name="test.osdids.date.service">
<implementation class="test.osdids.date.service.DateService" />
<service>
    <provide interface="test.osdids.date.IDateService" />
</service>
</scr:component>

Файл манифеста службы:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: TESTOSDIDSDATESERVICE
Bundle-SymbolicName: TESTOSDIDSDATESERVICE
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Service-Component: OSGI-INF/DateBridge.xml
Export-Package: test.osdids.date
Bundle-ActivationPolicy: lazy

- И теперь это класс, который будет использовать службу в качестве клиента и распечатывать результат (этот класс был расположен в другом проекте подключаемого модуля, отличном от прежнего проекта подключаемого модуля, в котором хранился интерфейс и класс реализации выше):

package test.osdids.date.consumer;

import test.osdids.date.IDateService;

public class DateConsumer {
private IDateService dateService;

public synchronized void setService(IDateService dateService) {
    this.dateService = dateService;
    System.out
            .println("The Date Service has been registered successfully!");
    System.out.println("The current time is: " + dateService.getDate());

}

public synchronized void unsetService(IDateService dateService) {
    System.out
            .println("The Date Service has been unregistered successfully!");

}

public void activate() {
    System.out.println("Test again...");
    System.out.println("The current time is: " + dateService.getDate());

}

public void deactivate() {
    System.out.println("Stop the service!");
}

}

- Это файл XML для использования и привязки службы потребительского класса:

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"
 name="test.osdids.date.consumer" activate="activate"
 deactivate="deactivate" enabled="true"  immediate="true">
<implementation class="test.osdids.date.consumer.DateConsumer" />
<reference bind="setService" cardinality="1..1"
    interface="test.osdids.date.IDateService" name="IDateService" policy="static"
    unbind="unsetService" />
</scr:component>

– Это файл манифеста:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: TESTOSDIDSDATECONSUMER
Bundle-SymbolicName: TESTOSDIDSDATECONSUMER
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: TESTOSDIDSDATESERVICE;bundle-version="1.0.0"
Service-Component: OSGI-INF/DateBridgeConsumer.xml
Import-Package: test.osdids.date
Bundle-ActivationPolicy: lazy

- А вот и результат на экране:

osgi> 

(Ничего не случилось)

  • Но когда я использую тест jUnit для проверки метода активации() в классе DateConsumer, это сработало. Однако, когда я попытался запустить проект плагина с помощью фреймворка OSGI, ничего не произошло.

Я надеюсь, что кто-то, кто знает эту проблему, и помочь мне. Заранее большое спасибо!


person Đăng Nguyễn    schedule 20.08.2014    source источник


Ответы (1)


Я получил ответ, просто запустите потребитель пакетов через платформу Eclipse (продукт), а не через платформу OSGI, тогда пакеты будут работать без сбоев.

person Đăng Nguyễn    schedule 26.08.2014