Использование построителя сервисов Liferay для доступа к существующим таблицам в базе данных - PullRequest
5 голосов
/ 05 марта 2012

Я пишу портлет, который должен читать набор таблиц в базе данных liferay, созданной другим портлетом компоновщика служб.

Я попытался просто продублировать service.xml и создать сервис, и все, что я получаю от своих проблем, это:

BeanLocator не был установлен

Существует ли простой способ написания второго портлета, который может получить доступ к этим существующим таблицам и можно ли настроить построитель служб так, чтобы он пытался воссоздать то, что уже существует?

Я не хочу добавлятьэто в исходный портлет, если это вообще возможно, поскольку в этих таблицах содержится информация, к которой может понадобиться доступ к множеству других портлетов, а наличие большого количества портлетов в одном развертывании сделает обслуживание головной болью.

Ответы [ 3 ]

7 голосов
/ 05 марта 2012

Для доступа к одним и тем же таблицам службы в разных портлетах не создавайте заново службы в каждом из них. Вместо этого создайте службу в одном портлете и скопируйте ее 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 .

1 голос
/ 06 марта 2012

Запустив сервис-компоновщик, он сгенерирует jar-файл для доступа из других портлетов.

По умолчанию сгенерированный api-файл сервиса будет связан внутри файла войны с портлетами.Но если вы хотите, чтобы другие приложения обращались к вашим службам, тогда файл api jar службы должен быть в пути к классу сервера.Вы можете сделать это, изменив предпочтение, к которому можно получить доступ, нажав кнопку «Предпочтения».(Рис: 6)

от: http://www.liferay.com/de/about-us/news/-/blogs/2506216/maximized

1 голос
/ 05 марта 2012

Вы можете поместить компонент компоновщика служб в собственный плагин Liferay Hook, от которого зависят другие портлеты (для работы портлетов необходимо развернуть плагин).

Вы могли бы также использовать плагин EXT вместо ловушки, которая расширила бы Liferay с вашим компонентом сборки пользовательских сервисов.

...