TP4 EJB 2011-2012 : ajout de relations au TP3

De $1

Introduction

CE TP EST A RENDRE POUR LE TP DE LA SEMAINE DU 3/12/2012, remise en main propre pendant la séance de TP. Modalités à la fin du cours.

Dans ce TP nous allons manipuler les relations. Nous continuons le TP sur les comptes bancaires. Nous allons associer à chaque compte bancaire un historique  : une liste d'opérations bancaires, sous la forme d'une relation 1-N. Un compte bancaire aura n opérations reliées.

Par exemple :

afficheDetails.jpg

Creation d'une classe entité OperationBancaire

Première étape : ajouter au projet une classe entité correspondant à une OperationBancaire. Elle aura comme attributs :

  • un id (sa clé primaire),
  • une description (par exemple "création du compte", "débit", "crédit"...),
  • la date de l'opération (de type java.util.date), et
  • le montant impliqué (positif pour un crédit, négatif pour un débit, le solde initial pour une création).

Ne copiez/collez pas ce code intégralement, ommetez l'attribut de type Date, celui-là vous le saisirez à la main : lorsque vous taperez l'attribut de type Date (on vous proposera d'importer java.util.Date), automatiquement, une annotation de code @Temporal apparaitra. Oui, les dates sont bien des types spéciaux !

@Entity
public class OperationBancaire implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String description;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dateOperation;
    private int montant;

    public OperationBancaire() { }

    public OperationBancaire(String description, int montant) {
        this.description = description;
        this.montant = montant;
        dateOperation = new Date();
    }

 

Ajout de la relation dans la classe entité CompteBancaire

Il suffit de taper la ligne correspondant à l'attribut "liste d'opérations bancaires" dans l'entité CompteBancaire pour qu'une ampoule jaune vous propose d'insérer une annotation correspondant à une relation @OneToMany.

Ne copiez/collez pas le code, tapez le !

Vous compléterez l'annotation avec les attributs concernant le cascading et le chargement :

  • CascadeType.ALL signifie que si on persiste un compte on persiste aussi l'historique, idem pour une suppression.
  • L'attribut FetchType indique que lorsqu'on fait un select sur un compte, on charge aussi son historique.
  • La relation ici est uni-directionnelle.
@Entity
public class CompteBancaire implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String nom; 
    private int solde;
    @OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.EAGER)
    private Collection<OperationBancaire> operations = new ArrayList<>();

    public Collection<OperationBancaire> getOperations() {
        return operations;
    }
    ....

Vérifiez qu'on est bien en mode "Drop and Create", puisque le modèle de données va changer !

Double cliquez sur le fichier persistence.xml de votre projet et assurez-vous bien que vous êtes en mode "drop and create", c'est-à-dire que lorsque vous déploirez votre projet, même incrémentalement après un ctrl-s, les tables seront supprimées et re-créées. Ainsi, si vous changez les entités, les tables seront toujours bonnes. Du coup il vous faut aussi re-créer les données (en appelant creerCompteDeTest...) avant de pouvoir tester votre programme.

Modifiez l'entité CompteBancaire

Associer une operation à chaque création/modification d'un compte

Chaque fois qu'on crée un compte on va ajouter une opération "Création du compte", on va faire cela dans le constructeur, il faut rajouter :

OperationBancaire op = new OperationBancaire("Création du compte", solde);
operations.add(op); // ici on ajoute la relation

 De la même manière les méthodes qui permettent de retirer ou de déposer de l'argent vont ajouter une opération "débit" ou "crédit".

Modifier le bean GestionnaireDeComptesBancaires

Ajouter une méthode qui permette de chercher un compte

public CompteBancaire getCompte(int id) {
   // code à écrire !
}

 

Modifiez la page JSF qui affiche la liste des comptes

Objectif : Chaque ligne dans le tableau d'affichage des comptes propose un lien qui appelle une méthode du backing bean qui va diriger vers une autre page permettant d'afficher la liste des opérations du compte (le lien s'appelle dans le screenshot suivant "Détails". La page JSF qui affiche les détails des opérations d'un compte est très semblable à celle qui affiche les comptes, elle comprendra une datatable etc.

details.jpg

Lorsqu'on clique sur un de ces liens, cela appelle la méthode showDetail du backing bean. Regardez comment on avait fait dans le TP1.

Ecriture d'une page JSF pour l'affichage de l'historique d'un compte

Il reste maintenant à écrire la page JSF qui va se charger d'afficher les détails du compte.

afficheDetails.jpg 

Pour les M2 Miage MBDS et NTDP de Nice : ce TP est à rendre

Modalités de rendu de ce TP

OBLIGATOIRE POUR LE TP:

  1. Utilisation de templates comme dans le TP2,
  2. Système ergonomique pour le transfert/dépôt/retrait d'argent (ne pas entre à la main les ids)
  3. Obligation d'utiliser quelques composants PrimeFaces non étudiés en TPs
  4. Pour le MBDS : comptes courants sous classes des comptes bancaires et EJBTimer qui rapporte des sous toutes les 10s
  5. Pour le MBDS : Message Driven Bean pour les ordres de transfert bancaires
  6. Pour le MBDS : Lazy Loading pour l'affichage des tableaux
  7. La prise en compte du cours sur la navigation avec faces-redirect=true, view params et utilisation intelligente des scopes est un plus
  • A faire en binome, ou seul,
  • Rendre un zip portant TP3_NTDP_OU_MBDS_2012-2013-binome1-binome2.zip
  • Dans le zip : le répertoire du projet, une petite doc explicative avec points forts, points faibles, des screnshots. Tout ce que vous avez utilisé et qui n'a pas été expliqué en cours devra faire l'objet d'explications dans le readme.
  • Vous nous remettrez sur clé USB les TPs le jour de la démo (on passera dans les rangs).
  • Date de rendu séance de TP de la semaine du 3/12 pendant la séance de TP. Aucun retard toléré. Projet non rendu à l'heure = zéro à la note de TP.
  • Vous avez le droit de copier sur le voisin si vous êtes perdus, vous avez le droit de copier du code pris sur le net, A CONDITION DE BIEN INDIQUER LES SOURCES et d'avoir fait l'effort de comprendre ce que vous avez ré-utilisé.

Notes et archives des TPs rendus M2 Miage NTDP 2011-2012

  • A venir

 

Mots clés:
 
Images (0)
 
Commentaires (0)
Vous devez être connecté pour poster un commentaire.