Apprendre Spring par pratique

Présentation du projet d'exemple

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

Depuis quelques mois le site a une nouvelle rubrique. Apprendre Java par pratique a pour but de présenter le bases du langage Java. L'article ci-dessus initialisera une série de textes visant à faciliter l'apprentissage du Spring, un framework Java.

A travers cet article introductif on verra en quoi consistera l'apprentissage du Spring. Il présentera d'abord l'application qu'on va développer. Ensuite, on se focalisera un peu plus sur des technologies employés : Spring, Hibernate, JSP et quelques projets de la fondation Apache.

Comme vous avez pu le constater, une très grande partie des articles du blog est consacrée aux applications PHP. Néanmoins, ce langage n'est pas universel et dans beaucoup de situations ses limites s'imposent d'une manière trop importante. Les limites qui peuvent être dépassées dans une autre technologie. En occurrence, en Java.

Cet article est le premier consacré au développement des applications web en Java. La série n'abordera pas les bases de ce langage. Elles sont présentées dans la partie apprendre Java par pratique. La série en question va se concentrer sur le cas un peu plus pragmatique, notamment le développement d'une application web avec les frameworks Spring et Hibernate. La partie de présentation sera réalisée avec le système des templates Apache Tiles et JSP. Toute la partie introductive fera le rapprochement maximal avec les outils mis à disposition des développeurs PHP. Ceci aura pour but de faciliter la compréhension pour des personnes souhaitant apprendre à développer les applications web avec Spring.

Apprendre Spring avec une application web réelle

Le projet qu'on va développer avec Spring sera un système de gestion pour une bibliothèque. Voici les acteurs principaux qui vont y participer ainsi les actions qu'ils pourront effectuer :

  1. LIVRE

    Le livre représente une entité centrale dans l'application. Chaque livre est composé d'un ou plusieurs exemplaires pouvant être empruntés. Chaque exemplaire peut être emprunté par un abonné. La durée d'emprunt est défini dans le panneau de configuration par les modérateurs. Si l'exemplaire n'est pas retourné dans les délais, une pénalité financière est appliquée sur le compte de l'abonné.

    Une personne peut également contribuer à l'agrandissement de la collection des livres en offrant un exemplaire. Cette personne doit d'abord émettre un souhait d'offrir un livre. Ensuite cette volonté est traitée par un modérateur. Sa décision peut donc augmenter le nombre d'exemplaires disponibles à l'emprunt.

    Un livre peut également faire l'objet d'une réservation. Cette fonctionnalité sera très utile dans la situation où une œuvre populaire sera mise à dispositions des abonnés et que plusieurs personnes voudront l'emprunter dans la même période.

  2. EMPRUNT

    Chaque emprunt signifie la prise d'un exemplaire par l'abonné. Cette prise possède une date limite à laquelle l'utilisateur doit retourner le livre. Le nombre d'emprunts par abonné est déterminé par le modérateur. Chaque type d'abonné (hebdomadaire, mensuel, annuel) possède le même nombre maximal d'emprunts.

  3. CHAT

    Chaque abonné aura l'occasion de consulter une aide en ligne en temps réel via un chat.

  4. MODERATEUR

    Le modérateur sera responsable du contenu mis en ligne. Son rôle reposera à mettre à jour les livres disponibles à l'emprunt, à gérer les emprunts et les réservations. Il jouera aussi un rôle de conseiller virtuel avec qui l'abonné pourra entrer en contact sur le chat.

  5. QUESTION

    Si l'abonné n'est pas intéressé par une échange en temps réel, il peut toujours poser sa question en différé. Un formulaire de contact lui sera alors proposé. A travers lui, il pourra contacter les modérateurs. Il recevra la réponse dans sa boîte des messages.

  6. ABONNE

    L'abonné est un visiteur qui a émis le souhait de profiter de toutes les possibilités du système. Il peut donc emprunter et réserver des livres, contacter des conseillers, prolonger son abonnement en ligne ou gérer son compte personnel.

Spring

Spring est un framework développé avec le design pattern MVC 2par Interface21. A la différence du MVC, dans MVC 2 existe un seul contrôleur qui intercepte toutes les requêtes. Cette centralisation permet une meilleure gestion des couches liées à l'application (par exemple droits d'accès, des statistiques). Cette facilitation a donc une influence considérable sur la maintenabilité du logiciel.

Le principe de base ressemble donc beaucoup à ce qu'on a pu voir avec les frameworks récents dans le monde du PHP. On y croisait la notion d'un dispatcher qui analyse et rediriges les requêtes vers des actions correspondantes. Dans Spring cette notion est représentée par DispatcherServlet.

Hibernate

Hibernate est pour les développeurs Java la même chose que Doctrine pour les développeurs PHP. Il s'agit donc d'un framework gérant la persistance des objets en base de données. Dans Doctrine on retrouve des notions comme : gestionnaire des entités, validateurs, annotations.

Il possède, pareillement que Doctrine, son propre langage d'écriture des requêtes. Il s'agit d'HQL (Hibernate Query Language). Il ressemble à SQL, mais supporte des concepts venus du monde des objets (polymorphisme, inhéritance ou association). Sous Doctrine il s'agit bien évidemment de DQL (Doctrine Query Language).

Apache Tiles

Ce projet est conçu et maintenu par Apache Software Foundation. Il a pour but de faciliter le travail avec la couche V (View) de l'acronyme MVC. Son grand avantage réside dans la possibilité de définir des bouts de code qui peuvent être inclus dans les templates.

Cette fonctionnalité ressemble beaucoup à require_once du PHP. Cependant, elle est beaucoup plus configurable. On peut également trouver un rapprochement avec le concept des layouts, implémenté aussi bien sur Symfony que sur Zend Framework.

Apache BeanUtils

Un autre projet de la fondation Apache. Son objectif est de faciliter la transformation du Java en un langage plus dynamique. Cette transformation se traduit, entre autres, par la possibilité d'appeler les méthodes à partir d'une chaîne de caractères. Cependant, la mise en place de cette librairie est beaucoup plus facile et intuitive que l'utilisation de l'API reflection.

En PHP cette gestion dynamique est beaucoup plus simple. Il suffit de faire un bout de code suivant pour, par exemple, pouvoir exécuter une fonction à partir d'une chaîne de caractères :

$methodName = "callMe";
$parent = new ParentClass();
echo $parent->$methodName();

class ParentClass {
    
    public function callMe() {
        return "call test";
    }
    
}

Le projet développé sous Spring utilisera d'autres composants open source. Il s'agit d'Ehcache, Junit, SLF4J, Apache Commons FileUpload et Jetty. Ils seront présentés chacun à son tour dans les chapitres suivants. Les chapitres plus pragmatiques dont la lecture on peut désormais commencer.

Installation de l'exemple d'une application Spring

Pour installer votre application Spring, vous pouvez télécharger le zip du projet et le dump de la base à importer (mot de passe admin pour le backoffice).

Bartosz KONIECZNY Introduction au projet

Une question ? Une remarque ?

*

*

Moi

Développeur d'applications Internet et journaliste passionné par l'adjectif français. Un aigle polonais orienté vers la progression, volant très haut et écoutant du zouk après les matches du foot français.

Vous appréciez mon travail ?

Pour contribuer au développement de ce site, ou pour remercier pour des articles rédigés, vous pouvez faire un don.

Un conseil CSS

Si vous rencontrez un problème lors de l'utilisation du filtre de transparence pour IE6.

La définition qui permet d'utiliser la transparence sous IE6 pour la classe textFooter se présente ainsi :

.textFooter { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true', src='/images/bottom.png', sizingMethod='scale'); background: none; }

Cependant, il se peut qu'elle ne fonctionne pas correctement. Dans ce cas-là, commencez à la débugger par l'ajout du nom de domaine dans l'attribut src. On obtiendrait alors :
.textFooter { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true', src='http://mysite.com/images/bottom.png', sizingMethod='scale'); background: none; }