Bonjour,
Je travaille depuis quelques jours sur un projet java sur lequel la couche d'accès aux données est codée "à l'ancienne". A chaque demande client, on crée ouvre une transaction, on réalise le traitement, on ferme la transaction et on renvoie les données. La récupération d'une connexion se fait via une méthode d'un bean Spring dont voici le code :
En soit, ça marche plutôt bien, donc pas envie de tout changer. Le gros problème est que si un client lance une transaction longue qui a readOnly=false, alors plus personne ne peux exécuter d'autres requêtes tant que la première transaction n'est pas terminée.
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 public Connection get_connexion(boolean readOnly) throws SQLException { Connection connection =dataSource.getConnection(); try { connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); } catch (SQLException e) { if(_log.isWarnEnabled()){ _log.warn("Impossible de modifier le niveau de transaction de la connection"); } } connection.setAutoCommit(autoCommit); connection.setReadOnly(readOnly); MySQLStoredProcedures.SP_INIT_VARS(connection); if(_log.isTraceEnabled()){ _log.trace("Recuperation d'une nouvelle connexion."); } return connection; }
Comment puis-je régler ce problème svp ?
En vous remerciant d'avance,
Partager