Para acceder a las mismas tablas de un servicio en portlets diferentes, no vuelva a crear los servicios en cada uno. En su lugar, cree el servicio en un portlet y copie su docroot/WEB-INF/lib/<pluginmame>-portlet-service.jar
en el directorio docroot/WEB-INF/lib/
de los otros portlets. Veamos un ejemplo.
Suponga que tiene la siguiente service.xml
en un portlet denominado 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>
a generar los servicios y para usarla en el portlet original, como de costumbre. Por ejemplo, puede crear una JSP con un formulario para el registro de una persona y otra lista:
<%@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>
Ahora, supongamos que necesita otro portlet, algún tipo de Hello World, que presenta un mensaje de bienvenida a todas las personas registradas. Crea un nuevo complemento de portlet, llamado, digamos, multiple-hello-portlet
, y luego copia el archivo person-portlet-service.jar
del directorio person-portlet/docroot/WEB-INF/lib
al multiple-hello-portlet/docroot/WEB-INF/lib
. Si tiene ambos portlets desplegados en el mismo portal_, puede usar los servicios creados para person-portlet
en el multiple-hello-portlet
también. Por ejemplo, su multiple-hello-portlet
puede tener los siguientes JSP y no hay necesidad de reimplementar los servicios:
<%@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>
<% } %>
creé dos portlets ejecutables con estos ejemplos, que se puede encontrar en BitBucket.
No es recomendable utilizar plugins EXT si puedes evitarlo. En este caso, es fácilmente evitable al tener el {portletname} -portlet-service producido del primer portlet en el classpath del segundo portlet, como explica Brandizzi. – Jonny
Tiene algo que ver con los complementos EXT, ya que son muy difíciles de implementar/anular/desplegar, y es mejor evitarlos a menos que no haya otro tipo de complemento Liferay que se adapte a sus necesidades. – fimez