Проблема с OSGi зависимостями в портальном проекте Liferay 7 при использовании Service Builder
Блоги
Классический портлетный проект для Liferay 7 состоит из четырёх бандлов:
- *-service-api - интерфейсы сервисов
- *-service-impl - реализация сервисов
- *-portlet-lang - языковые бандлы
- *-portlet-web - реализация портлета
Инжекция сервисов в класс портлета происходит при помощи аннотации:
org.osgi.service.component.annotations.Reference
Если открыть классы, автоматически созданные при помощи Service Builder, то мы не обнаружим никаких аннотаций, связанных с OSGi. Появляется вопрос - как эти сервисы попадают в регистр OSGi? Всё волшебство происходит в модуле:
portal-spring-extender
Этот модуль регистрирует бины, определённые в контексте Spring в OSGi контекст. Для понимания процесса можно заглянуть в методы:
com.liferay.portal.spring.extender.internal.context.ModuleApplicationContextRegistrator.start()
и
com.liferay.portal.spring.extender.internal.bean.ApplicationContextServicePublisher.registerService(
BundleContext bundleContext, Object bean, List<String> interfaces,
Dictionary<String, Object> properties)
На днях столкнулся с проблемой - портлетный проект *-portlet-web деплоится без ошибок, но портлет не доступен для размещения на странице портала. Проверил - все необходимые xml описания для Declarative Services были созданы во время сборки - это описание самого портлетного класса и референсных сервисов внутри. Причина оказалась в том, что в проекте *-service-impl я не указал зависимость на portal-spring-extender, поэтому при сборке не добавились нужные импорты, а при деплое сервисы не зарегистрировались.
- 6.2 (12)
- 7.0 (12)
- activiti (14)
- apache camel (6)
- camel (11)
- devcon (6)
- devops (5)
- emdev (9)
- emdev limited (9)
- entaxy (13)
- esb (10)
- fuse (5)
- gartner (7)
- google apps (6)
- jboss (5)
- liferay (143)
- liferay 7.1 (11)
- liferay dxp (11)
- liferay7 (12)
- openshift (8)
- osgi (5)
- redhat (15)
- rest (6)
- wso2 (70)
- wso2 api-m (10)
- wso2 ei (8)
- wso2ei (5)
- wso2esb (7)
- wso2is (8)
- емдев (11)
Сайт использует файлы cookie. Они позволяют узнавать вас и получать информацию о вашем пользовательском опыте. Это нужно, чтобы улучшать сайт. Посещая страницы сайта и предоставляя свои данные, вы позволяете нам предоставлять их сторонним партнерам. Если вы согласны, продолжайте пользоваться сайтом. Если нет – установите специальные настройки в браузере или обратитесь в техподдержку.