[JAVA] Comment créer un portlet de générateur de services dans Liferay 7 / DXP

introduction

Dans Liferay, un mécanisme appelé Service Builder est utilisé pour créer une définition de modèle et exécuter Service Builder pour générer automatiquement une classe d'accès à la couche persistante telle qu'une base de données et une classe de couche de service que les utilisateurs peuvent utiliser sans définir directement une table. Il existe un mécanisme pour le faire.

Dans Liferay 6.2, Service Builder a créé le service et le portlet pour afficher les données en même temps, mais à partir de Liferay 7 / DXP, le service a été déplacé vers la plate-forme OSGi et la modularisation approfondie qui l'accompagne a rendu le service. Les services et les portlets sont désormais créés séparément dans les portlets.

De plus, comme pour l'environnement de développement, il était nécessaire de préparer un SDK séparément pour Liferay 6.2, mais avec l'introduction de l'outil Blade, il est désormais possible de créer un environnement de développement avec des commandes.

Sur la base de ces différences, voici un résumé de la création d'un portlet de générateur de services dans Liferay 7 / DXP et des meilleures pratiques.

Installation de l'outil de construction (Gradle / lame)

Installation de Gradle

Bien qu'il s'agisse d'un outil de construction, Ant / Maven a été utilisé à l'époque de Liferay 6.2, mais Gradle / Maven peut être utilisé à partir de Liferay 7 / DXP. Gradle est la norme pour Liferay, nous allons donc le suivre également dans cet article.

Veuillez vous référer au document officiel de Gradle pour la méthode d'installation. Il n'y a pas de problème car la dernière version est toujours utilisée.

installation de la lame

À partir de Liferay 7 / DXP, un outil appelé Blade a été introduit comme outil d'aide au développement. Cela permet de couvrir la construction et le déploiement de l'environnement de développement avec une seule commande.

Veuillez vous référer au document officiel INSTALLING BLADE CLI pour l'installer.

Créer un espace de travail Liferay

Dans Liferay 6.2, il était nécessaire de créer un environnement de développement à l'aide du SDK, mais dans Liferay 7 / DXP, vous pouvez créer un environnement de développement (espace de travail Liferay) avec la commande suivante.

blade init workspace(Tout nom d'espace de travail Liferay)

Ou si vous souhaitez initialiser dans un répertoire qui existe déjà

blade init --force

Sera initialisé en tant qu'espace de travail Liferay.

Créer un service

Créer un squelette de service

Lorsque l'espace de travail Liferay est créé, un dossier appelé modules est créé directement en dessous. Passez sous les modules, par exemple

blade create -t service-builder -p com.liferay.todo -c Todo Todo

Si tu cours comme

Todo-api/  Todo-service/  build.gradle

Un dossier pour les services tels que, et un fichier de construction pour gradle seront générés.

Créer un modèle

Ensuite, créez un modèle. Si vous vous déplacez directement sous le dossier Todo-service, il existe un fichier appelé service.xml, alors modifiez-le. Veuillez vous référer au Document officiel pour plus de détails sur les différents paramètres, mais les paramètres principaux Est comme suit.

Espace de nom

Définissez arbitrairement l'espace de noms du service correspondant ci-dessous.

service.xml


<namespace>FOO</namespace>

Paramètres d'entité

Définissez l'entité avec les attributs suivants. Plusieurs entités peuvent être définies dans un service.xml. Une entité correspond à une table.

Lorsque local-service est défini sur true, un service qui peut être référencé à partir de bundles déployés sur la même plate-forme OSGi est automatiquement créé.

Lorsque remote-service est défini sur true, une interface (JSON / API Web) qui peut appeler le service depuis l'extérieur de Liferay est automatiquement générée.

uuid est spécifié lorsque vous souhaitez générer une chaîne d'ID unique dans l'enregistrement.

service.xml


<entity local-service="true" name="Foo" remote-service="true" uuid="true">

Clé primaire

Comme son nom l'indique, il s'agit de la clé primaire de cette entité. Il est d'usage de spécifier le nom de l'entité + Id.

service.xml


<column name="fooId" primary="true" type="long" />

Group ID Liferay utilise des ID de groupe partout pour classer les enregistrements de données cibles, par exemple pour contrôler les autorisations. Assurez-vous d'inclure cet élément dans votre entité. Cette clé est également utilisée dans le Finder, qui sera expliqué plus loin.

service.xml


<column name="groupId" type="long" />

Champ d'audit

Liferay est livré en standard avec un mécanisme d'audit, mais ces champs sont nécessaires pour que ce mécanisme enregistre les journaux d'audit. Par conséquent, assurez-vous d'inclure ces éléments dans l'entité.

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

Ordre de tri

Lors de la récupération de données pour une entité, spécifiez l'ordre de tri dans lequel les données peuvent être récupérées dans une liste.

service.xml


        <order by="asc">
            <order-column name="field1" />
        </order>

Méthode Finder

Liferay dispose d'un mécanisme pour générer automatiquement une interface pour une acquisition de données simple, appelée Finder. En définissant ces paramètres, la méthode Finder pour récupérer les données sera générée. Remplacez-le par n'importe quel contenu et créez un Finder. Vous pouvez également définir plusieurs Finder. Le nom de la collection et de l'entité peut être spécifié pour le type de retour. Veuillez consulter DTD (http://www.liferay.com/dtd/liferay-service-builder_7_0_0.dtd) pour plus de détails sur le contenu des paramètres.

service.xml


        <finder name="Field2" return-type="Collection">
            <finder-column name="field2" />
        </finder>

References Spécifiez la table associée à l'entité appropriée. Il est spécifié par défaut.

service.xml


        <reference entity="AssetEntry" package-path="com.liferay.portlet.asset" />
        <reference entity="AssetTag" package-path="com.liferay.portlet.asset" />

Est spécifié lors de l'utilisation de l'infrastructure commune fournie par Liferay, comme les commentaires, les étoiles et les balises.

Génération de service

Accédez au répertoire Todo-service et

gradle buildService

Pour générer un squelette pour le service. Ensuite, selon le paramètre de service.xml, la méthode Finder, etc. est automatiquement générée, une table est créée dans la base de données et une méthode permettant à CRUD de la faire fonctionner est également générée.

Ajouter une méthode au service

Service Builder fonctionne en générant automatiquement l'interface correspondante à partir de la classe d'implémentation (le fichier nommé * Impl.java).

De plus, le squelette généré par le côté Lliferay est régénéré plusieurs fois par le service gradle build chaque fois que le modèle ou le service est modifié pendant le processus de développement. Par conséquent, si vous modifiez un fichier autre que celui autorisé par Liferay, il sera écrasé, alors soyez prudent.

Les fichiers modifiables sont

  1. *LocalServiceImpl.java
  2. *ServiceImpl.java
  3. *** Nom de l'espace de noms Impl.java (pas le nom de l'espace de noms ModelImpl.java) **

Sera.

Par exemple, ajoutez ce qui suit à FooLocalServiceImpl.java et

FooLocalServiceImpl.java


    public String getHelloWorld() {
        return "Hello World";
    }

L'exécution de gradle buildService générera une interface pour getHelloWorld et rendra ce service disponible.

Créer un portlet

Ensuite, créez un portlet pour le placer réellement sur Liferay et afficher les données.

Créer un squelette de portlet avec lame

Par convention dans Liferay 7 / DXP

une fonction suffixe
Service (mise en œuvre) *-service
Services (API, interface) *-api
Portlet(Voir la pièce) *-web

Je vais le nommer. Déplacez-vous directement sous le dossier Todo et générez un portlet avec la commande suivante.

blade create -t mvc-portlet -p com.liferay.todo -c TodoPortlet Todo-web

Maintenant, la structure des répertoires sous Todo est la suivante.

Todo-api/  Todo-service/  Todo-web/  build.gradle

Allez directement sous le répertoire Todo-web généré et ajoutez Todo-api à build.gradle comme indiqué ci-dessous

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") //Ajoute ça.
}

Ajoutez également ce qui suit avec l'instruction d'importation afin que FooLocalService puisse être appelé à partir de TodoPortlet.java.

FooLocalServiceImpl.java


    @Reference
    protected void setFooLocalService(
            FooLocalService fooLocalService) {

        _fooLocalService = fooLocalService;
    }   
    
    private FooLocalService _fooLocalService;

Le FooLocalService est maintenant disponible dans Todo-web.

Déployer

Dans un environnement de développement, si vous lancez un serveur Liferay localement, la lame se déploiera automatiquement sur le serveur en cours d'exécution.

  1. Démarrez Liferay (en supposant que vous exécutez sur localhost: 8080)
  2. Passez directement sous le répertoire Todo et exécutez le déploiement de la lame. Todo-service, Todo-api, Todo-web sont déployés respectivement.
  3. Connectez-vous à Liferay et sélectionnez Todo-web déployé dans le volet Application sur le côté droit de l'écran + placez-le sur l'écran.

Outil de génération automatique de portlet Service Builder

Il existe également un outil, Damascus, qui génère automatiquement des portlets de création de services (* -service, * -api, * -web). Cela permet de générer des modèles qui ont déjà les fonctions requises pour les applications métier telles que CRUD, la recherche et le flux de travail.

Outil de génération automatique de portlets Liferay DXP / 7.0, Damas

Résumé

Ce qui précède est une précipitation, mais c'est un exemple de la configuration de base lors de l'utilisation du portlet de générateur de service dans Liferay 7 / DXP.

Recommended Posts

Comment créer un portlet de générateur de services dans Liferay 7 / DXP
Comment créer un thème dans Liferay 7 / DXP
Comment créer facilement un pull-down avec des rails
Comment créer une méthode
Comment créer un environnement Java en seulement 3 secondes
Comment créer un projet Spring Boot dans IntelliJ
Comment créer un URI de données (base64) en Java
Comment créer une partie d'espace réservé à utiliser dans la clause IN
Comment créer un nouveau projet Gradle + Java + Jar dans Intellij 2016.03
Comment insérer une vidéo dans Rails
[Swift5] Comment créer un écran de démarrage
[rails] Comment créer un modèle partiel
Comment publier une bibliothèque dans jCenter
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
Comment appeler des bibliothèques telles que JQuery et JQuery UI dans Liferay 7 / DXP
Comment créer une base de données H2 n'importe où
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
Essayez de créer un babillard en Java
Comment créer des pages pour le tableau "kaminari"
Comment créer une classe qui hérite des informations de classe
Comment exécuter une tâche djUnit dans Ant
Comment ajouter un chemin de classe dans Spring Boot
[1st] Comment créer un projet de framework Spring-MVC
Comment implémenter une fonctionnalité similaire dans Rails
[Rails] Comment créer un bouton de partage Twitter
Comment générer automatiquement un constructeur dans Eclipse
Comment créer docker-compose
Comment effacer toutes les données d'une table particulière
Comment exécuter l'application SpringBoot en tant que service
Comment connecter MySQL / MariaDB + HikariCP avec Liferay 7 / DXP
Comment implémenter une fonctionnalité intéressante dans Ajax avec Rails
Comment créer une URL JDBC (Oracle Database, Thin)
[Spring Boot] Comment créer un projet (pour les débutants)
J'ai essayé de créer une compétence Clova en Java
Comment lancer une autre commande dans un programme Ruby
Comment afficher un aperçu du navigateur avec VS Code
Comment écrire une recherche de comparaison de dates dans Rails
Comment se moquer d'un appel de super méthode dans PowerMock
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment convertir un fichier en tableau d'octets en Java
[Rails] Comment charger JavaScript dans une vue spécifique
Comment écrire un mod de base dans Minecraft Forge 1.15.2
[Offre d'abonnement Apple] Comment créer une signature d'offre promotionnelle
Comment créer une image de conteneur légère pour les applications Java
Comment créer un formulaire pour sélectionner une date dans le calendrier
Comment changer une chaîne dans un tableau en un nombre dans Ruby
Comment laisser un commentaire
Comment utiliser @Builder (Lombok)
Comment stocker des chaînes de ArrayList à String en Java (personnel)
Créer une méthode pour renvoyer le taux de taxe en Java
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Comment ajouter les mêmes index dans un tableau imbriqué
Je veux créer un fichier Parquet même en Ruby
Mappage à une classe avec un objet de valeur dans How to My Batis
Comment développer et enregistrer une application Sota en Java
Comment simuler le téléchargement de formulaires post-objet vers OSS en Java