Ciao a tutti...
ho la necessità di capire come gestire più db con Hibernate.
Allo stato attuale io ho una servlet che riceve dei parametri, interroga un servizio web che restituisce un xml con dei dati, i quali dati vengono mappati con dei POJO che attraverso hibernate vengono memorizzati su MySql. Finquà tutto funziona.
Ora è nata l'esigenza che la servlet (o anche qualche altro componente) decida in maniera dinamica, in funzione di un parametro di input, su qualde db scrivere i dati (o su Mysql o su SqlServer o su entrambi).
Come faccio a dire in maniera dinamica a hibernate su quale db agire?
La connessione al db è gestita da tomcat e da hibernate attraverso un pool di connessioni.
Riporto sotto l'hibernate.cfg.xml:
<session-factory>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/ServletServiceInterface</property>
<property name="hibernate.dialect">org.hibernate.dialect.MyS QLDialect</property>
<property name="hibernate.transaction.factory_class">org.hib ernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.cache.provider_class">org.hibernat e.cache.NoCacheProvider</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.cache.use_minimal_puts">false</property>
<property name="hibernate.max_fetch_depth">3</property>
<property name="hibernate.current_session_context_class">thr ead</property>
<property name="hibernate.jdbc.batch_size">30</property>
<property name="hibernate.jdbc.batch_versioned_data">true</property>
C'è anche un listener sulla Servlet:
public class HibernateListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
HibernateUtil.getSessionFactory();
}
public void contextDestroyed(ServletContextEvent sce) {
HibernateUtil.getSessionFactory().close();
}
}
e l'HibernateUtil è così fatto nella parte principale:
static {
try{
sessionFactory = new Configuration().configure().buildSessionFactory();
}
catch (Throwable ex){
Logger.getLogger(HibernateUtil.class).warn("Initia l SessionFactory creation failed.",new ExceptionInInitializerError(ex));
}
}
Grazie mille e spero tanto di ricevere una risposta.
Ciao.

Rispondi quotando