Per accedere alle stesse tabelle di un servizio in portlet diversi, non ricreare i servizi in ciascuno di essi. Creare invece il servizio in un portlet e copiare il suo docroot/WEB-INF/lib/<pluginmame>-portlet-service.jar
nella directory docroot/WEB-INF/lib/
degli altri portlet. Vediamo un esempio.
si supponga di avere il seguente service.xml
in un portlet chiamato 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>
si genera il servizio e utilizzarlo nel portlet originale, come al solito. Ad esempio, è possibile creare una JSP con un modulo per la registrazione persona e persona messa in vendita:
<%@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>
Ora, supponiamo che è necessario un altro portlet, una sorta di Ciao Mondo che presenta un messaggio di saluto a tutte le persone registrate. Si crea un nuovo plug-in per portlet, chiamato, per esempio, multiple-hello-portlet
, quindi copia il file person-portlet-service.jar
dalla directory person-portlet/docroot/WEB-INF/lib
a multiple-hello-portlet/docroot/WEB-INF/lib
. Se si dispone di entrambi i portlet distribuiti nello stesso portale_, è possibile utilizzare anche i servizi creati per person-portlet
nello multiple-hello-portlet
. Ad esempio, il multiple-hello-portlet
può avere i seguenti JSP e non v'è alcuna necessità di reimplementare servizi:
<%@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>
<% } %>
ho creato due portlet eseguibili con questi esempi, che si può trovare in BitBucket.
Non è consigliato l'utilizzo di plug-EXT se si può eventualmente evitarlo. In questo caso è facilmente evitabile avendo il {portletname} -portlet-service.jar prodotto dal primo portlet sul classpath del secondo portlet come spiega Brandizzi. – Jonny
Hai un punto riguardante i plugin EXT, in quanto sono molto difficili da implementare/annullare la distribuzione/ridistribuzione, e sono i migliori da evitare a meno che non ci sia un altro tipo di plugin Liferay che si adatta alle tue necessità. – fimez