J'utilise le modèle Open Session in View pour mon application jsf/icesfaces. Comme d'habitude, un filtre de servlet ouvre et ferme toutes les sessions d'hibernation au début et à la fin d'un "thread de serveur web".hibernate 'session ouverte dans la vue' et les tâches asynchrones
Mon problème maintenant est que j'utilise des tâches asynchrones pour, par exemple. chargement de grandes listes d'objets à partir de la base de données. Par conséquent, je crée un nouveau fil "à la main" qui exécute la tâche.
Maintenant, ma question: quelle est la meilleure façon de gérer les sessions d'hibernation pour les tâches asynchrones? Dois-je créer manuellement une session dans le thread lui-même ou y a-t-il quelque chose comme un filtre de servlet pour les threads (quelque chose qui ouvre la session quand le thread démarre et la ferme quand il se termine)?
Je serais reconnaissant pour les meilleurs produits ou similaires. Je vous remercie.
Voici le code qui crée le fil:
protected static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5,
15, 50, TimeUnit.SECONDS, new LinkedBlockingQueue(20));
// called by action method of a button
private void asyncLoading() {
SessionRenderer.addCurrentSession(this.renderGroup);
threadPool.execute(new Thread() {
// do the thing to do (...)
}
}