Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    DB multipli con Hibernate...

    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.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    86
    mi sa che dovresti configurare SQLMapConfig.xml, qui vengono definiti i DataSource, i metodin etc etc, comunque ti conviene dare uno sguardo su google...per fare questo è un pò complicato a quanto so io.
    Shashia

  3. #3
    ciao,
    Ti crei due hibernate.cfg.xml diversi con le configurazioni dei tuoi due database.
    Nel tuo HibernateUtil inizializzi due SessionFactory invece di uno solo, c'è una versione del metodo configure() che prende come parametro una stringa con il path dell'hibernate.cfg.xml da usare.
    Sempre nell'HibernateUtil ti fai un metodo comodo tipo così:
    codice:
    public static Session openSession(String databaseDaUsare) {
     if(databaseDaUsare.equals("sqlserver")) return sqlserverSessionFactory.openSession();
     else return mysqlSessionFactory.openSession();
    }

  4. #4
    Ciao a tutti!
    Anche se la discussione non è recentissima provo a fare una domanda su un mio quesito inerente!

    Io dovrei gestire la connessione a più di un db (oracle) nel seguente modo:
    ho 3 db di cui il primo , principale;
    se non trova il primo, prova a connettersi al secondo
    se non trova il secondo, prova a connettersi al terzo.

    Dovrei effettuare la connessione usando 3 blocchi try/catch
    tipo così
    codice:
    try{
    //CONNESSIONE AL DB1	
    }
    catch(Exception e1){
    	try{
    	//CONNESSIONE AL DB2	
    	}
    	catch(Exception e2){
    		try{
    		//CONNESSIONE AL DB3	
    		}
    		catch(Exception e3){
    		//NESSUN DB TROVATO	
    		}			
    	}
    }
    Oppure conviene testare se la connessione è == null e passare al successivo db se è così?
    "

  5. #5
    A mio modesto parere è meglio lasciare i blocchi try/catch alla gestione degli errori invece che al controllo del flusso di esecuzione.
    E' più una distinzione funzionale ma secondo me corretta.
    Quindi secondo me è corretto effettuare il controllo sull'oggetto null.

    Ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.