Hier eine kurze Anleitung, wie man mit PortalPack 3.0.5 Beta, Liferay 6.1 und NetBeans 7.0.1 einen Service baut.
Offen ist noch die DB-Einbindung. Irgendwas stimmt da noch nicht :-/
Unter Tools-Server 'Liferay Portal Server' definieren. Dabei ist Auto Deploy Dir: ...\liferay-portal-6.1.0\deploy
und 'Directory Deployment Enabled' gesetzt.
Neues Projekt: - Java Web -> Web Application - NEXT - Project Name. Events - NEXT - Server: Liferay Portal Server - NEXT - Portlet Support aktivieren - Portlet generieren lassen
- FINISH
Jetzt wird das service.xml File angelegt:
Auf dem Events-Projekt rechts klicken und New ...
wählen. Den File Type Liferay Plugins -> Service Builder XML
wählen. Der Filename ist 'eventsservice' und der Folder ist 'web'.
- FINISH
Jetzt wird der Editor für den eneuen Service automatisch geöffnet:
Der Package Path und der Namespace sind falsch. Also wechseln wir in die XML-Ansicht und passen beides an.
Nun ersetelle ich einen neuen Service für die Events. Dazu klicke ich auf Add
(links neben dem Package Path) und erfasse den Enitity Namen 'Event' und die Tabelle 'eventtable' (die Namen haben keine implizite Abhängigkeit untereinander.
Nach dem Add
steht die neue Entity 'Event' in der Tabelle links oben. Nun können Columns für ein Event erfasst werden:
Als nächstes könnte ein Finder für Zugriffe über eine oder mehrere der Eventspalten definiert werden. Das mach ich ein anderes Mal.
Als letzter Schritt wird der Service generiert: Klick auf Generate Services
(oben links im Services-Editor). Dadurch werden viele Java-Klassen (Service, Datenklassen,...), XMLs und ein ...\Events\service\lib\Events-service.jar
erstellt. Die Klassen in ch.osys.events.service.*
sollten nicht von Hand geändert werden, da sie durchs Generieren wieder überschrieben werden.
Die Files in ch.osys.events
werden nicht überschrieben durch Generate Services
.
Das generierte JAR wird normalerweise ins Portlet WAR integriert. Wenn man will, dass andere Projeket auch diesem Service nutzen können, kann man dies in den Preferences
(oben rechts im Editor) setzen.
Jetzt fehlt nur noch das GUI.
Keep it simple:
<%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%-- Uncomment below lines to add portlet taglibs to jsp <%@ page import="javax.portlet.*"%> <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%> <portlet:defineObjects /> <%PortletPreferences prefs = renderRequest.getPreferences();%> --%> <%@ page import="javax.portlet.*"%> <%@ page import="ch.osys.events.service.service.*"%> <%@ page import="ch.osys.events.service.model.*"%> <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%> <portlet:defineObjects /> <%PortletPreferences prefs = renderRequest.getPreferences();%> <table> <form method="POST" action="<portlet:actionURL/>"> <tr> <td>Event ID:</td> <td><Input type="text" name="id"/></td> </tr> <tr> <td>Datum:</td> <td><Input type="text" name="datum"/></td> </tr> <tr> <td>Titel:</td> <td><Input type="text" name="titel"/></td> </tr> <tr> <td><Input type="submit"/></td> </tr> </form> </table> <H3> Anzahl Events : <% out.println(EventLocalServiceUtil.getEventsCount()); %> </H3>
Jetzt fehlt noch die Funktionalität hinter dem Submit-Knopf. Dazu füge ich folgendes in ...\Events\src\java\ch\osys\events\Events.java:
public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException { try { long id = Long.parseLong(request.getParameter("id")); String titel = request.getParameter("titel"); Event event = EventLocalServiceUtil.createEvent(id); event.setId(id); event.setTitel(titel); event.setDatum(new Date()); EventLocalServiceUtil.addEvent(event); System.out.println("Added"); } catch (Exception ex) { ex.printStackTrace(); } }
Fertig!
Nun hab ich noch das Problem mit der DB-Einbindung. Gemäss Fehlermeldung, ist der User nicht berechtigt die Tabelle anzulegen. Ich muss der Sache nachgehen, wenn ich wieder wacher bin (oder 'Zeit habe', was halt zuerst eintritt).