Bonjour,
je butte sur la conception des couches JPA (en hibernate) et des EJB liés. j'aimerais donc votre aide pour éclaircir mon brouillard !
Je désire réaliser un système de compteS (oui le S est important).
Mon outil final permet à l'utilisateur d'etre informé de l'état de ses comptes de différents sites sans avoir à les visiter lui même (consultation de réponse aux sujets sur forum, nouveau messages privés, nouveau virements bancaires..)
l'objectif etant pour l'utilisateur de s'inscrire avec des adresses mails jetables et d'avoir un suivi de compte sans email.
Il y a des comptes de sites, des comptes de site bancaires, et d'autres dérivés.
Pour la partie JPA, en utilisant hibernate,
en partant de ce constat, j'ai élaboré une première classe : CompteBase
On y retrouve des attributs login et mot de passe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @Table(name="compte") @DiscriminatorColumn(name="type_compte", discriminatorType=DiscriminatorType.STRING, length=10) @SequenceGenerator(name="seq",sequenceName="id_compte") public abstract class Compte extends AbstractIdPojo<Compte> implements Serializable { //... }
Explications :
la classe est abstraite car je l'ai divisée en plusieurs catégories : compte généraliste, compte de site bancaire, pour lesquels il existe des attributs particuliers supplémentaires. (Exemple, le numéro de compte pour un compte bancaire)
Voici la classe comptebanque :
je souhaite que tous les comptes soient mémorisés dans la même table (et pas avoir une table par catégorie de compte).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Entity @DiscriminatorValue("BANQUE") public class CompteBanque extends Compte { private static final long serialVersionUID = -5845405990621967638L; @Column public String getNumCompte() { return numCompte; } public void setNumCompte(String numCompte) { this.numCompte = numCompte; } private String numCompte; }
J'aimerais que vous m'aidiez à valider que ce principe peut ainsi fonctionner.
Coté EJB, cela se complique énormément.
Pour utiliser le couple login/mdp et aussi utiliser l'API du site/service permettant de se connecter et récuperer des informations précises, cela se complique.
Il me faudra un classe par site/service et que chaque classe implémente un méthode ressemblant à : seConnecter(Compte cpt) (et une autre tester() )
(soit un objet Compte, soit un objet plus "typé" genre CompteBanque)
J'ai créé une classe abstraite par type de compte (site, banque...)
(la classe EJBAdmin est abstraite aussi et dispose de methode pour getter() lister, delete(), saveorupdate()... plus simplement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public abstract class AbstractCompteSite<T> extends EjbAdmin<CompteFacture> { public abstract void doProcess(ConnecteurFacture objpConnecteur); public abstract boolean doTest(ConnecteurFacture objpConnecteur); }
Chaque EJB qui permettra de se connecter à un compte quel qu'il soit implémentera cette interface.
Je pourrais donc me retrouver avec une classe CompteFacebook, héritant de AbstractCompteSite<Facebook>, ayant des methodes utilisant des API spéciales pour se connecter à Facebook.
Ma problématique est donc à la fois de sauvegarder un instance de CompteFacebook(), mais aussi d'instancier ! (c'est pour cela que je trouve qu'on se rapproche du pattern Factory)
Quand un utilisateur arrivera sur la page des différents comptes dont il dispose. Il faut que je puisse déterminer à quel site/service appartient chaque instance de compte().
C'est un peu confus, j'espère que vous saurez me guider concernant la sauvegarde de compte et sa récupération. Merci
Partager