2008-12-04 9 views
1

Mon application Web (MonoRail, Windsor, ActiveRecord) dispose d'un service d'importation Startable et d'un ou plusieurs lecteurs d'importation Startable. Lorsque, par exemple, un fichier est déposé dans un répertoire, un lecteur analyse le fichier, transmet les données au service, qui met à jour et/ou crée des objets via des référentiels. Le problème que j'ai est que ces services Startable vivent en dehors de la portée de la demande (où il y a un SessionScope du début à la fin), donc quand le service rencontre une collection paresseuse, il n'y a pas de SessionScope pour l'aider à faire sa magie. Cue LazyInitializationException :).ActiveRecord/NHibernate: gestion des collections paresseuses dans un contexte sans persistance

Des idées pour résoudre ce gentiment? Peut-être utiliser un intercepteur pour créer et disposer d'un SessionScope autour de la méthode qui traite les données? Equiper les dépôts avec des méthodes qui effectuent ardemment la récupération? Je veux garder les services inconscients de ActiveRecord, parce que ma paranoïa de dépendance dit que nous pourrions vouloir utiliser un mécanisme de persistance différent un jour.

Répondre

0

Vous déjà répondu:

en utilisant un intercepteur pour créer et jeter un SessionScope autour de la méthode qui traite les données

+0

Hmm, oui ... Il est certainement plus propre que d'avoir à écris tout ce qui cherche HQL et quoi d'autre. Ajoute un peu de configuration, mais c'est maniable. Une idée comment/si je peux configurer un intercepteur pour intercepter une méthode spécifique sans avoir à le coder dans l'intercepteur lui-même? – Bergius

+0

L'intercepteur peut prendre un paramètre de chaîne qui est le nom de la méthode à intercepter ... puis affecter à chaque composant interceptable une instance différente de l'intercepteur. –

+0

Une autre option serait de décorer vos méthodes interactives avec un attribut, puis de vérifier cet attribut à partir de l'intercepteur. –

Questions connexes