Bonjour à tous,

je travaille sur un projet de Web Services utilisant Spring 2 et Hibernate 3. Le projet est décomposé en couches de la façon suivante :

  1. Web Service
  2. Métier
  3. DAO
  4. BDD


Le projet tape sur deux bases de données différentes qui ne sont pas intimement liées : l'une des deux ne sert qu'à récupérer une liste d'informations que l'on retourne directement sans faire de lien avec l'autre base.

Mon problème est le suivant : j'ai configuré à l'aide de Spring une session et un transaction manager Hibernate pour taper sur les bonnes bases. Comme conseillé dans le livre "Spring par la pratique" (entre autres), les transactions manager doivent être des proxy englobant des beans de la couche Métier. Ce qui est d'autant plus logique, puisque c'est au niveau du métier que l'on sait si l'on doit taper sur la base 1 ou la base 2 (on est alors en mesure de configurer tel bean avec la transaction 1, et tel autre avec la transaction 2).

Cependant, dans mon projet actuel, j'ai configuré mes entités avec le mode lazy-loading (on ne charge les données que si l'on y fait appel). Or, j'ai parfois besoin de faire appel à ces données dans la couche Web Service, à un moment donné où la session et la transaction sont fermées.

Il faudrait donc que je puisse ouvrir une session directement au niveau de la couche Web Service (et non plus seulement métier), mais je ne sais alors pas encore quelle base va être sollicitée...

Comment résoudre ce problème ?

Si nécessaire, en fonction de la méthode Web Service qui est appelée, je dois pouvoir être en mesure de déterminer quelle base sera appelée. Mais y a-t-il moyen d'ouvrir une session et une transaction particulière, non pas en fonction de la classe, mais de la méthode ? (par la configuration de Spring dans un premier temps, ou par le code dans une deuxième temps).

Je suis ouvert à toute proposition.

Merci d'avance à vous,
MiniMarch