Blueprint List of Services: Подождите, пока все услуги

Я использую Eclipse Virgo / Gemini Blueprint и имею интерфейс с несколькими реализациями:

Реализация 1:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="MyID1"
    class="ImplementationCLass1">
</bean>

<service ref="MyID1"
    interface="MyInterface" />

Implementation 2:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="MYID2"
    class="ImplementationClass2">
</bean>

<service ref="MYID2"
    interface="MyInterface" />

Implementation 3:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="MyID3"
    class="ImplementationClass3">
</bean>

<service ref="MyID3"
    interface="MyInterface" />

And a Client:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<reference-list id="MyImplementations"
    interface="MyInterface" />

<bean id="clientID" class="ClientClass"
    init-method="startUp">

    <property name="services" ref="MyImplementations"></property>

</bean>

The startUp method is a simple method which iterates over the whole list and prints out a simple string (for testing purpose)

Проблема в том, что если я устанавливаю клиентский пакет, в моем списке есть только две службы вне дерева. Если я остановлюсь и снова запущу пакет, все три службы будут в моем списке.

Есть идеи / предложения, почему?

Можно ли сообщить virgo, что список ДОЛЖЕН содержать все службы, соответствующие MyInterface?

Если вам нужна дополнительная информация, не стесняйтесь спрашивать


person hueck    schedule 22.01.2013    source источник


Ответы (2)


Содержимое справочного списка является динамическим, элементы будут добавляться и удаляться по мере появления и исчезновения соответствующих служб. Но вы можете реализовать ссылочный прослушиватель, который уведомляется при изменении списка, чтобы отслеживать доступные службы. См. обсуждение и примеры здесь.

person forty-two    schedule 23.01.2013
comment
Спасибо, я попробую - person hueck; 24.01.2013

Список действительно содержит все службы, соответствующие _1 _... в произвольный момент времени. Но затем появляется новая услуга.

На самом деле понятие «все услуги» бессмысленно. Вы никогда не узнаете, все ли у вас есть сервисы, потому что кто-то всегда может опубликовать новый позже. Лучшее, что вы можете сделать, - это получить снимок текущих служб, а затем динамически настраивать их по мере появления новых служб позже.

person Neil Bartlett    schedule 24.01.2013
comment
Да, это, кажется, подводит итог. Я забыл упомянуть, что я развертываю все свои пакеты в одном файле par, и поэтому я не могу контролировать, когда будут запущены реализации и клиент. - person hueck; 24.01.2013