Декларативная служба OSGi - получить ServiceReference в методе bind - PullRequest
4 голосов
/ 13 сентября 2011

Я использую Eclipse 3.7 с Eclipse Gemini JPA / DBAccess. Я реализовал декларативный ServiceComponent, который ссылается на EntityManagerBuilderFactory. Метод связывания выглядит так:

public void bindEntityManagerFactoryBuilder(EntityManagerFactoryBuilder emfBuilder) {
    emfFactoryBuilders.add(emfBuilder);
}

Однако мне нужна ServiceReference для получения свойств этого сервиса, например:

    ServiceReference ref = ...
    String unitName = (String)ref.getProperty(EntityManagerFactoryBuilder.JPA_UNIT_NAME);

Нужно ли искать ServiceRegistry для этой ServiceReference или есть более элегантный подход?

ура, Муки

Ответы [ 2 ]

10 голосов
/ 13 сентября 2011

Если вы используете декларативные сервисы 1.1 (самая последняя версия спецификации), вы можете изменить сигнатуру вашего метода привязки на:

public void bindEntityManagerFactoryBuilder(EntityManagerFactoryBuilder emfBuilder, Map properties)

Карта будет содержать свойства сервиса связанной службы.

1 голос
/ 14 сентября 2011

Если вы хотите иметь доступ к объекту ServiceReference, вы можете использовать этот способ (он поддерживается версиями 1.0 и 1.1 DS):

public void bindEntityManagerFactoryBuilder(ServiceReference reference)
...