2013-07-09 2 views
0

Мы пытаемся использовать службы портлета (портлета A) в другом портлете (портлет B). Мы поместили jar-файл сервисов (портлет A) в \tomcat-7.0.27\webapps\ROOT\WEB-INF\lib и включили эту банку в плагин display.xml для отображения другого портлета (портлет B).Использование сервисов портлета в другом плагине Liferay

Мы используем внешнюю базу данных, то есть мы внесли изменения в portlet-spring.xml.

Если я разворачиваю портлет, содержащий фактические сервисы (портлет A) и вызываю некоторый метод услуг, тогда он называется fine &, который извлекает данные. Если мы пишем тот же метод в другом портлете (портлет B), он извлекает данные. Но проблема возникает, когда мы пытаемся написать метод в другом портлете (портлете B), который не был вызван в фактическом портлете службы (портлет A), тогда данные не извлекаются. Это всегда приносит пустоту.

Может ли кто-нибудь предположить, что может быть причиной.

Мы не можем поставить все портлеты в том же банке, что и портлеты очень большие (приблизительно 35).

Или есть ли другое лучшее решение, а не размещение файла jar в каталоге lib?

+0

Я думаю, что ваши банки должны быть в каталоге «\ tomcat-7.0.27 \ lib \ ext» –

ответ

3

В комментарии Lucky Boy, один вариант, чтобы ваши * -service.jar файлов в глобальном пути к классам, tomcat/lib/ext

Другого варианта является явно назвать зависимости: Редактировать ваш плагин WEB-INF/liferay-plugin-package.properties и добавить зависимость к другому плагину что вам нужно для этого плагина:

required-deployment-contexts=my-other-portlet,my-custom-hook 

Это позволит убедиться, что плагин, содержащий эту декларацию развернет только один раз зависимостей уже развернуты, и он также будет копировать их сервис-банки в «сам» - например, my-other-portlet-service.jar и my-custom-hook-service.jar автоматически окажутся в вашем собственном веб-приложении, готовом к использованию.

+0

Уважаемый Олаф Кок, Я пробовал оба метода, как указано выше. Но с этим я столкнулся с другой проблемой. Я не могу найти класс XXXXImpl в портлете B. Мне нужно создать объект, такой как XXXX xxxx = new XXXXImpl(); , Любое предложение на том же. – Danish

+0

Нет, извините. Классы * Impl не входят в сервисный интерфейс. У создателя службы они попадают в папку WEB-INF/src плагина, которая не является частью * -service.jar. Это по дизайну, и вы не должны предполагать, что у вас есть доступ к этим классам. Вы можете делегировать создание объекта в свой класс обслуживания, хотя и просто вернуть вашу службу к объекту XXXImpl, который скорее всего окажется в XXXWrapper в зависимом проекте. –

+0

Сделал это. :-) XXXX xxxx = XXXXLocalServiceUtil.createXXXXX (-1 или 0) Это не создаст запись базы данных, но вернет пустой экземпляр, который так же хорош, как и новый XXXXImpl(). Если у вас есть таблица с несколькими первичными ключами, создайте объект xxxxpk и передайте его в конструкторе XXXXLocalServiceUtil.createXXXXX. Большое спасибо ... – Danish

Смежные вопросы