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

Java EE Discussion :

@PersistenceContext pour du multi base de données


Sujet :

Java EE

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Points : 55
    Points
    55
    Par défaut @PersistenceContext pour du multi base de données
    Bonjour,

    j'ai créer une application de traitement java multi-couche (REST-Manger-DAO-Entity) utilisant java EE 6 JPA/JTA Hibernate. Pas de Spring ni de JSF car le client est PHP.

    Cette application est utilisée par 50 domaines différents et il devient difficile à gérer.

    Sachant que l'appli est la même sur les 50 domaines et que chaque domaines possède ca propre BDD, existe-il un moyen d'avoir 50 domaines qui se connecte sur une seul et unique appli et en fonction du domaine qu'il l'appelle, l'appli sait qu'elle BDD aller appeler ?

    Car actuellement j'ai mon fichier persistence.xml comme suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
      <persistence-unit name="Plugin-PU" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/sportreserv</jta-data-source>
        </properties>
      </persistence-unit>
    </persistence>
    et dans ma couche DAO, je me connecte comme suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @PersistenceContext(unitName = "Plugin-PU")
        private EntityManager em;
    Je sais que mon persistence.xml peut gérer sans souci plusieurs persistence-unit. Mais je ne sais pas comment faire pour les appeler avec mon @PersistenceContext en fonction du domaine qui a appelé l'appli...

    Quelqu'un peut m'aider ?

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Tu trouveras ton bonheur ici

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Points : 55
    Points
    55
    Par défaut
    Merci de ton aide, mais je ne pense pas que ca soie encore la bonne solution.

    car il créer des persistences unit pour chaque classe et c'est trop fastidieux si je dois le faire à chaque nouveau client.

    Il n'y a t'il pas une solution pour le mettre dans une seule classe qui est appelée par toutes les classes DAO qui utilise l'EntityManager ?

    et il y a une solution pour appeler cette classe depuis mes services REST (car c'est la que je récupères le nom de domaine) et que mes DAO s'en souvienne quand ca vient leur tour de travailler ?

    Merci de ton début d'aide...

  4. #4
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Citation Envoyé par chatis Voir le message
    car il créer des persistences unit pour chaque classe et c'est trop fastidieux si je dois le faire à chaque nouveau client.
    Pas compris cette phrase. Il est un fait auquel tu ne pourras pas échapper, c'est le fait que tu dois avoir un seul contexte de persistence pour chaque base de donnée, que tu passes par JPA ou une connexion jdbc native. Alors dans le tutoriel il est très bien spécifié que tu peux avoir une seule classe gérant les accès aux bases, mais dans cette classe tu géres plusieurs contextes via des entityManagers. Je te vois bien faire un switch quelque part pour te positionner sur le bon em en fct de l'appli en cours. Une autre solution que celle là je doute bien fort.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Points : 55
    Points
    55
    Par défaut
    Ben justement cette phrase provient du faites que je n'ai pas compris comment faire cette classe qui gère mes PersistenceContext et comment récupérer le bon entityManager dans mon DAO.

    Je sais que je dois faire un em par BDD, Mais je ne vois absolument pas comment faire.. car dans ton tuto, il ne montre pas vraiment d'exemple pour gérer... et franchement je ne sais pas du tout comment faire une classe qui gère ca avec ses annotations... je suis perdu !!!

  6. #6
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Il faut pourtant juste suivre le tutoriel. Tu configures ton persistContext.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
      <persistence-unit name="myPersistenceUnit" transaction-type="JTA">
        <jta-data-source>myDB</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties/>
      </persistence-unit>
      <persistence-unit name="secondPersistenceUnit" transaction-type="JTA">
        <jta-data-source>secondDB</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties/>
      </persistence-unit>
    </persistence>
    Ta classe gérant tes connexions :
    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
    //import...
    @Stateless
    public class MySessionBean
    {
        @PersistenceContexts({
       @PersistenceContext(name="persistence/myPU1", unitName="myDB"),
       @PersistenceContext(name="persistence/myPU2", unitName="secondDB")
    })
     
        public void myFunction()
        {
                //...
                EntityManager em1 = (EntityManager) new InitialContext().lookup("java:comp/env/persistence/myPU1");
    EntityManager em2 = (EntityManager) new InitialContext().lookup("java:comp/env/persistence/myPU2");
                //...
        }
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Points : 55
    Points
    55
    Par défaut
    OK je crois que je me suis mal exprimé.. Ca j'ai bien compris...

    Je vais essayer d'imager mon problème...

    J'ai 2 domaines : www.mondomaine.com et www.mon2emedomaine.com

    Chacun d'eux se connecte sur la même appli "plugin". Et chacun d'eux possède ca propre DB : ma1ereDB et ma2deDB.

    Lorsque www.mondomaine.com envoie une requète à "plugin", "plugin" doit reconnaitre dans le service REST que c'est www.mondomaine.com qui fait appelle à lui (deja ca je ne sais pas comment faire : trouver l'url qui appelle le service REST). Ensuite, le service REST transmet l'information à la couche manager de la classe concernée (Manager est la 2ème couche). Manager fait les traitements nécessaires puis transmet la requête final au DAO (DAO est la 3ème couche). Le DAO se connecte à la BDD grâce au @PersistenceContext et retourne l'objet final jusqu'au service REST.

    Mon problème est : Comment faire pour que mon DAO sache que c'est www.mondomaine.com qui, a la base, a fait appelle à lui et que, en fonction de cela, il doive appeler tel EntityManager ?

    Car je peux bien créer une classe qui s'appelle "MySessionBean" mais je ne sais pas comment l'intégrée dans mon DAO pour qu'elle me retourne le bon EntityManager...

    J'espère que j'ai été plus claire.... Et que quelqu'un trouvera une solution à mon problème, car la je suis VRAIMENT perdu..

    D'avance merci

Discussions similaires

  1. Quel outil utilisez vous pour concevoir vos bases de données
    Par Matthieu Brucher dans le forum Outils
    Réponses: 93
    Dernier message: 01/08/2014, 15h20
  2. Probleme pour créer un base de données...
    Par _matt_44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 03/06/2005, 14h36
  3. Réponses: 8
    Dernier message: 23/03/2005, 19h28
  4. Réponses: 4
    Dernier message: 29/11/2004, 22h53
  5. aide pour exporter une base de donnée
    Par matt55 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 06/04/2004, 14h28

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