IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Personnalisation de la connexion dans JEE


Sujet :

Développement Web en Java

  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut Personnalisation de la connexion dans JEE
    Bonsoir tout le monde;
    Je suis nouveau dans la programmation JEE.
    Je veux créer une application web jsf qui doit avoir une page pour authentification.
    Après que l'utilisateur soit authentifié, l'application doit établir une connexion à la base de donnée en utilisation le compte de cet utilisateur.
    Cela est nécessaire car la base de donnée contient des procédures stockées qui utilise des variables de contexte de session et d'utilisateur.
    J'ai cherché partout, j'ai trouvé que la connexion dans une application JEE est assurée par JPA via le fichier Persistence.xml.
    Le conteneur web utilise le fichier persistance pour générer l'entité manager qui assure la communication avec la base de donnée.
    La modification des données du fichier persistance dynamiquement n'est possible que dans JAVA SE et non dans JAVA EE.
    Est ce vrai?
    Sinon, comment faire pour réaliser pour cas?
    Merci pour toute idée.
    Deux personnes n'apprennent pas, un arrogant et un timide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu dois travailler avec un application managed persistence, tu ne peux injecter dans tes beans que la factory. Ensuite, à partir de la factory, tu peux créer un entitymanager avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Map<String, String> properties = new HashMap<String, String>();
      properties.put("javax.persistence.jdbc.user", "user1");
      properties.put("javax.persistence.jdbc.password", "user1pwd");
      EntityManager em = emf.createEntityManager(properties);

  3. #3
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut
    Merci pour ta réponse.
    D'après ce que j'ai lu, si je fais comme tu dis alors je doit gérer tout le cycle de vie de mon entity manager em et je perds l'assistance de JPA.
    N'est ce pas?
    Deux personnes n'apprennent pas, un arrogant et un timide.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu perds l'injection de l'entitymanager. Tu ne perds pas tout ce qui est gestion des entités par contre. Je ne pense pas qu'il y aie moyen d'injecter un entitymanager dans tes EJB dont la connexion dépendrais de l'utilisateur courant.
    Note qu'avec CDI et les @Producer, tu devrais avoir moyen peut être de t'en sortir

    http://docs.oracle.com/javaee/6/tutorial/doc/gjdid.html

  5. #5
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut
    Finalement, j'ai pu régler le problème en utilisant un bean stateful qui contient une entitymanagerfactory qui s'occupe de la fourniture des entity manager à chaque besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    import java.io.Serializable;
    import java.util.HashMap;
    import java.util.Map;
    import javax.ejb.Stateful;
    import javax.inject.Named;
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
     
     
    /**
     *
     * @author kaouane
     */
    @Stateful(mappedName="utilisateurEJB")
    @Named
    public class UtilisateurBean implements Serializable {
     
     
        private static EntityManagerFactory emf = null;
        private String nom;
        private String password;
        private String fonction;
     
     
        public String getNom() {
            return nom;
        }
     
     
        public void setNom(String nom) {
            this.nom = nom;
        }
     
     
        public String getPassword() {
            return password;
        }
     
     
        public void setPassword(String password) {
            this.password = password;
        }
     
     
        public String getFonction() {
            return fonction;
        }
     
     
        public void setFonction(String fonction) {
            this.fonction = fonction;
        }
     
     
        public static void initialisation_con(String nomU, String passwordU) {
            String PERSISTENCE_UNIT_NAME = "reftransportPU";
            Map<String, String> dbProps = new HashMap<String, String>();
            dbProps.put("javax.persistence.jdbc.user", nomU);
            dbProps.put("javax.persistence.jdbc.password", passwordU);
            emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, dbProps);
        }
     
     
        // Add business logic below. (Right-click in editor and choose
        // "Insert Code > Add Business Method")
     
        public EntityManager getEm() {
            return emf.createEntityManager();
        }
     
        public void deconnect(){
            emf.close();
            emf = null;
        }
    }
    et les autres bean utilisent les entitymanager construites à partir de emf au lieu d'être injectée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    @Stateless
    public class CdsFacade extends AbstractFacade<Cds> {
     
     
     
     
        @EJB
        private UtilisateurBean utilisateurBean;
     
     
        private EntityManager em = null;
     
     
        @Override
        protected EntityManager getEntityManager() {
            if (em==null) em = utilisateurBean.getEm();
            return em;
        }
     
     
        public CdsFacade() {
            super(Cds.class);
        }
     
    }
    Deux personnes n'apprennent pas, un arrogant et un timide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. connexion dans une procédure
    Par manue85 dans le forum Oracle
    Réponses: 4
    Dernier message: 29/06/2006, 16h34
  2. Réponses: 2
    Dernier message: 07/02/2006, 08h31
  3. Pb connexion dans oracle
    Par Abdou_9002 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2006, 10h47
  4. modifier une connexion dans un lot dts
    Par zimdim dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/01/2006, 11h39
  5. Page personnalisée par l'utilisateur dans l'application
    Par Rodrigue dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/05/2005, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo