Использование объектов ServiceReference в Spring DM - PullRequest
1 голос
/ 29 марта 2011

В настоящее время я портирую очень хорошую демонстрацию модульного веб-интерфейса с использованием OSGi и Vaadin из «стандартной OSGi» для использования Spring DM.

Один файл конфигурации OSGi в списке:

<reference name="PersonListener"
        interface="com.siemens.ct.pm.model.IPersonListener"
        bind="addPersonListener"
        unbind="removePersonListener"
        cardinality="0..n"
        policy="dynamic"/>

Я понимаю, что в Spring DM это должно быть сделано с использованием слушателей, следовательно, следующая конфигурация bean-компонента:

<osgi:list id="personListeners" interface="be.nnuytten.pm.model.IPersonListener" cardinality="0..N">
        <osgi:listener ref="personManager" bind-method="addPersonListener" unbind-method="removePersonListener" />
</osgi:list>

В справочной документации я обнаружил, что методы addPersonListener и removePersonListener нуждаются в следующей подписи:

public void anyMethodName(ServiceReference ref);

Все сказано и сделано, но теперь возникает вопрос:как мне работать с этим объектом ServiceReference?В частности, как я могу добиться следующего с помощью ServiceReference?

public synchronized void addPersonListener(IPersonListener personListener) {
        logger.info("add personListener: " + personListener);
        personListeners.add(personListener);
    }

Теперь те же функции должны быть реализованы

public void addPersonListener(ServiceReference ref){}

Ваша помощь, как всегда, наиболее ценится!

1 Ответ

0 голосов
/ 01 апреля 2011

В случае, если это все еще не решено.

Я сделал нечто подобное с Девой (которая основана на Spring DM). Вам не нужно использовать ServiceReference. Все зависит от метода подписи:

<osgi:list id="xyzzyList" interface="Xyzzy"
    cardinality="0..N">
    <osgi:listener ref="xyzzyRegistry" bind-method="onBind" unbind-method="onUnbind" />
</osgi:list>

и метод onBind () в реализации Xyzzy

public void onBind(Xyzzy xyzzy, Map<?, ?> properties) {
    register(xyzzy);
}

Вопрос, конечно, что вы делаете с картой. Я ничего не делал, правда.

...