Bonjour à tous,

Je ne sais pas si cette nouvelle discussion à sa place dans cette section mais bon.
J'ai une application Java qui utilise Hibernate et se connecte à une BDD Oracle.
Un traitement appel en boucle une requête "select" écrite en SQL natif, qui ouvre systématiquement un curseur mais ne le referme jamais, ce qui aboutit à une erreur Oracle "ORA-01000: Nombre maximum de curseurs ouverts atteint".
Dans le détail:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
...
Session session = HibernateUtil.getSession();
...
String sqlQuery = "select MAX(CAST (SUBSTR("...
ResultSet result = session.connection().createStatement().executeQuery(sqlQuery);
result.next();
max = result.getInt(1);
result.close();
Le ResultSet est bien clos à chaque appel, mais lorsque je consulte la table V$OPEN_CURSOR pendant l'exécution du traitement je trouve une grande quantité de curseurs concernant l'appel à cette méthode.
J'ai tenté l'ajout d'un session.close(); mais le résultat est plutôt étrange:
- je n'ai plus tous les curseurs ouverts
- le traitement se fini sans erreur (dans la suite les insertions sont faites correctement)
- je trouve quantité de message d'erreur:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
[18/08/10 10:55:48:443 CEST]  7ceffde MCWrapper     E J2CA0081E: La méthode cleanup a échoué lors de la tentative d'exécution de la méthode cleanup sur la connexion gérée com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl@7171bfdc à partir de la ressource jdbc/capeb_ds. Exception interceptée : com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: Cannot call 'cleanup' on a ManagedConnection while it is still in a transaction..
	at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:217)
	at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:171)
	at com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdapterException(AdapterUtil.java:191)
	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.cleanupTransactions(WSRdbManagedConnectionImpl.java:2179)
	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.cleanup(WSRdbManagedConnectionImpl.java:1967)
	at com.ibm.ejs.j2c.MCWrapper.cleanup(MCWrapper.java:1154)
	at com.ibm.ejs.j2c.poolmanager.FreePool.returnToFreePool(FreePool.java:286)
	at com.ibm.ejs.j2c.poolmanager.PoolManager.release(PoolManager.java:1209)
	at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:1661)
	at com.ibm.ejs.j2c.ConnectionEventListener.connectionClosed(ConnectionEventListener.java:207)
	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.processConnectionClosedEvent(WSRdbManagedConnectionImpl.java:875)
	at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.closeWrapper(WSJdbcConnection.java:466)
	at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:127)
	at net.sf.hibernate.connection.DatasourceConnectionProvider.closeConnection(DatasourceConnectionProvider.java:64)
	at net.sf.hibernate.impl.BatcherImpl.closeConnection(BatcherImpl.java:308)
	at net.sf.hibernate.impl.SessionImpl.disconnect(SessionImpl.java:3387)
	at net.sf.hibernate.impl.SessionImpl.close(SessionImpl.java:584)
	at fr.capeb.gestionfiches.hibernate.helper.KeyHelper.findByCodeSyndGeo(KeyHelper.java:66)
	at fr.capeb.gestionfiches.hibernate.facade.RelArtisanCcpbHistoFacade.getCompteur(RelArtisanCcpbHistoFacade.java:25)
	at fr.capeb.gestionfiches.hibernate.helper.CotMtPartHelper.miseAjourCotMtPart(CotMtPartHelper.java:280)
	at fr.capeb.gestionfiches.service.TraitementImportCCPB.traiteCotisationExistante(TraitementImportCCPB.java:393)
	at fr.capeb.gestionfiches.service.TraitementImportCCPB.lancerImport(TraitementImportCCPB.java:127)
	at fr.capeb.scheduler.task.impl.TacheImportCCPB.execute(TacheImportCCPB.java:50)
	at fr.capeb.scheduler.task.Task.run(Task.java:96)
	at java.lang.Thread.run(Thread.java:513)
 
[18/08/10 10:55:48:630 CEST]  7ceffde WSRdbManagedC W DSRA0180W: Exception détectée lors de ManagedConnection.destroy(). L'exception est : com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: Cannot call 'cleanup' on a ManagedConnection while it is still in a transaction..
	at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:217)
	at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:171)
	at com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdapterException(AdapterUtil.java:191)
	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.cleanupTransactions(WSRdbManagedConnectionImpl.java:2179)
	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.destroy(WSRdbManagedConnectionImpl.java:1707)
	at com.ibm.ejs.j2c.MCWrapper.destroy(MCWrapper.java:1304)
	at com.ibm.ejs.j2c.poolmanager.FreePool.returnToFreePool(FreePool.java:299)
	at com.ibm.ejs.j2c.poolmanager.PoolManager.release(PoolManager.java:1209)
	at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:1661)
	at com.ibm.ejs.j2c.ConnectionEventListener.connectionClosed(ConnectionEventListener.java:207)
	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.processConnectionClosedEvent(WSRdbManagedConnectionImpl.java:875)
	at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.closeWrapper(WSJdbcConnection.java:466)
	at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:127)
	at net.sf.hibernate.connection.DatasourceConnectionProvider.closeConnection(DatasourceConnectionProvider.java:64)
	at net.sf.hibernate.impl.BatcherImpl.closeConnection(BatcherImpl.java:308)
	at net.sf.hibernate.impl.SessionImpl.disconnect(SessionImpl.java:3387)
	at net.sf.hibernate.impl.SessionImpl.close(SessionImpl.java:584)
	at fr.capeb.gestionfiches.hibernate.helper.KeyHelper.findByCodeSyndGeo(KeyHelper.java:66)
	at fr.capeb.gestionfiches.hibernate.facade.RelArtisanCcpbHistoFacade.getCompteur(RelArtisanCcpbHistoFacade.java:25)
	at fr.capeb.gestionfiches.hibernate.helper.CotMtPartHelper.miseAjourCotMtPart(CotMtPartHelper.java:280)
	at fr.capeb.gestionfiches.service.TraitementImportCCPB.traiteCotisationExistante(TraitementImportCCPB.java:393)
	at fr.capeb.gestionfiches.service.TraitementImportCCPB.lancerImport(TraitementImportCCPB.java:127)
	at fr.capeb.scheduler.task.impl.TacheImportCCPB.execute(TacheImportCCPB.java:50)
	at fr.capeb.scheduler.task.Task.run(Task.java:96)
	at java.lang.Thread.run(Thread.java:513)
En attente donc d'une âme charitable qui pourra m'aider.