Как использовать jar построителя сервисов Liferay в других портлетах

У меня есть проект портала Liferay, созданный с помощью конструктора сервисов. При создании портлета также создается jar, и я хочу использовать этот jar в других портлетах. Судя по сообщениям здесь и в других источниках, предлагаемый подход заключается в том, чтобы просто поместить myPortletName-portlet-services.jar в папку WEB-INF/lib другого портлета. Я также видел, где *-portlet-services.jar находится в папке /lib/ext Tomcat. Я также прочитал, где файл liferay-plugin-package.properties должен быть обновлен с помощью зависимости.

Я испробовал каждый подход, и каждый из них дает результат, мучительно близкий к рабочему. Созданный сервис-билдером jar ссылается на глобальный ресурс jndi/jdbc, который отличается от базы данных LR, и когда метод вызывается из этого jar-файла, я получаю сообщение об ошибке «у пользователя отсутствуют привилегии или объект не найден:» (я писал об этом в другом месте ).

Я предполагаю, что у jar есть некоторые зависимости от Spring/Hibernate, которые не выполняются. Это или ресурс jndi/jdbc не «виден», когда jar размещается за пределами развернутого портала сервисного билдера. В любом случае очевидно, что методы jar находятся (иначе страшная ошибка beanLocator), поэтому теперь это просто проблема с подключением к БД.

Возникает вопрос: существуют ли какие-то структурные зависимости, которые не соблюдаются, когда jar-файл, сгенерированный сервис-билдером, помещается за пределы исходного портала на какой-то другой портал?


person Pete Helgren    schedule 14.12.2012    source источник
comment
Вы говорите, что помещаете сгенерированный *-service.jar вне развертывания портала liferay, например, в отдельном веб-приложении на том же сервере или на каком-то другом сервере? Можете ли вы очистить эту часть для меня? Спасибо   -  person Prakash K    schedule 15.12.2012
comment
да. Если структура типа:   -  person Pete Helgren    schedule 17.12.2012
comment
да. Структура выглядит следующим образом: webapps/BaseServicePortal/WEB-INF/lib/*-service.jar webapps/MyPortal/WEB-INF/lib/*-service.jar Я также поместил *-service.jar в $TOMCAT- HOME$/lib/ext, и во всех случаях развертывание осуществляется в один и тот же экземпляр Tomcat.   -  person Pete Helgren    schedule 17.12.2012
comment
Согласно вашему вопросу, база данных service-builder.jar отличается от той, которую использует ваш портал LR, верно? Вы вызываете метод, скажем, из портлета-A, а метод находится в портлете-B-service.jar, и вы сталкиваетесь с исключением, как указано выше. Ясно ли я понимаю ваш запрос?   -  person Jaynil    schedule 01.05.2014
comment
да. База данных находится на сервере MSSQL, а база данных LR — это MySQL. Все наши сервисы, построенные из Service Builder, в основном все операции ввода-вывода БД в MSSQL, выполняются с помощью одного портлета, созданного SB. Эти службы вызываются из других портлетов И сервлетов LifeRay, установленных на том же сервере TC. Я не возвращался к этой проблеме в течение достаточно долгого времени, но, возможно, я снова столкнусь с ней, если мы перейдем к последней версии LR и перейдем к Tomcat, а не к Glassfish.   -  person Pete Helgren    schedule 02.05.2014


Ответы (1)


Для использования jar построителя сервисов Liferay в других портлетах Попробуйте:

  1. создайте ServiceLocator, помещенный в банку в библиотеке Tomcat (или другого сервера приложений).
  2. установите ваш bean-компонент из построителя сервисов в локатор сервисов с помощью установщика как статическое поле в контексте весны (сеттер должен установить статическое поле)
  3. Затем реализуйте bean-компонент, который будет использовать bean-компонент из локатора сервисов и будет делегировать вызовы.

    • simply pass your bean from service builder through class static field placed in tomcat lib (visible everywhere)
    • поместите необходимые интерфейсы также в jar в lib
person mj000    schedule 12.08.2014