Spring : partage de bean stateful

Spring : partage de bean stateful - Java - Programmation

Marsh Posté le 03-11-2009 à 14:45:50    

Salut à tous  :hello: ,
 
Bon je viens de me confronter à un petit problème avec spring :
 
J'ai 2 beans de base déclarés dans le fichier .xml. Ils sont donc stateless par défaut (singleton=true)
J'ai un autre bean de base statefull (singleton=false)
 
Dans chacun des beans stateless j'ai une méthode callback appelé à un instant X, disons methodeA pour le bean stateless A et methodB pour le bean statelessB.
Je sais que ds l'ordre des appels, il s'agit de :
 
1) Appel de methodeA à l'intant n
2) Appel de methodeB à l'intant n+1
3) Appel de methodeA à l'intant n+2
 
methodeA et methodeB se servent du même bean stateful (même instance).
Comment faire pour appeler cette même instance au sein de chacun des méthodes ? [:gratgrat]


Message édité par Barnabe43 le 03-11-2009 à 14:46:38

---------------
Asus P5Q Pro | C2D E8400 3GHz@3.7GHz | Noctua NH-C12P | Extreme Patriot 2x2Go  DDR2-PC8500 | Inno 3D GeForce GTX 260 | WD Raptor 74Go 8Mo | Raid0 Seagate Barracuda 7200.12 500Go
Reply

Marsh Posté le 03-11-2009 à 14:45:50   

Reply

Marsh Posté le 03-11-2009 à 19:45:18    

Une petite précision : singleton=true (à remplacer maintenant par scope=singleton, qui est d'ailleurs le scope par défaut) signifie simplement que Spring crée une unique instance de ce bean pour chaque JVM. L'aspect statefull ou stateless, c'est ton code qui le décide : si tu mets de l'état dans un bean 'singleton Spring', l'état sera partagé si ce bean est injecté. Au sens strict du terme, ce bean est statefull :)
 
Sinon :

  • soit tu customise la BeanFactory Spring, pour faire du bricolage à la création/injection des beans (org.springframework.beans.factory.support.*)
  • soit si tes callbacks sont gérées par Spring, tu peux passer par une factory qui regarde la classe appelante (une classe Spring, genre SimpleInstantiationStrategy) et renvoyer seulement dans ce cas la la même instance, et dans les autres cas une nouvelle instance créée. Ca marche seulement si ton bean à état n'est pas injecté ailleurs.


J'aurais plus de temps pour une réponse approfondie demain.
 


---------------
"Don't look for a reason, look for a way out" -  Cube
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed