View Full Version : Hibernate: Lo conoscete?
Ciao a tutti, volevo sapere se c'è qualcuno che conosca bene Hibernate in modo da aiutarmi a farlo funzionare, visto che sono due giorni che tutti i miei tentativi falliscono inesorabilmente :muro: :muro:
Ho fatto mille prove ma mi blocco sempre difronte al seguente errore :
org.hibernate.exception.GenericJDBCException: Cannot open connection
Sto usando Tomcat 5.5 con MySQL 4.1. Ho seguito la guida punto punto ma niente arrivo sempre a questo punto e da qui non mi schiodo.
Ho già preparato il file hibernate.cfg.xml, il file oggetto.hbm.xml in cui definisco la corrispondenza tra la mia classe e la tabella del mio database e in più ho definito il file di contesto nel quale ho impostato tramite JNDI il datasource utilizzato dalla mia applicazione. Ripeto ho seguito la guida punto punto e ho praticamente ricopiato il tutto, ma l'errore sopra mi perseguita sempre.
Aiutatemi :cry: :cry:
...sono incappato nello stesso problema...qualche consiglio?...
...ciao...
kazzinga
12-12-2006, 15:19
se postate il file hibernate.cfg.xml magari è possibile verificare che tutto sia impostato bene...BTW avete importato i driver JDBC per mySQL?
...ho deciso di evolvere e così ho intrapreso la strada di hibernate + postgres...i file di configurazione penso siano corretti e posizionati nella giusta directory...sto seguendo il tutorial di hibernate...
...la action di test...
public class TestAction extends BaseAction {
private final String FORWARD_MAIN = "test";
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
long startMilliseconds = System.currentTimeMillis();
String returnForward = "wrongForward";
returnForward = "test";
ActionMessages messages = new ActionMessages();
try {
TestForm main = (TestForm)form;
Session session = HibernateUtil.currentSession();
System.out.println("Open? "+session.isOpen());
System.out.println("Connected? "+session.isConnected());
Transaction tx= session.beginTransaction();
session.beginTransaction();
Cat princess = new Cat();
princess.setName("Princess");
princess.setSex('F');
princess.setWeight(7.4f);
session.save(princess);
tx.commit();
HibernateUtil.closeSession();
}catch(Exception e) {
System.out.println(e);
throw e;
}
saveMessages(request, messages);
return (mapping.findForward(returnForward));
}
}
...il file di configurazione del "contenitore"...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping package="it.assez">
<class name="it.assez.Cat" table="cat">
<id name="id" type="string">
<column name="c" not-null="true" sql-type="char(32)"/>
<generator class="uuid.hex"/>
</id>
<!-- A cat has to have a name, but it shouldn' be too long. -->
<property name="name">
<column length="16" name="name" not-null="true"/>
</property>
<property name="sex"/>
<property name="weight"/>
</class>
</hibernate-mapping>
...il file di configurazione di hibernate...
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">java:comp/env/jdbc/PostHibernate</property>
<property name="show_sql">false</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<!-- Mapping files -->
<mapping resource="Cat.hbm.xml"/>
</session-factory>
</hibernate-configuration>
...ed infine il context nel server.xml...
<Context debug="0"
docBase="C:/Programmi/eclipse-SDK-3.0.1-win32/eclipse/workspace/PostHibernate/WebContent"
path="/PostHibernate" reloadable="true">
<Resource name="jdbc/PostHibernate" scope="Shareable" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/PostHibernate">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- DBCP database connection settings -->
<parameter>
<name>url</name>
<value>jdbc:postgresql://localhost/PostHibernates</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.postgresql.Driver</value>
</parameter>
<parameter>
<name>username</name>
<value>postgres</value>
</parameter>
<parameter>
<name>password</name>
<value>postgres</value>
</parameter>
<!-- DBCP connection pooling options -->
<parameter>
<name>maxWait</name>
<value>3000</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>100</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
</ResourceParams>
</Context>
...l'errore viene scatenato alla riga "Transaction tx= session.beginTransaction();"...nella rete l'errore org.hibernate.exception.GenericJDBCException: Cannot open connection è legato principalmente a problemi di carico...situazione in cui il numero di connessioni supera il consentito...
...ciao...
...problema risolto...ho inserito tutte le informazioni relative al context nel file di configurazione di hibernate eliminandole quindi dal context di tomcat...
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:postgresql://localhost/postgres</property>
<property name="connection.username">postgres</property>
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="connection.password">postgres</property>
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<!-- thread is the short name for
org.hibernate.context.ThreadLocalSessionContext
and let Hibernate bind the session automatically to the thread
-->
<property name="current_session_context_class">thread</property>
<!-- this will show us all sql statements -->
<property name="hibernate.show_sql">false</property>
<!-- mapping files -->
<mapping resource="Cat.hbm.xml"/>
</session-factory>
</hibernate-configuration>
...ora mi sorge un dubbio...le classi pojo usate da hibernate possono venire estese?...volendo creare delle funzioni e delle variabili comuni per l'interfaccia con il db questa manovra sarebbe simpatica...la cosa che mi spaventa sono i file di mapping dei pojo...che non potendo essere estese dovranno mappare anche gli oggetti comuni...
...qualcuno ha esperienze in merito?...
...grazie...ciao...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.