Компонент декларативных услуг удовлетворен и не удовлетворен

Я разрабатываю систему на основе OSGI, которая использует декларативные сервисы для определения компонентов. Однако при запуске его из Eclipse один из моих компонентов не инициализируется. Когда я исследую проблему с помощью простых консольных команд, я получаю следующий вывод (с небольшим запутыванием):

osgi> component 51
    Component[
    name = com.e.location.view
    activate = activate
    deactivate = deactivate
    modified = 
    configuration-policy = optional
    factory = null
    autoenable = true
    immediate = false
    implementation = com.e.location.view.LocationViewContribution
    state = Unsatisfied
    properties = 
    serviceFactory = false
    serviceInterface = [com.e.model.ViewContribution]
    references = {
        Reference[name = SpecificationProvider, interface = com.e.SpecificationProvider, policy = static, cardinality = 1..1, target = null, bind = setSpecificationProvider, unbind = null]
    }
    located in bundle = com.e.location.view_1.0.0.SNAPSHOT [107]
]
Dynamic information :
  The component is satisfied
  All component references are satisfied
  Component configurations :
    Configuration properties:
      component.name = com.e.location.view
      component.id = 55
      objectClass = String[com.e.model.ViewContribution]
    Instances:

Таким образом, компонент имеет state = Unsatisfied, но динамическая информация сообщает, что компонент удовлетворен, и ссылки на его компоненты также выполнены.

Кто-нибудь может объяснить это? Почему мой компонент не инициализирован?

ОБНОВЛЕНИЕ: видимо, настройка immedate="true" для компонента устраняет проблему инициализации. Команда OSGI по-прежнему имеет state = Unsatisfied хоть. Кто-нибудь знает почему?

2 ответа

У нас были похожие проблемы, когда:

  • Метод активации компонента вызвал исключение (см. Журнал)
  • Метод активации компонента не вернулся (см. Дамп потока)
    • Бесконечный цикл (или расширенная рекурсия JVM) в активации
    • тупик

Если вы находитесь в режиме равноденствия и не установили пакет, который перенаправляет LogEvents в файл журнала / консоль, не забудьте проверить каталог конфигурации, где Equinox помещает файлы журнала для сообщений об ошибках.

Помните, что конструктор вашего компонента не должен иметь аргументов.

Кроме того, сила, позволяющая использовать enabled="true" immediate="true" атрибуты в <scr:component> тег.

Другие вопросы по тегам