Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [JAVA] Hibernate, configurazione base

    Ho dei problemi con la configurazione di un semplice esempio "Getting started with.." con hibernate.
    Questo perchè l'esempio in questione (http://www.hibernate.org/hib_docs/v3...uickstart.html ) vuole utilizzare il pooling di connessioni di Tomcat, mentre io per il momento non sono interessato e voglio utilizzare quello di default di hibernate.

    Il flusso del programma di esempio è il seguente:
    Servlet->Session session = HibernateHelper.currentSession().

    HibernateHelper da una eccezione in questo punto:
    codice:
    public class HibernateHelper {
    	
        private static final SessionFactory sessionFactory;
    	
    	static
    	{
            try 
            {
                // **************** L'eccezione parte da qui
                sessionFactory = new Configuration().configure().buildSessionFactory();
            } catch (Exception ex) {
            	ex.printStackTrace();
                throw new ExceptionInInitializerError(ex);
            }
        }
    
        // ...
    }
    Infine, questo è il file di configurazione che utilizzo. Probabilmente l'errore è proprio qui, dato che ho tentato di togliere la gestione del pooling dbcp sostituendola con quella di default.. e del resto è l'unica parte del tutto in cui ho messo le mani.

    codice:
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    
        <session-factory>
    		
    		<!-- per JNDI
            <property name="connection.datasource">java:comp/env/jdbc/hibernate</property>
            -->
            
            <property name="connection.url">jdbc:mysql://127.0.0.1/hibe</property>
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.username">root</property>
            <property name="connection.password"></property>
            <property name="connection.pool_size">5</property>
            
            <property name="show_sql">false</property>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            
    
    
            
            <mapping resource="Cat.hbm.xml"/>
    
        </session-factory>
    
    </hibernate-configuration>

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    up
    nessuno usa hibernate? oO

  3. #3
    Sinceramente non mi trovo con l'uso che fai del file di configurazione.

    Prima di tutto non sfrutti l'hibernate.properties?

    Io uso questo mapping:

    codice:
    <hibernate-configuration>
    	<session-factory>
    		<property name="connection.datasource">java:comp/env/jdbc/hibe</property>
    		<property name="connection.datasource.removeAbandoned">true</property>
    		<property name="connection.datasource.removeAbandonedTimeout">60</property>
    		<property name="show_sql">true</property>
    		<property name="transaction.factory_class">net.sf.hibernate.transaction.JDBCTransactionFactory</property>
    		<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
    		<property name="connection.autoReconnect">true</property>
    		<property name="connection.autoReconnectForPools">true</property>
    		<property name="connection.is-connection-validation-required">true</property>
    
            
            <mapping resource="Cat.hbm.xml"/>
       </session-factory>
    </hibernate-configuration>
    codice:
    hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
    hibernate.connection.driver_class com.mysql.jdbc.Driver
    hibernate.connection.url jdbc:mysql://localhost:3306/hibe
    hibernate.connection.username root
    hibernate.connection.password
    Prova così.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Mi sfugge una cosa
    Io ho capito che si puo usare o la config tramite xml o tramite properties. Cosi ho deciso di usare la conf xml, senza datasource/jndi/pooling dbcp ottenendo piu o meno la stessa cosa del properties che proponi nel tuo post, solo ficcato dentro un xml.

    Devo comunque configurare entrambi, prop e xml oppure che errore ho fatto nel mio xml?

  5. #5
    Perchè non posti lo stackTrace, in modo da capire meglio l'errore.

    Anche per chè, a parte le differenze di configurazione tra xml e properties, non vedo sostanziali errori nel codice.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Io posso pure postarlo ma il 90% dello stack riguarda tomcat e catalina, l'unica eccezione rilevata è quella sollevata dal codice che ho postato.

    Tiro su un momento il server e posto lo stack.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    stack

    codice:
    java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    	at org.hibernate.cfg.Configuration.(Configuration.java:110)
    	at prova.HibernateHelper.(HibernateHelper.java:14)
    	at prova.Prova.doGet(Prova.java:15)
    codice completo della servlet
    codice:
    public void doGet (HttpServletRequest request, HttpServletResponse response)
    	{
    		System.out.println("ciao");
    		
    		Session session = HibernateHelper.currentSession();
    		Transaction tx = session.beginTransaction();
    		
    		Cat c = new Cat();
    		c.setNome("Birba");
    		
    		session.save(c);
    		tx.commit();
    		
    		HibernateHelper.closeSession();
    
    	}
    codice completo di hibernate helper
    codice:
    package prova;
    
    import org.hibernate.*;
    import org.hibernate.cfg.*;
    
    public class HibernateHelper {
    	
        private static final SessionFactory sessionFactory;
    	
    	static
    	{
            try 
            {
                sessionFactory = new Configuration().configure().buildSessionFactory();
            } catch (Exception ex) {
            	ex.printStackTrace();
                throw new ExceptionInInitializerError(ex);
            }
        }
        
        public static final ThreadLocal session = new ThreadLocal();
    
        public static Session currentSession() 
        {
            Session s = (Session) session.get();
            
            if (s == null) 
            {
                s = sessionFactory.openSession();
                session.set(s);
            }
            return s;
        }
    
        public static void closeSession() 
        {
            Session s = (Session) session.get();
            if (s != null)
                s.close();
            session.set(null);
        }
    
    
    	
    }

  8. #8
    Attenzione! La NoClassDefFoundError è un'eccezione generata quando manca una classe nel tuo classpath.

    In particolare non hai aggiunto al tuo progetto le librerie Common di Apache, che sono (con le versioni che sto utilizzando):

    [list=1][*]commons-logging-1.0.4.jar[*]commons-dbcp-1.2.1.jar[*]commons-pool-1.2.jar[*]commons-collections-2.1.1.jar[/list=1]

    Verifica se tra le librerie di Hibernate che hai scaricato ci siano(dovrebbero esserci) e fai in modo di compilare i tuoi sorgenti aggiungendo le librerie al classpath

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Intanto ti ringrazio dei suggerimenti.

    Nel post precedente ho dimenticato di specificare che le commons-logging ce le ho in web-inf/lib, e che contengono le classi richieste che lui dice di non trovare

    Per quanto riguarda gli altri jar (che non ho nel classpath)...dbcp, per l'appunto, non lo voglio usare..le altre due a cosa servono?

  10. #10
    Scusami, ma sono stato un po' lontano dal PC in questi giorni, anche se sembra impossibile prima di tutto a me.

    Non so molto di queste libreririe, a dire il vero, so solo che senza il sistema non funziona e le richiede.

    Non le utilizzo direttamente, besì Hibernate ne fa un uso trasparente. Posso solo limitarmi a farmi un'idea del loro impiego partendo dai nomi dei jar (pool e collection).

    Non so dirti di più, almeno per adesso. Magari faccio un po' di ricerche visto che ci lavoro tutti i giorni.

    Eumene

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 © 2024 vBulletin Solutions, Inc. All rights reserved.