Bonjour,
Je suis en train de faire des tests sur un traitement batch que je viens de développer, et je rencontre un problème avec ma connexion à la base Oracle 10g.
Au bout d'un temps x (très variable), en plein milieu de mon traitement (qui fait sans cesse des requêtes select & update) j'ai l'erreur suivante lorsque je cherche à récupérer la session :
Naturellement, la session n'est pas close dans mon code, et la transaction n'est pas terminé non plus.
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 2011-09-12 14:48:26,750 [main] ERROR com.teamlog.core.utils.HibernateUtil - La récupération de la session a échouée. com.teamlog.core.exception.DataAccessException: java.sql.SQLException: Connexion interrompue at com.teamlog.core.utils.SchemaManager.getSchemaOnConnection(SchemaManager.java:110) at com.teamlog.core.utils.HibernateUtil.getSession(HibernateUtil.java:141) at ccomptes.sami.comptes.persistence.dao.CompteDao.recupererCompteParSiretOrganismeEtExercice(CompteDao.java:465) at ccomptes.sami.batch.ImpXemInputReader.majCompte(ImpXemInputReader.java:387) at ccomptes.sami.batch.ImpXemInputReader.readLine(ImpXemInputReader.java:346) at ccomptes.sami.batch.ImpXemInputReader.readInputFiles(ImpXemInputReader.java:221) at ccomptes.sami.batch.mainBatchImportXemelios.main(mainBatchImportXemelios.java:24) Caused by: java.sql.SQLException: Connexion interrompue at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:840) at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:759) at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:281) at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:313) at com.teamlog.core.utils.SchemaManager.getSchemaOnConnection(SchemaManager.java:100) ... 6 more
J'ai de plus le système de validation des sessions définit :
hibernate.dbcp.validationQuery select 1 from dual
D'ailleurs les traces peuvent légèrement varié en fonction de l'endroit ou ça plante. Bref, vraiment aléatoire.
D'après les recherches que j'ai effectué, ça pourrait être un problème au niveau du pool de connexion.
Mais bon, je n'utilise qu'une seul session et il n'y a pas de moment d'inactivité (je lis un fichier plat pour mettre à jours des données).
J'ai mis à jour certaines librairies qui dataient un peu (l'application est assez vieille, tourne sur une JVM 1.4.2) dans l'espoir d'amélioration, mais ça ne suffit pas.
J'ai donc maintenant :
commons-dbcp.1.3 ,
commons-collections.3.2.1 ,
commons-pool.1.5.6
ainsi que le driver Oracle ojbc14.
J'utilise aussi un Hibernate (vieillot) : 2.1.8
Je le mettrais bien a jour mais cela pourrait avoir des impacts.
J'ai tenté de faire un commit / ligne lu, pour éliminer des pistes, et j'ai la même erreur.
Bref, j'ai l'impression que ça ne tient pas la charge.
Je n'ai plus vraiment de piste pour résoudre mon problème...
Quelqu'un a une idée ?
Partager