Affichage des articles dont le libellé est Spring. Afficher tous les articles
Affichage des articles dont le libellé est Spring. Afficher tous les articles

vendredi 26 septembre 2014

Managez proprement vos ressources JS et CSS avec Maven, Gradle, Play! grâce à WebJars ! (bye Bower ?)


Toutes vos ressources JS et CSS, paquagées, versionnées, embarquées dans des Jars et disponibles via le repository Maven. Je suis conquis.

Je peux enfin me passer de Bower ... En tant que Javaïste, la mise en oeuvre de toute l'usine logicielle JS (node, yo, grunt, bower voire ruby ...) ne m’enchante pas vraiment et me donne l'impression de complexifier mon environnement plus qu'autre chose.

Bien qu'existant depuis quelques temps, je viens de découvrir Webjars, par hasard, en parcourant un bout de code.
Le fonctionnement est simple : Les librairies JS ou ressources CSS sont packagées dans des jar de telle manière qu'elles sont automatiquement exposées comme des ressources statiques.

Prenons un exemple simple : Un projet Java, avec en front AngularJS et Bootstrap


1) Creation d'un projet web maven

Vous savez faire ... :-)

2) Ajoutez les dépendances WebJars pour AngularJS et Bootstrap

Ajoutez dans le POM :
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>angularjs</artifactId>
    <version>1.2.25</version>
</dependency>

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>bootstrap</artifactId>
    <version>3.2.0</version>
</dependency>

3) Codez votre front

Les fichiers js et css propres à mon projet, je les place sous resources/public :


Pour importer vos ressources, rien de plus simple. Votre IDE trouvent les librairies présentes dans les jar :




4) Nous sommes en Java donc, partons sur Spring Boot par exemple pour le backend

Pour continuer dans la simplicité de mise en oeuvre, j'utilise Spring Boot pour le serveur.
Une fois les dépendances Spring déclarées, la classe Main créée pour lancer le serveur je suis fin prêt à lancer l'application.

Voici le lien github vers le code où j'ai découvert Webjars (il s'agit ici d'un exemple de mise en oeuvre de Spring Security et d'AngularJS pour sécuriser, via un token, l'accès à des services REST :
https://github.com/joshlong/boot-examples/tree/master/x-auth-security

5) C'est tout !

Avec la facilité d'utilisation de Spring Boot, associée aux fonctionnalités de "live edit" de mon IDE avec mon navigateur, je n'ai plus aucun besoin de grunt non plus...

Quand je regarde l'arborescence de mon projet .... je me sens léger tout d'un coup !

Une librairie n'existe pas ! contribuez !


Webjars contient auourd'hui + de 500 libraires, vous pouvez y contribuer et en packager vous-mêmes, la procédure est expliquée dans la doc.


jeudi 3 avril 2014

Générer l'exposition de vos entités JPA via des services RESTful avec Telosys Tools et Spring Data REST (partie 2)

Il s'est passé un peu de temps avant de publier cette deuxième partie car nous devions finaliser la version 2.1.0 de Telosys Tools et un nouveau site regroupant tous les tutoriaux vient d'être lancé.

Dans la première partie nous avions fait un tour d'horizon des technologies qui vont être mises en oeuvre ici. 
Nous allons : 
  • Installer et configurer Telosys Tools (plug-in Eclipse).
  • Générer, depuis votre base relationnelle, une API RESTful exposant vos données.
  • Découvrir concrètement ce qui a été produit.
A noter qu'entre temps, depuis la version 2.0.0.RC1, le format utilisé par Spring a changer. Le format par défaut est maintenant HAL (Hypermedia Application Language) : http://stateless.co/hal_specification.html. Il diffère un peu de la structure présentée en première partie.

Installation du plug-in Telosys


Simplissime ! Le plug-in se trouve sous Marketplace. Si vous avez déjà le plugin d'installé, vous devez le mettre à jour car le bundle de génération RESTful/HATEOAS n'est pas compatible avec les anciennes versions.

Go !

Plutôt que de reprendre ici l'intégralité du tutorial que nous avons créé, je vous invite donc à suivre ce lien pour générer en quelques minutes cet API RESTful :
https://sites.google.com/site/telosystutorial/spring-data-rest

Vous y trouverez une présentation technique du projet, le format hypermedia utilisé, l'API, comment customiser l'application et la structure du projet.

Si vous n'avez pas spécialement de base de données sous le bras, on vous en fournit une !

Je suis preneur de tous vos feedbacks !

vendredi 27 décembre 2013

Générer l'exposition de vos entités JPA via des services RESTful avec Telosys Tools et Spring Data REST (partie 1)

Avant le tutorial de génération à proprement parlé, faisons un petit tour des technologies utilisées ...

Spring Data REST dans l'écosystème Spring

Spring Data REST fait partie du projet plus global se nommant Spring Data. Ce projet se concentre sur la mise en oeuvre de technologies spécialisées dans l'accès aux données, que les bases de données soit relationnelles (Spring Data JPA ou JDBC) ou NoSQL (Spring Data MongoDB, Spring Data Neo4J ou encore Spring Data Redis). Les principaux projets sont disponibles ici : http://projects.spring.io/spring-data/

Spring Data REST, comme son nom l'indique, s'occupe de l'exposition en REST de vos données. La version actuelle est une 2.0.0.M1, l'API n'est pas encore vraiment stabilisée.
Au niveau architecture, il s'appuie sur Spring MVC.

Quel est l'apport de Data REST par rapport à Spring MVC ?

On pourrait se poser la question tant il est simple de créer un service REST avec Spring MVC. Là, Data REST va encore un peu plus loin en fournissant par défaut une véritable API RESTful HTTP (avec le support d'HATEOAS que nous verrons après). Dès lors qu'une entité dispose d'un repository Spring DATA (qu'il soit JPA, MongoDB, Neo4J ou Gemfire), Spring fournit la sémantique HTTP associées (GET, POST/PUT, DELETE), il est possible ensuite de définir des méthodes de recherche spécifiques à travers les repositories et ses méthodes seront exposées aussi comme par exemple :

Méthode de AuthorRepository

Une fois l'application déployée, nous disposerons de l'API suivante : http://localhost:8080/authors/search/byLastName?lastname=Doe


Cela ne remplace pas pour autant les capacités de Spring MVC. Ce dernier est parfaitement adapté à l'exposition de services plus orienté métier, alors que Data REST lui se "contente" d'exposer les entités de persistance. D'un point de vue architecture, il n'est pas conseillé de designer ses services en se calant sur les opérations CRUD de son SI. Il vaut mieux y réfléchir en pensant acte métier. Les deux sont donc complémentaires.

HATEOAS

Je crois que toutes les personnes qui ont vu ce nom ont eu la même réaction ! "C'est quoi ce nom ?"
Cet acronyme improbable signifie Hypermedia As The Engine Of Application State. C'est une contrainte d'architecture pour la mise en oeuvre de services RESTful. Il repose sur un principe simple : Chaque ressource REST exposée est accessible via un lien hypertext. Dès lors qu'une ressource est liée à une autre, la référence à cette dernière sera son lien hypertext, que le client devra parcourir pour accéder aux informations.

Le support des liens dans les services RESTful correspond au niveau 3 de l'échelle de maturité de Richarson. Cette échelle permet de mesurer votre API face au type d'architecture REST :


Je vous recommande cet article sur le sujet :
http://martinfowler.com/articles/richardsonMaturityModel.html

Un petit exemple en Json avec un "book":


Le flux Json nous donne l'url à suivre pour obtenir les informations liées.

C'est un cadre intéressant qui structure les flux REST. Il reste cependant, pour l'instant, une contrainte à son adoption, c'est la compatibilité des clients. Il faut nécessairement que le les clients soit "HATEOAS Friendly"

Spring intégre HATEOAS et permet via son API de gérer aisément les différents liens pour les parcourir ou les créer : http://projects.spring.io/spring-hateoas/
La version actuelle est la 0.7.0. Tout n'est pas encore sec mais je pense que cela ne va pas tarder à devenir une référence ... pourquoi attendre la première release pour se pencher dessus ?

Spring Data REST supporte HATEOAS et expose, par défaut, vos API avec. C'est que nous allons utiliser.

L'application Rest-Shell


Afin de faciliter le parcours et l'utilisation d'une API RESTful HATEOAS, Spring fournit une application en ligne de commande nommée "Rest-Shell". Elle permet l'utilisation de requêtes HTTP sans avoir à utiliser l'url complète d'une ressource et dispose de quelques commandes assez pratiques dont voici un aperçu.
La documentation se trouve ici : https://github.com/spring-projects/rest-shell, je vous recommande de l'installer.


Imaginons ici qu'une base de données de type bookstore soit exposée via des services RESTful. L'url par défaut est localhost:8080.


Je lance la rest-shell et j'obtiens l'écran suivant :



Pour connaitre l'ensemble des ressources exposées, HATEOAS fournit la liste attendue dès qu'une requête de type GET est adressée à la racine. L'application rest-shell permet d'explorer l'API grâce à la commande discover :


Vous pouvez alors récupérer l'ensemble des books en tapant un get books par exemple. Ou alors vous pouvez avoir envie de parcourir les ressources disponibles sous books. Pour cela il suffit d'utiliser la commande follow  <ressource> et de faire un discover comme ci-dessous : 



Vous voulez récupérer les données du Book 1 ? Ok tapons : get 1 :

Remarquez la structure en lien apportées par HATEOAS
Nous ne ferons pas le tour exhaustif des commandes mais finissons par les principales (POST, DELETE et l'utilisation de paramètres) :



L'utilisation du POST

L'utilisation du DELETE

L'utilisation de paramètres 
A noter que cette application n'est pas obligatoire, votre navigateur suffit mais le parcours des liens peut s'avérer fastidieux.




Spring DATA JPA


Bon assez parlé de REST pour l'instant. Nous avons vu que Spring DATA REST s'appuie sur des repositories pour pouvoir les exposer via des services RESTful. Nous allons ici parler des repositories pour JPA.


Spring fournit une API que je trouve très efficace et productive pour mettre en oeuvre la DAL de votre projet. Cette API s'appuie sur l’utilisation d'interfaces (les repositories) dont le developpeur n'a pas besoin de fournir d'implémentation. Par défaut, les principales méthodes de CRUD sont fournies : findAll, findOne, delete, deleteAll, save...



Il est ensuite possible de définir d'autres méthodes, toujours dans cette interface et toujours sans avoir à fournir d'implémentation et utilisant deux façons de procéder, soit :


  • Par convention de nommage sur la méthode
  • Par l'utilisation de l'annotation @Query
La convention de nommage permet déjà de faire quelque requêtes intéressantes en utilisant les mots clés suivants :


Voici quelque exemple pour le DAO d'une classe Book


Le gain en ligne de code est tout de même appréciable.

Telosys Tools


Telosys Tools est un plug-in Eclipse de génération de code reposant sur un mécanisme de template permettant d'être indépendant  de la technologie générée. Il est simple d'utilisation et se branche directement sur n'importe quelle base de données relationnelle. Il est "database first".
Les templates actuellement disponibles vous permettent par exemple de partir de votre base pour générer vos couches d'accès aux données avec JPA/Hibernate par exemple, ou allez plus loin en disposant d'un starter kit pour Spring MVC ou encore AngularJS (Les écrans sont aussi générés).

Il est aussi possible de générer d'autres langages, de la documentation et de créer vos propres templates rapidement !

N'hésitez pas à consulter le site pour plus informations :
 https://sites.google.com/site/telosystools/ 
et à le supporter :-) 
http://marketplace.eclipse.org/content/telosys-tools

Il peut s’avérer être un atout majeur de productivité sur vos projets.


Dans la deuxième partie de l'article , nous verrons comment générer, avec Telosys Tools, une API complète (repositories, recherche avancées, validations), en quelques minutes, en partant de votre base relationnelle et en mettant en oeuvre les composants décrits dans cet article.

Pour la deuxième partie c'est par ici.