Hibernate + plusieurs Bases de données.
Bonjour,
je développe une outil en utilisant Hibernate + postgresql qui permettra à des utilisateur de créer des projet (ensemble très volumineux d'informations). pour optimiser les performances, nous avons fait le choix de construire une BD par connexion utilisateur pour ne sauvegarder que les données de sont projet. En gros Un USER= Une BD.
Cependant, les services de la couche d'accès au données reste les même. il s'agit donc, à la connexion d'un USER
(1) de créer une BD pour ses données, et
(2) de rediriger Hibernate vers la bonne BD.
Une solution peu-être naïve serait de modifier le fichier hibernate.cfg.xml au démarrage. ll faudrait alors mettre à jour le classpath.ce qui ne m'intéresse pas.
on m'a aussi dit que je pouvais utiliser les sources de données hibernate. Quelqu'un aurait t-il un exemple de code utilisant les sources de données dans hibernate?
Je reste également preneur pour toute autre approche de résolution de ce problème.
Merci.
Construction dynamique de Session Hiernate
Pour ceux que ca intéresse voici la solution que j'ai adoptée et qui resoud mon problème.
J'ai en effet utiliser une initialisation programmatique de la propriété URL de connexion à la base de données. Ci-dessous un code simplifié de ma factory de session dynamique.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
public class DynamicSessionFactoryImpl{
Configuration config;
SessionFactory sessionFactory;
public static Session openDynamicSession(URL databaseURL){
try {
//le fichier hibernate.cfg.xml comporte tous les paramètres initialisation excepté l'url de la base de données
config= new Configuration().configure("hibernate.cfg.xml");
//initialisation programmatique de l'url de la base de données.
config.setProperty("hibernate.connection.url","jdbc:postgresql://"+databaseURL);
sessionFactory = config.buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException("Exception building SessionFactory: " +ex.getMessage(),ex);
}
return sessionFactory.openSession();
}
} |