Bonjour,
J'ai un gros souci avec hibernate 3.1.
J'ai très régulierement des SessionException lors d'une tentative d'ajout, d'update ou même de lecture. La cause : une Session prématurément close ?
Je vois pas du tout d'ou peut venir le problème. Que faut-il que je vérifie ? Quels sont les points critiques dans la gestion de session ????
Voici mon hibernate.cfg.xml :
Code :
- <?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>
- <!-- une instance de SessionFactory accessible par son nom jndi -->
- <session-factory
- name="java:comp/env/hibernate/SessionFactory">
- <!-- propriétés -->
- <property name="connection.username">user</property>
- <property name="connection.password">pass</property>
- <property name="connection.url">jdbc:postgresql://150.85.225.51:5432/video </property>
- <property name="connection.driver_class">org.postgresql.Driver</property>
- <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
- <property name="batch_size">20</property>
- <property name="show_sql">true</property>
- <property name="use_outer_join">true</property>
- <property name="default_lazy">true</property>
- <property name="c3p0.acquire_increment">1</property>
- <property name="c3p0.idle_test_period">100</property>
- <property name="c3p0.min_size">10</property>
- <property name="c3p0.max_size">100</property>
- <property name="c3p0.timeout">100</property>
- <property name="c3p0.max_statements">0</property>
-
- <!--property name="transaction.factory_class">
- org.hibernate.transaction.JTATransactionFactory
- </property>
- <property name="jta.UserTransaction">java:comp/UserTransaction</property-->
- <!-- mapping files -->
- <mapping resource="titi/tutu/toto/Livrable.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
|
et mon code (j'utilise la classe hibernate utilitaire préconisée dans la doc de référence hibernate):
Code :
- DemandePrestation dp=null;
- try {
- HibernateUtil.beginTransaction();
- Session session = HibernateUtil.getSession();
- dp = (DemandePrestation)session.get(DemandePrestation.class, dp_id);
- Livrable livrable = new Livrable();
- livrable.setId(livrable_id);
- livrable.setDatePrevue(date);
- livrable.setLibelle(libelle);
- livrable.setCommentaire(commentaire);
- dp.addLivrable(livrable);
- session.save(livrable);
- HibernateUtil.commitTransaction();
- } catch (SessionException e) {
- log.error(e);
- HibernateUtil.rollbackTransaction();
- throw new HibernateException("Erreur : Session invalide. Veuillez vous reconnecter" );
- } catch (ConstraintViolationException e) {
- log.error(e);
- HibernateUtil.rollbackTransaction();
- throw new HibernateException("Erreur : Livrable déja existant" );
- } catch (Exception e) {
- log.error(e);
- HibernateUtil.rollbackTransaction();
- throw new HibernateException("Erreur inattendue" );
- }finally {
- HibernateUtil.closeSession();
- }
|
Merci !!