Bonjour
J'ai un souci avec Hibernate et l'API concurrent. Possédant plusieurs bdd, j'utilise plusieurs objets HibernateDaoSupport, et je tente de faire des requêtes en parallèle sur chaque bdd en utilisant l'API java.util.concurrent.
Voici le code qui me pose un problème.
La méthode countNodes() appelée dans la tâche retourne, pour chacune des bdd, un nombre (Long)hqlQuery.uniqueResult() qui correspond au nombre d'entrées stockées qui vérifient un certain critère.
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 ExecutorService executor = Executors.newCachedThreadPool(); ArrayList<FutureTask<Long>> allTasks = new ArrayList<FutureTask<Long>>(); for (final HibernateDaoSupport dao : allDao) { FutureTask<Long> task = new FutureTask<Long>(new Callable<Long>() { public Long call() { return dao.countNodes(baseNode, query); } }); allTasks.add(task); executor.execute(task); } try { long count = 0; for ( FutureTask<Long> task : allTasks ) { count += task.get(); } return count; } catch (InterruptedException e) { throw new RuntimeException("Error while processing a sharded request", e); } catch (ExecutionException e) { throw new RuntimeException("Error while processing a sharded request", e); }
Mon problème est que, si je fais plusieurs appels successifs à cette méthode (8 pour être précise), mon programme se bloque et ne me rend jamais la main.
Est-ce que quelqu'un sait de quoi ça peut venir ? A priori, les threads n'ont aucun lien entre eux, et je ne vois pas pourquoi il y aurait un interblocage. Est-ce que ça peut venir de la connexion aux bases de données (genre trop de connexions successives ou en parallèle) ? Comment puis-je le vérifier et y remédier ?
Merci d'avance pour votre aide![]()
Partager