VIII. Application exemple-04 : rdvmedecins-pf-spring▲
VIII-A. Le portage▲
Nous portons maintenant l'application précédente dans un environnement Spring / Tomcat :
Nous allons nous appuyer sur deux applications déjà écrites. Nous allons utiliser :
- les couches [DAO] et [JPA] de la version 02 JSF / Spring,
- la couche [web] / Primefaces de la version 03 PF / EJB,
- les fichiers de configuration de Spring de la version 02
Nous refaisons là un travail analogue à celui qui avait été fait pour porter l'application JSF2 / EJB / Glassfish dans un environnement JSF2 / Spring Tomcat. Aussi donnerons-nous moins d'explications. Le lecteur peut, s'il en est besoin, se reporter à ce portage.
Nous mettons tous les projets nécessaires au portage dans un nouveau dossier [rdvmedecins-pf-spring] [1] :
- [mv-rdvmedecins-spring-dao-jpa] : les couches [DAO] et [JPA] de la version 02 JSF / Spring,
- [mv-rdvmedecins-spring-metier] : la couche [métier] de la version 02 JSF / Spring,
- [mv-rdvmedecins-pf] : la couche [web] de la version 03 Primefaces / EJB,
- en [2], nous les chargeons dans Netbeans,
- en [3], les dépendances du projet web ne sont plus correctes :
- les dépendances sur les couches [DAO], [JPA], [métier] doivent être changées pour cibler désormais les projets Spring ;
- le serveur Glassfish fournissait les bibliothèques de JSF. Ce n'est plus le cas avec le serveur Tomcat. Il faut donc les ajouter aux dépendances.
Le projet [web] évolue comme suit :
Le fichier [pom.xml] de la couche [web] a désormais les dépendances suivantes :
Des erreurs apparaissent. Elles sont dues aux références EJB de la couche [web]. Etudions d'abord le bean [Application] :
Nous enlevons toutes les lignes erronées à cause de paquetages manquants, nous renommons [IMetier] (c'est son nom dans la couche [métier] Spring) l'interface [IMetierLocal] et nous utilisons Spring pour l'instancier :
- lignes 20-21 : instanciation de la couche [métier] à partir du fichier de configuration de Spring. Ce fichier est celui utilisé par la couche [métier] [1]. Nous le copions dans le projet web [2] :
- lignes 22-31 : nous gérons une éventuelle exception et mémorisons sa pile.
Ceci fait, le bean [Application] n'a plus d'erreurs. Regardons maintenant le bean [Form] [1], [2] :
Nous supprimons toutes les lignes erronées (import et annotations) à cause de paquetages manquants. Cela suffit pour éliminer toutes les erreurs [3].
Par ailleurs, il faut ajouter dans le code du bean [Form], le getter et le setter du champ
2.
// bean Application
private
Application application;
Certaines des annotations supprimées dans les beans [Application] et [Form] déclaraient les classes comme étant des beans avec une certaine portée. Désormais, cette configuration est faite dans le fichier [faces-config.xml] [4] suivant :
Normalement, le portage est terminé. Il nous restera cependant quelques détails à régler. Nous pouvons tenter d'exécuter l'application web.
Nous laissons le lecteur tester cette nouvelle application. Nous pouvons l'améliorer légèrement pour gérer le cas où l'initialisation du bean [Application] a échoué. On sait que dans ce cas, les champs suivants ont été initialisés :
Ce cas peut être prévu dans la méthode init du bean [Form] :
- ligne 5 : si le bean [Application] s'est mal initialisé,
- ligne 7 : on récupère la liste des erreurs,
- ligne 9 : et on affiche la page d'erreur.
Ainsi, si on arrête le SGBD MySQL et qu'on relance l'application, on reçoit maintenant la page suivante :
VIII-B. Conclusion▲
Le portage de l'application Primefaces / EJB / Glassfish vers un environnement Primefaces / Spring / Tomcat s'est révélé simple. Le problème de la fuite mémoire signalée dans l'étude de l'application JSF / Spring / Tomcat (paragraphe , page ) demeure.
On le résoudra de la même façon.
VIII-C. Tests avec Eclipse▲
Nous importons les projets Maven dans Eclipse [1] :
Nous exécutons le projet web [2].
Nous choisissons le serveur Tomcat [3]. La page d'accueil de l'application est alors affichée dans le navigateur interne d'Eclipse [4].