Компонент декларативных услуг удовлетворен и не удовлетворен
Я разрабатываю систему на основе 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>
тег.