mardi 9 décembre 2008

Développement n-tiers en java: la couche web

Plan de la session

séance 1: cours: Rappels d'architecture, Java Server Pages + Servlets
http://fichiers.partage.free.fr/jee2008/introduction.ppt
séance 2: TP: prise en main de l'environnement, tp jsp-servlet
http://fichiers.partage.free.fr/jee2008/tp1-jee-servlet.html
http://fichiers.partage.free.fr/jee2008/tp1.zip
séance 3: TP: Webapp + couche métier locale
mise en place de la couche métier (pojo)
http://fichiers.partage.free.fr/jee2008/domainsrc.zip
intégration de la couche métier avec la couche web
les mécanismes de navigation standard (CRUD)
les mécanismes de validation des règles métier
http://fichiers.partage.free.fr/jee2008/tp2-corrige.zip
a compléter pour cette correction:
terminer l'implémentation des contrôleurs en implémentant l'algorithme de validation et de navigation.
TP: de JavaBeans à EJB3
intégration de la couche métier-ejb à la couche web - jsp
http://fichiers.partage.free.fr/jee2008/tp3.doc
http://fichiers.partage.free.fr/jee2008/tphsql.zip
http://fichiers.partage.free.fr/jee2008/tpejb.zip
http://fichiers.partage.free.fr/jee2008/tp3-corrige.zip
séance 4: cours: Java Server Faces
http://f.pfister.free.fr/institut2008/ppt/jee5-jsf.ppt
http://f.pfister.free.fr/institut2008/ppt/jee5-jsf2.ppt
TP: mise en oeuvre de JSF
supports de TP:
initiation à JSF
validateurs
changelisteners
corrigés de TP:
datatable - formulaires
convertisseurs-validateurs
listeners-lifecycle et v2
projet JSF-EJB:
http://fichiers.partage.free.fr/jee2008/tpjsf-ejb.zip
séance 5: TP: travail personnel sur l'implémentation du code
Un squelette d'application
http://fichiers.partage.free.fr/jee2008/tp4.zip

Son modèle métier
http://fichiers.partage.free.fr/jee2008/simple-bank.gif

Un autre modèle: Module Ejb Banque + test unitaire
Le client de test unitaire est implémenté dans la classe client.BankTestClient
la base de données relationnelle utilisée par le module est la base DSDefault intégrée à JBoss
1) déployer le module sur le serveur JBoss
2)
client.BankTestClient - run as JUnit Test
http://fichiers.partage.free.fr/jee2008/banque-ejb.zip
séance 6: Evaluation
L'objectif global du projet "developpement N-Tiers" est d'intégrer une couche métier ejb composée des classes entité Banque, Client, Compte, Operation ainsi que des composants session sans état correspondants à une application web (JSP-Servlet, ou JSF) qui doit remplir les fonctions suivantes: pour chaque entité, navigation, création, suppression, recherche (fonctions CRUD), ainsi que validation de quelques règles de gestion: à minima, échec en cas de dépassement d'un découvert autorisé. La démarche de développement doit s'appuyer sur le codage de tests unitaires.

Les projets de développement N-Tiers seront évalués de la manière suivante :
- le mardi 6 Janvier entre 9h00 et 12H00. Chaque étudiant fera une démonstration de son prototype sur son poste de travail et répondra à des questions orales sur sa conception et son fonctionnement (15').
- à l'issue de cette évaluation, l'étudiant remettra un dossier présentant le code des différents composants (WEB et EJB) et des tests unitaires réalisés.

Méthodes et Outils pour industrialiser la production de logiciel

Industrialiser, c'est notamment
  • assurer qualité, fiabilité et maintenabilité
  • minimiser l'effort
  • mettre en œuvre méthodes, outils et bonnes pratiques

Concevoir

Concevoir le logiciel (utiliser Uml et les outils existants maintenant dans Eclipse : Topcased, Papyrus, eclipse-uml2. Utiliser netbeans et son outil Uml intégré)

Connaître et utiliser les motifs de conception (design-patterns): Composite, Stratégie, Visiteur, DAO, MVC, Observateur, Façade etc...

Concevoir des classes maigres (une seule responsabilité par classe), composées de méthodes courtes (limiter, en général, la taille d'une méthode à ce qui peut être contenu dans une fenêtre de l'outil de développement).

Utiliser massivement (mais à bon escient) la délégation . Vérifier la pertinence du nommage des classes et des méthodes. Refactorer le code en permanence.

Connaître

Les outils, méthodes, et cadres applicatifs standard ou émergents:
  • struts, spring, seam, velocity ou jet (templating), outillage xml
  • programmation générative, approches dirigées par les modèles

Construire

Structurer et découpler: une application doit être structurée en couches, chacune des couches est, si nécessaire, divisée en modules.

Les sous-ensembles du logiciel sont vus comme des boites noires, c'est à dire qu'ils déclarent une API sous la forme d'un jeu d'interfaces. Si le couplage entre les classes d'un module est fort, le couplage entre les modules et les couches doit être faible.

Lorsqu'une classe implémente une interface, la règle est de déclarer l'objet d'interface et d'instancier la classe. De plus, depuis jdk1.5, utiliser les génériques pour paramétrer classes et méthodes, ainsi que les annotations.


Outiller

Adopter les outils adaptés, facteurs de qualité:

Trace configurable
  • log4j
  • Implémenter des méthodes toString pour les classes
Test unitaire et d'intégration
  • JUnit
  • TestNG
  • Cactus
  • Cargo + Selenium
Dépot de code et gestion de version
  • Subversion
  • Cvs
Livraison
  • Utiliser l'outil ant pour compiler et déployer l'application

Analyser

Lire beaucoup de code.

Lire (et comprendre) le code des bibliothèques tierces.

Faire des revues de code en ayant une vision conceptuelle du logiciel.

Se représenter, mentalement, l'application en termes de diagramme de classes (à minima).

Faire de la rétro conception avec l'outil intégré dans netbeans.

Mettre au point


Savoir utiliser les outils de débogage, en comprendre les mécanismes (protocole de débogage distant, compilation dynamique et rechargement à chaud du bytecode).

Configurer l'outil de débogage pour tracer l'exécution des bibliothèques tierces.

Savoir diagnostiquer les erreurs en analysant les traces des piles d'exception.