Le CRUD 100% AJAX et JSON dans une architecture MVC

Introduction

Le CRUD acronyme signifiant (C : Create , R: Read ou Retrieve U : Update et D : Delete (différent de Remove), est utilisé dans tout langage de programmation possédant ces quatre opérations standards qui opèrent sur des objets, des données peu importe la forme, le format et leur conteneur. Il peut s'agir par exemple d'instances (objets créés à partir de classes ou modèles) d'un composant ou d'un jeu d'enregistrements d'une base de données ou tout simplement un fichier système (texte, hexa, binaire ou autres). Les quatre opérations s'imposent intrinsèquement par elles-mêmes et par la nature même du paradigme de la programmation OO (Orienté Objet) en étant des instances vivantes de classes (Create) subissant des modifications (Update) et des consultations (Read), et finiront par mourir (Delete).

Cet atticle s'adresse à une poulation ayant déjà une bonne base sur les différent concepts abordés et par conséquent il est foculasé sur le comment et non pas sur le quoi. Son but ne consiste pas à expliquer en détails ce que c'est le CRUD et tous les concepts associés ou utilisés, mais plutôt, comme son titre l'indique, son objectif est de montrer comment réaliser le CRUD dans un langage OO comme JAVA Le même exercice peut être réalisé dans n'importe quel autre langage OO de dernière génération comme C#, PHP ou autres.

Il s'agit plus précisémment de montre à travers d'une application simple de type WEB développée en JAVA (JEE : Java Entreprise Edition. Pour le moment je ne donnerai pas plus de détails et je vous invite à lire le chapitre suivant pour découvrir tous les sujets technologiques utilisés dans cette application.

L'application

Sont abordés dans l'application accompagnant cet article, les technologies suivantes :

Sans plus tarder, voici le résultat en image de l'application WEB formée d'une page unique réalisant les quatre opérations du CRUD, mais aussi en bonus l'opération de recherche selon plusieurs critères.

Cette application vous montre Comment :

L'environnement de développement utilisé

Bien que l'environnement de développement l'importe peu, il est néanmoins important de le définir dès le début de n'importe quel projet de cette nature afin de bien définir les technologies, les techniques et les frameworks à utiliser. Toutes ces briques concernent :

Afin de matérialiser ces différentes briques, voici en image les parties du projet segmentées tel qu'affiché dans l'explorateur projet de Netbeans :

Si vous optez pour un autre IDE open source comme ECLIPSE, il est tout à fait possible d'éditer le code source accompagnant cet article dans ce dernier. On a utilisé le format de données JSON afin de réaliser la récupération des données véhiculées par AJAX. Il est aussi possible d'utiliser un autre format différent comme XML via des modifications très légères du projet. D'ailleurs, une fonction Javascript est déjà incluse dans le projet pour effectuer la récupération des données au format XML.

Ci-dessous, je vous explique pas à pas les étapes à suivre pour créer le projet.

Le projet

A. Créer le projet :

Après avoir cliqué sur le menu File->New Project, suivez les étapes de l'assistant de création de projets telles qu'indiquées ci-contre :

A noter qu'aucun Framework ne sera utilisé pour ce projet. A noter aussi que le projet utilise le JDK 7 (Java Devlopment Kit) une librairie dédiée aux développeurs d'application JEE, ou toute autre version compatible de préférence 6 ou plus.



B. Personnaliser le projet :

Le squelette de votre projets est créé avec des éléments par défaut déjà présents comme la page de démarrage "index.htm" à supprimer, le fichier de MANIFEST.MF qui sert à configurer le fichier archive (WAR : WEB ARchive) généré représentant le package de l'application à distribuer, déployer ou inclure dans une application Entreprise comprenant plusieurs composants.

B.1 Remplacer la page WEB :

La vue (Le V de MVC)

Le fichier index.html sera remplacé par un fichier JSP "index.jsp" représentant l'unique page WEB de notre application. Comme illustré ci-contre. Pour cela cliquer sur File->New File Puis sélectionner WEB puis JSP. Cette page est le seul élément qui matérialise le V dans l'architecture de type MVC. Attention à ne pas oublier d'indiquer le ou les pages de démarrage de l'application soit dans le fichier de configuration de l'application web.xml soit dans les propriétés du projet sous la rubrique Run en y indurant la nouvelle page. Dans notre cas, comme c'est notre unique page, on peut tout à fait omettre d'indiquer la page de démarrage, mais ce n'est pas une bonne pratique. Pour cela, vous ajouter manuellement les lignes suivantes dans web.xml ou l'indiquer à l'assistant lors de la création de la page jsp.
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>

B.2 Ajouter les librairies supplémentaires :

JSON

Afin d'utiliser JSON comme format de flux de données entre le client (via AJAX) et le serveur, nous avons besoin d'une librairie JSON comme celle de Google par exemple. Pour cela on peut créer un dossier lib sous le dossier web présenté par WEB Pages dans l'explorateur NetBeans ! Puis y mettre toutes les librairies Java que nous voulons utiliser. Dans notre cas, il s'agit de deux librairie, celle pour JSON et celle pour se connecter à la source de données MySql (voir ci-dessous). Voir la figure ci-contre.

AJAX

L'utilisation de la technique proposée par AJAX a un double usage. Le premier usage est pour ne recharger dans une page que le DELTA devant être modifié suite à une requête envoyée au serveur par le client. La deuxième utilisation est dans un but de recevoir la réponse du serveur dans un flux sous un format bien défini, en l'occurrence du JSON, comme il peut être sous format XML, binaire, BLOB ou tout autre format standard ou même personnalisé.

Pour cela, nous ajoutons un dossier scripts dédié à Javascript dans lequel un script appelé getResult.js est créé et qui aura la délégation du client pour communiquer avec les composants serveur en utilisant AJAX comme moyen de communication (à ne pas confondre avec le protocole standard du WEB qu'est le HTTP) et le format JSON comme flux de données.



File -> New File -> WEB -> JSP

File -> New file -> Other -> Folder


Click droit sur le projet puis Properties :


BOOTSTRAP

Afin d'utiliser le Framework BOOTSTRAP dans notre page, on crée un dossier bootstrap dans lequel nous créons toutes l'arborescence appropriées contenant principalement (que vous pouvez télécharger sur le site de bootstrap) :

MySql JDBC Driver

Afin de pouvoir utiliser une source de données MySql, nous aurons besoins aussi du pilote (DRIVER) approprié qui va nous permettre de communiquer avec la base de données MySql via son connecteur JDBC (Java DataBase Connector). Celui-ci peut être téléchargé sur le site http://dev.mysql.com/downloads/connector/j/. Il est préférable d'inclure toutes les librairies directement avec le dossier du projet au lieu du poste de développement afin de lever toute dépendance dans le cas de changement du poste. Voir la figure ci-contre :

B.3 Ajouter le M et le C de MVC :

Les composants Business (le M de Model)

Les composants métier (business) sont rassemblés dans un package unique com.yezza.business comme indiqué dans la figure au début de cet article. Pour ce faire :
  1. commencer par ajouter un package appelé com.yezza.business sous le conteneur Source Packages (représentant le dossier src du projet Netbeans). Voir la figure ci-contre.
  2. Puis ajouter dans le package ainsi créé la classe métier (Bean)User qui représente un utilisateur le seul objet métier manipulé dans cette application. Voir la figure ci-contre.


Les composants C (le C de Controller)

Les composants Contrôleur sont rassemblés dans un package unique com.yezza.controllers. Dans ce package nous ajoutons un contrôleur unique appelé UserCRUD qui doit prendre en charge l'ensemble des requêtes provenant de notre unique page client index.jsp. Comme son nom l'indique, il doit être capable :
  • D'effectuer les opérations du CRUD (Créer un utilisateur, Afficher un ou plusieurs utilisateurs, Mettre à jour un utilisateur et Supprimer un utilisateur)
  • Et en plus, il effectue une recherche d'utilisateurs selon des critères différents par propriété (ID, nom, prénom, Email ou date de naissance).
  • Les composants supplémentaires

    Comme il a été évoqué au début de cet article, une application WEB doit être fondée sur une architecture répartie sur plusieurs couches coopératives avec la contrainte que chaque couche ne communique qu'avec ses couches voisines directes. La coopération signifie que l'on peut créer des instances de la couche voisine pour récupérer ou fournir des données ou des objets sans pour autant s'approprier du rôle de l'autre. Dans notre application, on a déjà défini les couches V (View), C (Controller) et M (Model). Et pourtant, il subsiste une couche supplémentaire qui va s'introduire dans le C, car il est recommandé que les contrôleurs ne communique pas directement avec les sources des données et doivent passer par une couche dédiée à ce rôle appelée la DAO (Data Access Object). La figure ci-contre illustre ce principe. En résumé :



    Les composants DAO

    Le package com.yezza.dao est dédié à la couche DAO communiquant entre la base de données (via une source de données à définir, voir ci-dessous) et le contrôleur UserCRUD. Dans ce package, on a créé :

    Les composants transverses

    Tous les comopsants transverses pouvant être utilisés dans des contextes différents sont rassemblé dans un package unique appelé com.yezza.utils. Dans ce package on trouve deux classes :

    La base de données

    Les données de l'application sont stockées dans une base de données MySql db_ajax_json formée d'une table unique users. Comme on a déjà inclus le Driver de MySql, vous devez avoir dans l'IDE Netbeans dans l'onglet Services une entrée intitulée : MySql Server at localhost:3306... (voir la figure ci-contre). Netbeans vient avec un certain nombre de drivers qui se trouvent sous l'entrée Drivers. Vous avez aussi la possibilité d'en rajouter d'autres en fonction du SGBD que votre application utilise.

    Afin de créer la base de données db_ajax_json, vous pouvez utiliser par exemple MySql Workbench téléchargeable ici. Puis vous procédez selon les deux figures suivantes :


    Afin que l'application puisse se connecter à la base de données, vous avez besoin de 3 éléments :

    1. Au moins une connexion à la base de données : Pour cela, vous vous positionnez sur l'onglet Services (Menu : Window --> Services), click droit sur l'entrée Databases puis New Connetion comme indiqué ci-dessous :

    2. En option un pool de connexions peut être ajouté si l'application sera utilisée par plusieurs utilisateurs (application multi-sessions). Le pool de connexions que l'on va appeler cp_ajax_json peut gérer plusieurs connexions à la fois et qui peut être paramétré en termes de nombre de connexions simultannées par exemple et autres paramètres que nous n'évoquons pas ici. Vous allez utiliser la connexion qui vient d'être créée pour le configurer. Pour cela, vous faites un click droit sur le projet puis New --> Other --> GlassFish --> JDBC connection pool comme indiqué ci-dessous :



    3. Vous ajouter maintenant la source de données qui va justement utiliser le pool de connexions que l'on vient de créer. Vous procédez comme à l'étape 2, mais vous sélectionnez plutôt dans GlassFish un JDBC Resourse Connexion :
      . Le principe de création d'une source de données est le même peu importe le serveur d'applications que vous utilisez.


    Toutes les données saisies aux étapes 1, 2 et 3 sont automatiquement ajoutées par Netbeans dans le fichier de configuration du serveur d'application GlashFich matérialisé par un fichier XML : sun-resources.xml (à noter qu'il arrive qu'il porte un nom différent !) dont voici un aperçu :


    Par ailleurs, il est à noter que les 3 étapes précédentes peuvent être réalisées directement dans la console WEB de GlashFish ou celle du serveur d'application que vous utilisez.

    Conclusion

    Dans cet article, nous avons montré comment passer du concept au concret, difficulté à laquelle sont confrontés bon nombre de débutants ou de personnes se reconvertissant au domaine de développement applicatif utilisant notamment les nouvelles technologies du WEB.

    Il a été voulu de ne pas aborder le code de l'application proposée afin d'illustrer les différents concepts exposés, car j'estime que la compréhension des concepts et la manière de les matérialiser sont plus importantes que les centaines, voire les milliers ou centaines de milliers de lignes de code à implémenter. Pour construire, il faut d'abord concevoir l'architecture et poser les fondations et ce n'est qu'après ces étapes fondamentales que nos préoccupations se concentrent sur les détails en termes de choix de la stratégie de programmation et du design physique. C'est cela que j'ai tenté de montrer dans cet article que j'espère sera d'utilité pour certains parmi vous qui s'intéressent à ce sujet.

    Et la suite

    Je vous propose de modifier le projet en téléchargement pour qu’il prend en charge le format XML en plus en tant que choix supplémentaire de l'utilisateur à travers l'unique page de l'application. Je vous propose également d'extérioriser toutes les validations de la servlet UserCRUD dans une classe dédiée et faire appel aux fonctions de validation.

    Dans un prochain article, j'espère présenter ce même projet, mais avec l'utilisation d'une autre architeture de vue basée sur l'utlisation de la technologie JSF (Java Server Faces) couplée avec le Framework d'interface graphique (IHM) Prime Faces à mon avis le plus complet du marché en open source dans sa catégorie.