Affichage des articles dont le libellé est jsf. Afficher tous les articles
Affichage des articles dont le libellé est jsf. Afficher tous les articles

jeudi 22 novembre 2007

Java Enterprise Edition

Objectif
Se former sur les technologies web en java
Modalités
Ratio:
30% de théorie - 70% de pratique
Outils utilisés:
Eclipse, Netbeans, Jboss
Durée:
32 heures
Evaluation:
par binôme, dossier de projet et démo lors de la dernière séance.
Cours
Les technologies JEE5
TP

  • Appréhender les outils de développement
  • Appréhender les technologies jsp-servlet-jsf-jpa etc...
  • Rédiger une spécification fonctionnelle simplifiée
  • Concevoir un modèle métier simplifié (6 classes)
    • Banque
    • Client
    • Compte
    • Compte-epargne
    • Compte-courant
    • Ville
  • Implémenter les classes
  • Réaliser des jeux de test unitaire
  • Concevoir l'architecture technique (serveur web)
  • Réaliser le serveur web
  • Concevoir l'interface utilisateur
  • Choisir la technologie de persistance des objets métier
  • Coder les classes d'accès aux données
  • Intégration et tests
Supports de cours
introduction.ppt
jee5-jsp.ppt
jee5-jsf(1).ppt
jee5-jsf(2).ppt
Supports de tp
tp1: jee-servlet
tp2: jee-jsf
tp3: convertisseurs-validateurs-événements
tp3: bis valuechangelistener et cycle de vie
tp4: modèle du domaine avec de simples beans: Application bancaire
tp5: crud: navigation dans le modèle et mise à jour des données
tp6: base de données relationnelle Hypersonic
tp7: a) jdbc, introduction au mapping objet-relationnel
tp7: b) JBoss et sa base de données interne Hsqldb
tp8: mise en oeuvre de JPA (Java Persistence Api)
tp10: modèle du domaine simplifié
tp12: modèle du domaine simplifié (jpa+hibernate+dao+web)
Corrigés de tp
tp2: datatable, formulaire
tp3a: convertisseurs, validateurs
tp3b: listeners, lifecycle
tp3b: v2 listeners, lifecycle
tp4: modèle du domaine avec de simples beans: Application bancaire
tp5: crud
tp8: mise en oeuvre de JPA
tp10: v1 - modèle du domaine simplifié (simples javabeans)
tp10: v2 - modèle du domaine simplifié (jpa+hibernate)
tp11: modèle du domaine simplifié (jpa+hibernate+web)
tp11: modèle du domaine simplifié (jpa+hibernate+web sans libs)
tp12: modèle du domaine simplifié (jpa+hibernate+dao+web)

MyFaces
tp JBoss-MyFaces
tp MyFaces-exemples
Bibliothèques JEE
hibernate
hsqldb

TP: Crud Create-Retrieve-Update-Delete


Architecture
L'application est vue comme un modèle de données du domaine fortement structuré et typé et couplé.

Cette couche métier à caractère statique côtoie une couche d'interface utilisateur (swing, html, jsp, dans notre cas jsf), ainsi qu'une couche applicative constituée par les contrôleurs, à caractère dynamique.

Ce modèle du domaine est bien découplé des deux autres couches, ainsi que des couches techniques (persistance par exemple).

Dans le cas où le modèle est connecté avec un ou plusieurs modèles externes, cette connection s'effectuera au travers d'une API consitutée d'interfaces.

Les classes métier comportent des règles-métier de base (l'âge d'un personne ne peut être négatif....)
Les contrôleurs comportent des règles métier applicatives (on ne peut changer de département pour telle adresse, le solde du compte ne peut être inférieur à une limite autorisée).

Développer une application revient à concevoir et à coder le modèle statique, la mécanique navigationnelle (Crud = create-retrieve-update-delete), les règles de gestion et les exceptions-métier, l'interface utilisateur, après avoir choisi une infrastructure technique (jsf dans notre cas) et une solution de persistance du modèle (jdbc, hibernate, ejb, etc...), conformément aux spécifications fonctionnelles qui auront été rédigées pour satisfaire le besoin.

Organisation du code

La première tâche est de structurer le projet.
Les classes de l'application se situent dans un package bank. Les classes du modèle dans un package bank.model. Les exceptions métier ont également un package réservé, ainsi que les contrôleurs.

L'organisation du code proposée est le fruit d'un parti-pris architectural, et n'est en rien obligatoire. Cependant, cette méthode met en évidence le modèle MVC sous-jacent à JSF, et tend à établir une bonne pratique.

Les contrôleurs sont au nombre d'un par entité, ils ont tous la même structure.
Les composants graphiques sont extraits des contrôleurs et placés dans une classe View (package bank.view).
Les vues sont génériques, il ne doit pas y avoir d'adhérence au modèle, sauf décision de conception différente.

Afin d'éviter l'adhérence au modèle, on utilise éventuellement des classes utilitaires afin de peupler certains composants (voir classe KeyValuePair par exemple).

Les classes du modèle ne doivent comporter aucune adhérence aux contrôleurs ni aux vues. Vérifiez le en examinant la liste des imports.

L'organisation proposée n'est pas totalement aboutie. Il sera nécessaire, par la suite, de déresponsabiliser les contrôleurs des fonctionalités de navigation dans le modèle(crud). Ces fonctionnalités seront, plus tard, confiées à des classes DAO (Data Access Object), les contrôleurs conservant simplement une fonction d'aiguilleur.

Structure du projet


Interface utilisateur





Exemples de code

dans bankControler:

dans ListView


la classe KeyValuePair

dans bankForm.jsp


corrigé ici

mercredi 21 novembre 2007

Frameworks JSF - Ajax

  • Outre les bibiliothèques référencées par jsfmatrix déjà citées, voici deux autres bibliothèques JSF basées sur Ajax
  • Les composants Yahoo: Yui4jsf démo
  • Un framework Sun: jMaki démo

mardi 6 novembre 2007

TP: Application bancaire simplifiée

L'exemple est tiré de Netbeans: UMLBankAppSample

Spécifications:

L'application permet de créer banques, des clients et des comptes bancaires.
Les comptes sont de trois types:

  • Checking: compte courant
  • Saving: compte épargne
  • Platinum: compte de type carte de paiement
Tous les types de comptes ont les attributs suivants:

double balance; // le solde
String accountNumber; Le numéro de compte
double interestRate; //un taux d'intérêt

En outre ils possèdent un historique et ils sont liés à un client:

History history;
Customer customer;
  • Le client possède plusieurs comptes et possède les attributs suivants:
int id;
String name;
String forName;
String address;
String zipCode;
  • Le compte Checking est soumis à une pénalité en cas de découvert:
double overdraftPenalty = 25.00;
  • Le Platinum possède une autorisation maxi et une réserve d'argent qui diminue en cas de retrait si le solde n'est pas suffisant.
static final double overdraftLimit = 2500.00;
double availableFunds;
  • Le compte Saving rapporte des intérêts quand le solde est positif.
  • La classe History possède un seul attribut qui compte les opérations:
int transaction;


Créer un cas de test:



Créer un modèle de classes du domaine à base de simples javabeans (la persistence sera implémentée ultérieurement)

A l'exécution du test , on obtient:

-----Creating customers-----
-----Creating accounts-----
Account created: Checking Account: Number: 1234
Balance: 150.0 history is empty
Account created: Saving Account: Number: 12399
Balance: 100.0
Account created: Checking Account: Number: 9234
Balance: 1501.0 history is empty
Account created: Saving Account: Number: 92399
Balance: 1000.0
-----writings-----
1 Jean Dupont Saving Account: 12399 deposit 700.0
1 Jean Dupont Checking Account: 1234 deposit 360.0
1 Jean Dupont Checking Account: 1234 deposit 10.0
1 Jean Dupont Checking Account: 1234 deposit 20.0
1 Jean Dupont Checking Account: 1234 withdraw 10.0
1 Jean Dupont Checking Account: 1234 withdraw 20.0
1 Jean Dupont Checking Account: 1234 withdraw 60.0
2 Amélie Poulain Checking Account: 9234 deposit 10.0
2 Amélie Poulain Checking Account: 9234 withdraw 10660.0
2 Amélie Poulain Checking Account: 9234 noAvailableFunds
-----Bank Application balances-----
1 Jean Dupont
Checking Account: Number: 1234
Balance: 450.0 Transaction count is 3
Saving Account: Number: 12399
Balance: 800.0
------------
2 Amélie Poulain
Checking Account: Number: 9234
Balance: 1511.0 history is empty
Saving Account: Number: 92399
Balance: 1000.0
------------

Intégrer l'application dans une application web, au moyen d'un backing bean.

Créer les pages permettant de naviguer dans l'application, de créer, de supprimer, modifier des banques, des clients, des comptes, et d'effectuer des opérations.
Vérifier la non régression des règles de gestion.

Pour chaque entité, il faut prévoir une vue en liste basée sur une DataTable, et une vue d'édition basée sur un formulaire, voir tp jee-jsf et guide de référence
le modèle ici.
le corrigé v1 ici.

Myfaces et JBoss 4.2

Pour utiliser l'implémentation Apache MyFaces avec JBoss 4.2 et Redhat Developer Studio, il est nécessaire d'effectuer les opérations suivantes:

  • Créer un nouveau projet jsf

  • choisir MyFaces 1.1.4


Tester: Run as/Run on server ...

On obtient l'erreur suivante car il y a un conflit entre l'implémentation MyFaces déployée avec la webapp et l'implémentation de référence fournie avec JBoss.
10:04:44,796 ERROR [[/myfaces-examples]] Erreur lors de la configuration de la classe d'écoute de l'application (application listener) org.apache.myfaces.webapp.StartupServletContextListener
java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener
Solution: Supprimer l'implémentation JSF-RI de JBoss

  • Stopper le serveur JBoss
  • Supprimer les bibliothèques jsf livrées avec Jboss
ici: [jboss server dir]\server\default\deploy\jboss-web.deployer\jsf-libs

  • Mettre hors service les listeners jsf dans web.xml
ici: [jboss server dir]\server\default\deploy\jboss-web.deployer\conf\web.xml




ainsi que le paramètre suivant:



  • Redémarrer le serveur Jboss, vérifier que le serveur démarre sans exception et qu'il n'y ait pas d'erreur au déploiement de la webapp.

lundi 5 novembre 2007

Installer les exemples MyFaces

Les exemples de l'implémentation MyFaces subissent quelques modifications pour s'exécuter avec JBoss 4.2 et Eclipse.

  • Le site des exemples MyFaces original est ici.
  • Un projet MyFaces-examples modifié se trouve ici.
  • Créer un projet MyFaces comme il est décrit ici.
  • Copier le répertoire WebContent et JavaSource du projet téléchargé dans ce nouveau projet créé.

Modifier web.xml (répertoire WEB-INF) pour permettre l'affichage des codes sources, en adaptant le path (init-param source.dir) du code source du projet:

  • Run as / Run on server pour tester
Ajouter un exemple: ValueChangeListener et Validation.
Comment concilier un submit destiné à rafraichir une page, sans effectuer la validation du formulaire, avec un submit destiné à appliquer la règle de gestion et de navigation de la vue?

Créer un formulaire dans une jsp:


code de la jsp:


code du bean: