Bonjour,

Je travaille actuellement sur l'insertion de 300000 utilisateurs à partir d'un fichier xml. Je lie le fichier xml avec l'API SAX et réalise trois inserts par utilisateur dans trois tables différentes.
Cependant, je fais face à un souci, tous les n enregistrements le batch semble se bloquer sur une synchronisation entre Hibernate et la base de données oracle.

Voici les paramétres du fichier hiberante.cfg.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XXXX</property>
<property name="hibernate.connection.username">XXXX</property>
<property name="hibernate.connection.password">XXXX</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="default_schema">XXXX</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.connection.autocommit">false</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
 
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.minPoolSize">2</property>
<property name="c3p0.maxPoolSize">50</property>
<property name="c3p0.timeout">300</property>
<property name="c3p0.max_statement">5</property>
<property name="c3p0.idle_test_period">150</property>
<property name="c3p0.max_size">100</property>
 
<mapping resource="xxx/xxx/xxx.hbm.xml" />
....
et voici le code appelé pour chaque insert :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
Session oSession = null;
Transaction tx = null;
try {
oSession = HibernateUtil.getSessionFactory().openSession() ;
tx = oSession.beginTransaction();
oSession.save(object);
oSession.flush() ;
oSession.clear() ;
tx.commit();
} catch (Exception ex) {
if (tx != null) {
tx.rollback();
}
Throws ex ;
} finally {
if (oSession != null) {
oSession.flush();
oSession.close();
}
}
Merci par avance de votre aide.
@+,

HadanMarv