Для доступа к одним и тем же таблицам службы в разных портлетах не создавайте заново службы в каждом из них. Вместо этого создайте службу в одном портлете и скопируйте ее docroot/WEB-INF/lib/<pluginmame>-portlet-service.jar
в каталог docroot/WEB-INF/lib/
других портлетов. Давайте посмотрим на пример.
Предположим, у вас есть service.xml
в портлете с именем person-portlet
:
<service-builder package-path="br.com.seatecnologia.stackoverflow.person">
<author>brandizzi</author>
<namespace>StackOverflowPerson</namespace>
<entity name="Person" local-service="true" remote-service="false">
<column name="personId" type="long" primary="true" />
<column name="name" type="String" />
<column name="age" type="int" />
</entity>
</service-builder>
Вы генерируете сервисы и используете их в исходном портлете, как обычно. Например, вы можете создать JSP с формой регистрации человека и списком людей:
<%@page import="br.com.seatecnologia.stackoverflow.person.service.PersonLocalServiceUtil"%>
<%@page import="br.com.seatecnologia.stackoverflow.person.model.Person"%>
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<portlet:actionURL name="addPerson" var="url" />
<aui:form action="<%= url %>" name="fm" method="POST">
<aui:fieldset>
<aui:input name="name" />
<aui:input name="age" />
<aui:button type="submit" />
</aui:fieldset>
</aui:form>
<ul>
<% for (Person person : PersonLocalServiceUtil.getPersons(-1, -1)) { %>
<li><%= person.getName() %> : <%= person.getAge() %></li>
<% } %>
</ul>
Теперь предположим, что вам нужен еще один портлет, своего рода Hello World, который представляет приветственное сообщение всем зарегистрированным лицам. Вы создаете новый плагин портлета, называемый, скажем, multiple-hello-portlet
, а затем копируете файл person-portlet-service.jar
из каталога person-portlet/docroot/WEB-INF/lib
в multiple-hello-portlet/docroot/WEB-INF/lib
. Если у вас развернуты оба портлета на одном портале_, вы можете использовать службы, созданные для person-portlet
в multiple-hello-portlet
. Например, ваш multiple-hello-portlet
может иметь следующую JSP , и нет необходимости в переопределении служб :
<%@page import="br.com.seatecnologia.stackoverflow.person.service.PersonLocalServiceUtil"%>
<%@page import="br.com.seatecnologia.stackoverflow.person.model.Person"%>
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<% for (Person person : PersonLocalServiceUtil.getPersons(-1, -1)) { %>
<div class="portlet-msg-info">
Hello, <%= person.getName() %>!
You are <%= person.getAge() %> years old.
</div>
<% } %>
Я создал два запускаемых портлета с этими примерами, которые вы можете найти в BitBucket .