Comment faire un WebService De A à Z en passant par les JPA :p (Partie 4)

Hello,

je termine ce que j’ai commencer cette semaine. Ceci est donc la dernière parti de ce tutoriel qui nous aura porter à travers plusieurs étapes. Nous avons vu les entités qui seront retranscrite dans notre base de donnée grâce à hibernate et aux JPA.

Donc nous allons faire notre dernière parti mais avant tout un point de cour technique pour bien comprendre la suite des évènements

Parlons des requête HTTP. Tout d’abord il faut savoir que celle-ci son subdivisé en 8 types ou pour utiliser le jargon associé en méthodes qui on chacune une action qui leur est propre.

je vais vous les listez :

– GET : Permet de demander des ressources. elle ne pourra que vous retourner un résultat.

-HEAD : Permet de demander des informations sur le serveur ou autre.

-POST : Permet de créer des nouveau objet sur la ressource.

-OPTIONS : Permet d’obtenir des options sur la communication avec le serveur.

-CONNECT : Permet de faire tuneling si vous avez un proxy ;p

-PUT : Permet d’ajouter ou de modifier une ressources.

-DELETE : Permet de suprimer la ressource souhaiter.

Donc maintenant que vous savez cela vous comprendrez mieux la suite.

Etape 1 : créer AuteurRest

Dans com.josselinchevalay..tutoriel.rest nous allons créer un objet intitulé AuteurRest qui nous permettra de gérer les fonctionnalité qui serons centré sur Auteur.

bon voici le code ^^

petite explication des annotations :

-PATH : permet de préciser un chemin vers la ressource ou encore à passer des paramètre comme un identifiant ^^.

-ensuite il y a les annotions qui représente les méthodes.

– Cosumes : Permet de présicer qu’on attend dans notre cas du Json dans la requête.

-Produces: Permet de dire qu’on va retourner du Json.

Important : Nous allons mettre deux annotations nécessaire pour évité que notre classe AuterRest ne boucle sur une propriétés  de l’objet Auteur.

au-dessus de citations mettez y @XmlTransient @JsonIgnore

une fois cela fait ben on passe a la prochaine étape.

Etape 2 : CitationRest

Maintenant nous allons mettre en place une méthode pour lister les citations d’un auteur.

@GET @Path(« /auteur/{id} »)
public List<Citation> getById(@PathParam(« id ») long id)
{
return citationDao.findByAuteur(id);
}

et voilà webService done :p

Publicités

Comment faire un WebService De A à Z en passant par les JPA :p (Partie 3)

Hello,

La suite de ce tutoriel ! Récapitulons un peu ce qu’on a fait juste là :

– Créer le projet (important :p ) .

– Mettre les libraires Hibernate et Jersey.

– Créer les entités.

Etape 1 : Créer une interface Dao

Nous allons maintenant créer notre interface dao qui déclarera les fonctionnalités de base de JPA. Les fonctionnalités à apporté sont les opérations CRUD (create, reach, update et delete).

Voici ce que vous devez avoir dans votre interface.

Etape 2 : Créations l’interface

Nos JPA aurons des méthodes bien à elle qui pourra comme par exemple la JPA de citation aura une méthode findByAuteur. Dont voici le code :p

Maintenant ce qui va suivre va être compliqué ^^ vraiment un peu. nous allons devoir créer des ficher puis les modifier un peu à certain moment.

Commençons par editer un persistence manger : il sera charger de gérer la persistence où si vous préferer l’enregistrement de nos entity dans la base de données.

PersistenceManager : Le code

Nous allons donc créer ce fichier dans le package  com.josselinchevalay.tutoriel.util

Vous pouvez le voir on lie le fichier persistence.xml  contenu dans src/META-INF/ dans cette classe. Cela ce fait par le persistence unit comme cela notre PersistenceManager sera exactement ou envoyer les requête qu’il générera.

Maintenant nous allons créer une class intitulé DaoFactory mais Attention elle va subir quelque changement par la suite ^^

DaoFactory : le code (dans com.josselinchevalay.tutoriel.dao)

Voici le code nécessaire pour le moment.

Les jpa

Comme promis dans le titre du tutoriel nous allons attaquer par la partie importante du code les JPA :p . Pas de souci nous allons les créer en douceur. Tout ce passera bien ! croyez moi !

Etape 1 : JpaAuteurDao

Nous allons commencer par JpaAuteurDao qui permettra de gérer le persistence des auteurs.

Le code est spliter en 2 partie ^^

Voilà ^^ gros code :p

(Pour commentaire j’aurais peut créer un variable transaction pour y mettre em.getTransaction() )

passons à JpaCitationDao

Voila Maintenant nous allons revenir vers DaoFactory ^^ eh oui  le retour !

Et voila vous avez tout !

Maintenant je vais créer une nouvelle page pour la dernière parti Le webservice :p

Comme ça ce tutoriel sera fini :p

Comment faire un WebService De A à Z en passant par les JPA :p (Partie 2)

Hello,

Suite de ce tutoriel sur le webService restfull en java. Pour résumé ce qu’on à fait :

– On a créer le projet.

-On a mis en place Jersey.

-On a mis en place Hibernate.

Maintenant passons au code ! la parti la plus intéressante.

Etape 1 : Les entity

Pour ce tutoriel nous allons faire quelque chose de simple. Nous allons créer deux entités rien de méchant :

– auteur : qui sera composer d’un nom, prénom et un mail.

– citation : qui sera composé d’une citation, une note et parce qu’on est des fou une date de publication !


Pour plus de clarté nous allons divisé le code en sous parti ^^

Etape 1 :  Les annotations

nous allons commencer par les annotations pour permettre à hibernate et jersey de pouvoir renvoyer et gérer la persistence de nos entity.

package com.josselinchevalay.tutoriel.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.xml.bind.annotation.XmlRootElement;

@Entity @XmlRootElement @SuppressWarnings(« serial »)
public class Auteur implements Serializable {

}

NB : les annotations commencerons toujours par un « @ ».  Comme on peut le voir il y a 3 annotations :

– @Entity : permet a hibernate de pouvoir persister l’objet  dans notre base de données.

– @XmlRootElement : permettra à jersey de convertir votre objet en extrait de code xml ou json.

-@SupressWarnings(« serial ») : permet de ne pas lever certaine erreur ou avertisement.

Attention : Ne pas oublier d’implémenter Serializable qui permettra de sérialisé ou de dé sérialisé l’objet.

Etape 2 : l’objet en lui même 

Comme vous pouvez le voir ci-dessus il n’y a pas de code. C’est un choix de ma part comme cela on ce concentre point par point sur l’important. Pour suivre nous allons donc voir les propriété de notre objet qui rappelons le seront d’un id ( important pour la base), un nom, prénom et une adresse mail.

@Id @GeneratedValue
private Long id;
@Column(length=25,nullable=false)
private String nom;
@Column(length=25,nullable=false)
private String prenom;
@Column(length=255,nullable=false,unique=true)
private String mail;

Le code ci-dessus nous permet de générer les attributs de nos objet pour alléger la lecture j’ai pas mis le reste. Donc voici l’essentiel mais n’oubliez pas de générer les Getter Setter car nos propriétés sont privé.

Commençons les hostilités par l’identifiant on peu y voir les annotations @Id et @GeneratedValue. @Id permet à hibernate de préciser que ce champ sera la clé primaire de votre table qui sera générer par votre entity. @GeneratedValue  spécifie que la valeur sera créer automatiquement ou plus précisément : elle sera auto-incrémenté.

Bon je vous propose d’expliquer en détail mail et ces annotations au lieu de tous les faire. l’annotations Column est facultatif si vous la mettez pas elle prendra des valeurs par défaut. Si vous la précisez c’est que vous voulez y mettre des contraintes particulières comme ici pour le mail. Dans ce projet on veux que le mail respect certaines contraintes qu’il est une taille inférieur ou égal a 255 caractères, qu’il doit pas être null et enfin doit être unique.

Voici ce que vous devriez obtenir.  

Etape 3 : créer l’entity Citation

Bon pour accélérer la cadence je met le code en screenshot ^^

Je vais revenir sur 2 points qui me paraisse bien ici :

– @Lob : permet de déclarer un champ texte d’une taille importante.

– @Temporal : permet de déclarer des champ de type datetime.

Etape 4 : Créer les jointures entre les objets 

Pour connaître les citations d’un auteur il va falloir mettre en place ce qu’on appelle les jointure pour cela. cela ce fait par l’ajout de propriétés et avec des annotations.

Dans Auteur:

@OneToMany(mappedBy= »auteur »)
private List<Citation> citations;

cela nous permet ainsi de pouvoir connaître les citations d’un auteur.

Dans Citation

@ManyToOne
@JoinColumn
private Auteur auteur;

quand nous connaissons la citation il peut être sympathique de connaître l’auteur.

Voilà vous avez vos entity prêt à servir !

Pour la prochaine étape je vais à nouveau refaire un page :p

Comment faire un WebService De A à Z en passant par les JPA :p

Hello, Hello

J’ai décider que mon premier tutoriel ne serais pas dédier au PHP, non ! ni à .NET, non plus ! Mais à JAVA, pour changer ^^. Je trouve qu’il est pas mal, il apporte de bon outil mais cependant mon affection restera quand même a PHP et .NET même si ce soir je fais l’inpordonnable !

Commençons, tout  abord expliquons un peu notre sujet. Oui à mon sens pas de tutoriel si on n’a pas un sujet pour imager nos propos.

Sujet : Vous décidez de créer un webservice où les gens pourrons y déposer leur citations ou le sommet de leur vie.

Voilà 5 minutes pour trouver ça !

Maintenant que l’on le sujet passons aux outils

Pour ma part je vais utiliser :

– JAVA (but du tutoriel)

-Eclipse (oui, je sais y a plus performant 😉 )

– La librairie Hibernate (pour la persistance )

-La librairie Jersey (pour le webservice)

-Tomcat 7 (comme serveur web)

-Mysql (comme SGBDR)

Le sujet est posé les outils sont définis. Allons y gaîment !

Rappelons que nous partons de … rien. donc nous allons créer notre projet petit rappel nous allons faire un web dynamic project.

Nom de projet : tutoriel (oui me suis pas foulé )

Etape 1 : Créer nos packages

Pour ma part je vous conseil de suivre les même que moi pour qu’on sois sur la même architecture

NB : rappel pour nommé les packages

par exemple : com.monprojet.monbibule.cequonveut

attention pas de majuscule dans un nom de package !

donc mes packages :

– com.josselinchevalay.tutoriel.dao

-com.josselinchevalay.tutoriel.jpa => ( pour les best pratice préférer mettre  com.josselinchevalay.tutoriel.dao.jpa)

-com.josselinchevalay.tutoriel.entity

-com.josselinchevalay.tutoriel.util

-com.josselinchevalay.tutoriel.rest

voilà si vous mettez ça on a le même projet

Ouf  l’étape 1 arrive à son terme.

Etape 2 : mettre les librairies et lies liées

cette partie va vous demander des recherches sur le net allez hop sur google !

votre mission : Trouver Jersey et Hibernate pour votre projet.

une fois trouver glisser le tout dans

WebContent/WEB-INF/lib/

Donc rappelle : Pour le tutoreil là il faut Jersey et Hibernate sinon on va pas plus loin !

Voilà vous avez apporter les fichier nécessaire ne partais pas trop loin !

vu qu’on ce situe dans  WebContent/WEB-INF/lib/

nous allons juste un répertoire au-dessus y mettre un fihcier magique les web.xml

Qu’est ce que ce fichier ? 

Jusqu’à l’arriver des annotations dans les servlets pour permettre au client qui voulez utiliser votre site en java il fallait créer ce fichier dans sont principe il faut le voir comme un fichier qui fait le lien entre url et un objet d’un de vos package.

on peut l’apparenter à un ficher de routing sous un MVC ( par exemple Symfony 2  pub au passage ! ).

Si vous souhaiter un point d’éclairage sur cela mettez des commentaire je ferais un cour ou un tutoriel là-dessus.

bon nous allons donc créer ce fichier :

<?xml version= »1.0″ encoding= »UTF-8″?>
<web-app xmlns= »http://java.sun.com/xml/ns/j2ee &raquo; xmlns:xsi= »http://www.w3.org/2001/XMLSchema-instance &raquo;
xsi:schemaLocation= »http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd &raquo; version= »3.0″>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>
com.sun.jersey.config.property.packages
</param-name>
<param-value>com.josselinchevalay.tutoriel.rest</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
</web-app>

Bon là je peut sentir que certain on perdu connaissance ! Pas de sushi les amis tout va bien !

expliquons un peu ce pâté indigeste à souhait ^^ :

on remarque que la balise <Servlet> apparaît a plusieurs reprise, tout simplement c’est parce qu’elle représente certains objet de la libraire jersey que l’on va utiliser dans notre projet et nos propre objet qui nous offrirons des fonctionnalités. Ensuite on repere <Servlet-mapping> très simplement c’est la balise qui permet de faire le lien entre une url et un package.

Maintenant intéressons-nous aux deux lignes en gras. La première nous indique le package cible de notre projet qui fournira les classe qui créerons le webservice.

mettez y ce qui suit :

com.josselinchevalay.tutoriel.rest

pour la deuxième ligne, vous pouvez la changer mais je vous conseil de la laisser telle qu’elle.

Petit récapitulatif de ce qu’on a fait jusqu’à maintenant :

Récapitulatif de la partie Jersey

Si vous possédez à peu près  la même chose on passe à l’étape Hibernate.

Pour Hibernate il va falloir vous placez dans le répertoire src/

Nous allons crée un répertoire META-INF. Une fois crée mettez y un fichier xml qui s’intitule persistence.xml

<?xml version= »1.0″ encoding= »UTF-8″?>
<persistence xmlns= »http://java.sun.com/xml/ns/persistence &raquo; version= »2.0″>
<persistence-unit name= »tutoriel-PU » transaction-type= »RESOURCE_LOCAL »>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name= »javax.persistence.jdbc.driver » value= »com.mysql.jdbc.Driver » />
<property name= »javax.persistence.jdbc.user » value= »root » />
<property name= »javax.persistence.jdbc.password » value= » » />
<property name= »javax.persistence.jdbc.url » value= »jdbc:mysql://localhost:3306/tutoriel » />
<property name= »hibernate.hbm2ddl.auto » value= »update » />
<property name= »hibernate.dialect » value= »org.hibernate.dialect.MySQL5Dialect » />
</properties>
</persistence-unit>
</persistence>

Waouh du code !  pas de souci nous allons expliquer un peu ce code :

La première ligne en gras : nous précise le nom est donc l’identificateur du persistence unit qu’on utilise. A savoir un chose  pour la suite, c’est par ce même nom que nous allons utilisé le persistence unit donc retenais le bien.

Pour les lignes javax.persistence.jdbc permettre de configurer la connexion, donc il suffit de mettre vous identifiant et nom de la base de donné comme vous voulez utilisé ou créer.

La dernière ligne permet de définir le niveau d’action de votre Hibernate. En clair si il a droit de crée la base ou non.

L’autre valeur possible et create (il pourra la créer).

Conclusion : On viens de finir la deuxième !

Je pense que pour plus de clarter je vais créer une autre page :p