Liferay verwendet einen Mechanismus namens Service Builder, um automatisch eine permanente Schichtzugriffsklasse wie eine Datenbank und eine Dienstschichtklasse zu generieren, die Benutzer verwenden können, ohne eine Tabelle direkt zu definieren, indem sie eine Modelldefinition erstellen und Service Builder ausführen. Es gibt einen Mechanismus, um dies zu tun.
In Liferay 6.2 hat Service Builder den Dienst und das Portlet erstellt, um die Daten gleichzeitig anzuzeigen. Von Liferay 7 / DXP wurde der Dienst jedoch auf die OSGi-Plattform verschoben, und die damit verbundene gründliche Modularisierung hat den Dienst erstellt. Dienste und Portlets werden jetzt separat in Portlets erstellt.
Auch für die Entwicklungsumgebung musste ein SDK separat für Liferay 6.2 vorbereitet werden. Mit der Einführung des Blade-Tools ist es jetzt möglich, eine Entwicklungsumgebung mit Befehlen zu erstellen.
Basierend auf diesen Unterschieden finden Sie im Folgenden eine Zusammenfassung zum Erstellen eines Service Builder-Portlets in Liferay 7 / DXP sowie bewährte Methoden.
Obwohl es sich um ein Build-Tool handelt, wurde Ant / Maven zum Zeitpunkt von Liferay 6.2 verwendet, Gradle / Maven kann jedoch von Liferay 7 / DXP aus verwendet werden. Gradle ist der Standard für Liferay, daher werden wir dies auch in diesem Artikel befolgen.
Die Installationsmethode finden Sie unter offizielles Gradle-Dokument. Es gibt kein Problem, da immer die neueste Version verwendet wird.
Von Liferay 7 / DXP wurde ein Tool namens Blade als Entwicklungsunterstützungs-Tool eingeführt. Dies ermöglicht es, den Aufbau und die Bereitstellung der Entwicklungsumgebung mit einem einzigen Befehl abzudecken.
Informationen zur Installation finden Sie im offiziellen Dokument INSTALLING BLADE CLI.
In Liferay 6.2 musste eine Entwicklungsumgebung mit SDK erstellt werden. In Liferay 7 / DXP können Sie jedoch mit dem folgenden Befehl eine Entwicklungsumgebung (Liferay-Arbeitsbereich) erstellen.
blade init workspace(Beliebiger Liferay-Arbeitsbereichsname)
Oder wenn Sie in einem bereits vorhandenen Verzeichnis initialisieren möchten
blade init --force
Wird als Liferay-Arbeitsbereich initialisiert.
Wenn der Liferay-Arbeitsbereich erstellt wird, wird direkt darunter ein Ordner namens modules erstellt. Gehen Sie zum Beispiel unter Module
blade create -t service-builder -p com.liferay.todo -c Todo Todo
Wenn du gerne rennst
Todo-api/ Todo-service/ build.gradle
Ein Ordner für Dienste wie und eine Build-Datei für gradle werden generiert.
Erstellen Sie als Nächstes ein Modell. Wenn Sie direkt unter den Todo-Service-Ordner wechseln, befindet sich eine Datei mit dem Namen service.xml. Bearbeiten Sie sie daher. Einzelheiten zu verschiedenen Einstellungen, aber den Haupteinstellungen finden Sie im Offiziellen Dokument Ist wie folgt.
Stellen Sie den Namespace des entsprechenden Dienstes unten beliebig ein.
service.xml
<namespace>FOO</namespace>
Legen Sie die Entität mit den folgenden Attributen fest. In einer service.xml können mehrere Entitäten definiert werden. Eine Entität entspricht einer Tabelle.
Wenn local-service auf true gesetzt ist, wird automatisch ein Service erstellt, auf den aus Bundles verwiesen werden kann, die auf derselben OSGi-Plattform bereitgestellt werden.
Wenn Remote-Service auf true gesetzt ist, wird automatisch eine Schnittstelle (JSON / Web-API) generiert, die den Service von außerhalb von Liferay aufrufen kann.
uuid wird angegeben, wenn Sie eine eindeutige ID-Zeichenfolge im Datensatz generieren möchten.
service.xml
<entity local-service="true" name="Foo" remote-service="true" uuid="true">
Wie der Name schon sagt, ist dies der Primärschlüssel für diese Entität. Es ist üblich, den Entitätsnamen + die ID anzugeben.
service.xml
<column name="fooId" primary="true" type="long" />
Group ID Liferay verwendet überall Gruppen-IDs, um Zieldatensätze zu klassifizieren, z. B. um Berechtigungen zu steuern. Stellen Sie sicher, dass Sie dieses Element in Ihre Entität aufnehmen. Dieser Schlüssel wird auch im Finder verwendet, der später erläutert wird.
service.xml
<column name="groupId" type="long" />
Liferay wird standardmäßig mit einem Überwachungsmechanismus geliefert. Diese Felder werden jedoch benötigt, damit dieser Mechanismus Überwachungsprotokolle aufzeichnet. Stellen Sie daher sicher, dass diese Elemente in die Entität aufgenommen werden.
service.xml
<column name="companyId" type="long" />
<column name="userId" type="long" />
<column name="userName" type="String" />
<column name="createDate" type="Date" />
<column name="modifiedDate" type="Date" />
Geben Sie beim Abrufen von Daten für eine Entität die Sortierreihenfolge an, in der die Daten in einer Liste abgerufen werden können.
service.xml
<order by="asc">
<order-column name="field1" />
</order>
Liferay verfügt über einen Mechanismus zum automatischen Generieren einer Schnittstelle für die einfache Datenerfassung, die als Finder bezeichnet wird. Durch Festlegen dieser wird die Finder-Methode zum Abrufen von Daten generiert. Ersetzen Sie es durch einen beliebigen Inhalt und erstellen Sie einen Finder. Sie können auch mehrere Finder definieren. Sammlungs- und Entitätsname können für den Rückgabetyp angegeben werden. Weitere Informationen zum Inhalt der Einstellungen finden Sie in der DTD (http://www.liferay.com/dtd/liferay-service-builder_7_0_0.dtd).
service.xml
<finder name="Field2" return-type="Collection">
<finder-column name="field2" />
</finder>
References Geben Sie die Tabelle an, die der entsprechenden Entität zugeordnet ist. Es ist standardmäßig angegeben.
service.xml
<reference entity="AssetEntry" package-path="com.liferay.portlet.asset" />
<reference entity="AssetTag" package-path="com.liferay.portlet.asset" />
Wird angegeben, wenn die von Liferay bereitgestellte allgemeine Infrastruktur wie Kommentare, Sterne und Tags verwendet wird.
Gehen Sie zum Todo-Service-Verzeichnis und
gradle buildService
So generieren Sie ein Skelett für den Dienst. Entsprechend der Einstellung von service.xml werden dann automatisch die Finder-Methode usw. generiert, eine Tabelle in der Datenbank erstellt und eine Methode für den Betrieb von CRUD generiert.
Service Builder generiert automatisch die entsprechende Schnittstelle aus der Implementierungsklasse (der Datei mit der Bezeichnung * Impl.java).
Darüber hinaus wird das von der Lliferay-Seite erzeugte Skelett vom Gradle-Build-Service jedes Mal, wenn das Modell oder der Service während des Entwicklungsprozesses geändert wird, mehrmals regeneriert. Wenn Sie eine andere als die von Liferay zugelassene Datei bearbeiten, wird diese überschrieben. Seien Sie also vorsichtig.
Bearbeitbare Dateien sind
Wird sein.
Fügen Sie beispielsweise FooLocalServiceImpl.java und Folgendes hinzu
FooLocalServiceImpl.java
public String getHelloWorld() {
return "Hello World";
}
Durch Ausführen von gradle buildService wird eine Schnittstelle für getHelloWorld generiert und dieser Service verfügbar gemacht.
Erstellen Sie als Nächstes ein Portlet, um es tatsächlich auf Liferay zu platzieren und die Daten anzuzeigen.
Gemäß Konvention in Liferay 7 / DXP
Funktion | Suffix |
---|---|
Service (Implementierung) | *-service |
Dienste (API, Schnittstelle) | *-api |
Portlet(Teil anzeigen) | *-web |
Ich werde es nennen. Bewegen Sie sich direkt unter den Todo-Ordner und generieren Sie ein Portlet mit dem folgenden Befehl.
blade create -t mvc-portlet -p com.liferay.todo -c TodoPortlet Todo-web
Nun ist die Struktur der Verzeichnisse unter Todo wie folgt.
Todo-api/ Todo-service/ Todo-web/ build.gradle
Gehen Sie direkt unter das generierte Todo-Web-Verzeichnis und fügen Sie Todo-api wie folgt zu build.gradle hinzu
Todo-api/build.gradle
dependencies {
compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.0.0"
compileOnly group: "com.liferay.portal", name: "com.liferay.util.taglib", version: "2.0.0"
compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
compileOnly group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1"
compileOnly group: "jstl", name: "jstl", version: "1.2"
compileOnly group: "org.osgi", name: "osgi.cmpn", version: "6.0.0"
compileOnly project(":modules:Todo:Todo-api") //Füge das hinzu.
}
Fügen Sie außerdem Folgendes zusammen mit der import-Anweisung hinzu, damit FooLocalService von TodoPortlet.java aufgerufen werden kann.
FooLocalServiceImpl.java
@Reference
protected void setFooLocalService(
FooLocalService fooLocalService) {
_fooLocalService = fooLocalService;
}
private FooLocalService _fooLocalService;
Der FooLocalService ist jetzt in Todo-web verfügbar.
Wenn Sie in einer Entwicklungsumgebung einen Liferay-Server lokal starten, wird Blade automatisch auf dem laufenden Server bereitgestellt.
Es gibt auch ein Tool, Damascus, das automatisch Service Builder-Portlets generiert (* -service, * -api, * -web). Auf diese Weise können Vorlagen generiert werden, die bereits über die für Geschäftsanwendungen erforderlichen Funktionen wie CRUD, Suche und Workflow verfügen.
Liferay DXP / 7.0-Tool zur automatischen Generierung von Portlets, Damaskus
Das Obige ist eine Eile, aber es ist ein Beispiel für die Grundeinstellung bei Verwendung des Service Builder-Portlets in Liferay 7 / DXP.
Recommended Posts