2010-11-25 22 views
2

J'ai un problème avec un service qui fait office d'écouteur de certains événements provenant d'une bibliothèque externe, cette bibliothèque crée un thread pour lire le port de communication et renvoyer les données à mon auditeur (les grails service) sur certains cas. Le problème est que je ne peux pas mettre à jour la base de données lorsque des méthodes sont appelées à partir du fil de lecture parce que les grails sont liés à la session d'hibernation aux threads.Session Hibernate dans les threads

Il y a une chance d'obtenir la session d'hibernation pour ce fil? Il existe un paramètre de configuration pour propager ou injecter la session dans les threads?

J'ai vu le plugin de thread de fond, mais il semble que ce n'est utile que si le fil est créé par des grails.

Répondre

1

Je pense que vous n'obtenez pas de session car votre service n'est pas appelé dans le cadre d'une requête HTTP standard.

Grails a des méthodes pratiques comme

withSession
withNewSession
withTransaction

qui pourraient faire l'affaire

+1

pas WithSession, mais withNewSession http://www.grails.org/doc/ latest/ref/Domaine% 20Classes/avecNewSession.html – Oleksandr

+0

thanx @olexandr. Bien que les documents pour cela disent qu'il utilise les mêmes ressources jdbc que la session en cours. donc s'il n'y a pas de session cela fonctionnera-t-il? – hvgotcodes

+0

withNewSession fonctionne parfaitement, merci. – alter