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

Hibernate Java Discussion :

Comment avoir des centaines de configuration Hibernate vers des centaines de DB diff?


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut Comment avoir des centaines de configuration Hibernate vers des centaines de DB diff?
    Bonjour,

    Nous avons une application web que nous allons déployer pour environs 200 clients. Le problème est que chaque client aura sa propre base de données, et donc une configuration Hibernate différente. Ce qui veut dire qu'il nous faudrait 200 configurations différentes d'Hibernate...

    Pour l'instant, nous avons 5 clients, donc nous avons fait un WAR par client, avec sa propre configuration d'Hibernate, pointant sur sa base spécifique. Nous avons donc deployé 5 webapp dans notre TomCat.

    Maintenant imaginez comment cela se passera quand nous auront déployé pour les 200 clients... 200 webapp dans notre(nos) TomCats...

    Donc je me demandais si qqun aurait une idée sur comment réussir à n'avoir qu'un seul WAR, dans un seul TomCat, et qu'à la connexion de l'utilisateur, nous utilisions la bonne configuration d'Hibernate, pointant vers sa base de données. Comment faire techniquement ?

    Merci pour vos lumières !

    Michaël.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Par défaut
    Tu crées un fichier de conf Hibernate avec les valeurs communes à tous tes clients.
    Ensuite, tu crées un fichier pour chaque client, avec leurs valeurs particulières.
    Au lancement de ton appli web, tu surcharges les valeurs de ton fichier de conf hibernate, par les valeurs du fichier client.
    Voir les méthode de sessionFactory.

  3. #3
    Membre chevronné
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Par défaut
    1) INIT :
    Quelques part dans le servlet context, ou dans un singleton, tu définies une map de SessionFactory :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Map<String, SessionFactory> mapSessFactoryParClient;
    ...
    Tu crées un Servletcontextlistener ou une servlet d'init et tu alimentes la map ,là normalement ca prend du temps ! Et n'oublie pas de tout libérer à la destruction du contexte (le truc qu'on oublie systématiquement, puis on passe du temps a chercher d'ou vient la fuite mémoire !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mapSessFactoryParClient.put("client1", new Configuration.configure("hibernate_client1.cfg.xml").buildSessionFactory());
    mapSessFactoryParClient.put("client2", new Configuration.configure("hibernate_client2.cfg.xml").buildSessionFactory());
    tu peux surement mutualiser les références aux fichiers de mapping et d'autres chose, la solution de fr1man est peut être plus optimale (en mémoire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Configuration.configure("hibernate_commun.cfg.xml")
    et tu utilises la méthode setProperties() avec des propriétés de connexion différentes pour chaque client. Par contre tu devras quand même gérer plusieurs fichiers de propriétés (1 par client)

    CF : http://www.hibernate.org/hib_docs/re...iguration.html

    2)
    Dès qu'un utilisateur se connecte, tu récupères le client auquel il appartient et tu le stockes en session.

    Ensuite tu récupères la factory juste avant l'ouverture d'une session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SessionFactory sessionFactory = MonSingletonSympa.getFactoryParClient(session.getAttribute("client"));
    sessionFactory.openSession()
    ...
    Généralement on associe la session hibernate au threadlocal pour pouvoir réutiliser la même connection jdbc à travers les couches applicatives (et faire de la démarcation de transaction applicative). Si c'est ton cas, il faudra adapter la classe qui gère ca (généralement c'est HibernateSession, qui est fournit en exemple)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Merci beaucoup pour ces réponses Je pensais effectivement à un truc comme ça (Map de session) mais je ne savais pas si ce serait faisable au niveau d'Hibernate.

    Et quelle réactivité

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

Discussions similaires

  1. Suppression des noms de cellule envoyant vers des liens externes
    Par deadly_muffin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/02/2012, 14h56
  2. Réponses: 2
    Dernier message: 13/11/2010, 14h13
  3. Comment avoir des information sur une BD?…
    Par kikimnet dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/02/2005, 09h20
  4. |VB6] Comment Lister les liens vers des fichiers d'une page web
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/01/2005, 18h17
  5. Comment avoir des marges dans un TRichEdit ?
    Par nomdutilisateur dans le forum Composants VCL
    Réponses: 5
    Dernier message: 25/06/2004, 09h57

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