[JAVA] So erstellen Sie ein Service Builder-Portlet in Liferay 7 / DXP

Einführung

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.

Installation des Build-Tools (Gradle / Blade)

Gradle-Installation

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.

Klingeninstallation

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.

Erstellen eines Liferay-Arbeitsbereichs

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.

Service erstellen

Erstellen Sie ein Service-Skelett

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.

Modell erstellen

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.

Namensraum

Stellen Sie den Namespace des entsprechenden Dienstes unten beliebig ein.

service.xml


<namespace>FOO</namespace>

Entitätseinstellungen

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">

Primärschlüssel

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" />

Überwachungsfeld

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" />

Sortierreihenfolge

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>

Finder-Methode

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.

Servicegenerierung

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.

Methode zum Service hinzufügen

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

  1. *LocalServiceImpl.java
  2. *ServiceImpl.java
  3. *** Namespace-Name Impl.java (nicht Namespace-Name ModelImpl.java) **

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.

Portlet erstellen

Erstellen Sie als Nächstes ein Portlet, um es tatsächlich auf Liferay zu platzieren und die Daten anzuzeigen.

Erstellen Sie ein Portlet-Skelett mit einer Klinge

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.

Bereitstellen

Wenn Sie in einer Entwicklungsumgebung einen Liferay-Server lokal starten, wird Blade automatisch auf dem laufenden Server bereitgestellt.

  1. Starten Sie Liferay (vorausgesetzt, Sie laufen auf localhost: 8080).
  2. Wechseln Sie direkt in das Todo-Verzeichnis und führen Sie die Blade-Bereitstellung aus. Todo-Service, Todo-API, Todo-Web werden jeweils bereitgestellt.
  3. Melden Sie sich bei Liferay an und wählen Sie im Anwendungsbereich auf der rechten Seite des Bildschirms die Option "Bereitgestelltes Todo-Web" aus. Platzieren Sie es auf dem Bildschirm.

Tool zur automatischen Generierung von Service Builder-Portlets

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

Zusammenfassung

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

So erstellen Sie ein Service Builder-Portlet in Liferay 7 / DXP
So erstellen Sie ein Thema in Liferay 7 / DXP
So erstellen Sie einfach ein Pulldown mit Rails
So erstellen Sie eine Methode
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
So erstellen Sie einen Daten-URI (base64) in Java
So erstellen Sie ein Platzhalterteil zur Verwendung in der IN-Klausel
So erstellen Sie ein neues Gradle + Java + Jar-Projekt in Intellij 2016.03
So fügen Sie ein Video in Rails ein
[Swift5] So erstellen Sie einen Begrüßungsbildschirm
[Rails] So erstellen Sie eine Teilvorlage
So veröffentlichen Sie eine Bibliothek in jCenter
So erstellen Sie eine Abfrage mithilfe von Variablen in GraphQL [Verwenden von Ruby on Rails]
So rufen Sie Bibliotheken wie JQuery und JQuery UI in Liferay 7 / DXP auf
So erstellen Sie überall eine H2-Datenbank
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
Versuchen Sie, ein Bulletin Board in Java zu erstellen
So erstellen Sie Pagenationen für das "Kaminari" -Array
So erstellen Sie eine Klasse, die Klasseninformationen erbt
So führen Sie eine djUnit-Aufgabe in Ant aus
So fügen Sie in Spring Boot einen Klassenpfad hinzu
[1.] So erstellen Sie ein Spring-MVC-Framework-Projekt
So implementieren Sie eine ähnliche Funktion in Rails
[Rails] So erstellen Sie eine Twitter-Freigabeschaltfläche
So generieren Sie automatisch einen Konstruktor in Eclipse
So erstellen Sie Docker-Compose
So löschen Sie alle Daten in einer bestimmten Tabelle
So führen Sie die SpringBoot-App als Dienst aus
So verbinden Sie MySQL / MariaDB + HikariCP mit Liferay 7 / DXP
So implementieren Sie eine nette Funktion in Ajax mit Rails
So erstellen Sie eine JDBC-URL (Oracle Database, Thin)
[Spring Boot] So erstellen Sie ein Projekt (für Anfänger)
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
So starten Sie einen anderen Befehl in einem Ruby-Programm
So zeigen Sie eine Browser-Vorschau mit VS-Code an
So schreiben Sie eine Datumsvergleichssuche in Rails
So verspotten Sie einen Super-Methodenaufruf in PowerMock
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So konvertieren Sie eine Datei in ein Byte-Array in Java
[Rails] So laden Sie JavaScript in einer bestimmten Ansicht
Wie schreibe ich einen Core Mod in Minecraft Forge 1.15.2
[Apple-Abonnementangebot] So erstellen Sie eine Signatur für ein Werbeangebot
So erstellen Sie ein leichtes Container-Image für Java-Apps
So erstellen Sie ein Formular zur Auswahl eines Datums aus dem Kalender
So ändern Sie eine Zeichenfolge in einem Array in eine Zahl in Ruby
Wie hinterlasse ich einen Kommentar?
Verwendung von @Builder (Lombok)
Speichern von Zeichenfolgen von ArrayList zu Zeichenfolge in Java (Personal)
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
So fügen Sie dieselben Indizes in ein verschachteltes Array ein
Ich möchte eine Parkettdatei auch in Ruby erstellen
Zuordnung zu einer Klasse mit einem Wertobjekt in How to My Batis
So entwickeln und registrieren Sie eine Sota-App in Java
So simulieren Sie das Hochladen von Post-Object-Formularen in OSS in Java