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.
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.
À 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.
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.
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.
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.
Définissez arbitrairement l'espace de noms du service correspondant ci-dessous.
service.xml
<namespace>FOO</namespace>
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">
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" />
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" />
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>
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.
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.
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
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.
Ensuite, créez un portlet pour le placer réellement sur Liferay et afficher les données.
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.
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.
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
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