Je possède une application Web utilisant Spring et Hibernate et Struts (qui s'exécute sur Tomcat)
La séquence d'appel est quelque chose de ce genre...
L'action Struts appelle un bean de service Spring qui à son tour appelle un bean DAO Spring. L'implémentation DAO est une implémentation Hibernate.
La question est Est-ce que tous mes beans Spring s'exécuteront dans le même thread ? Puis-je stocker quelque chose dans le ThreadLocal et le récupérer dans un autre bean?
Je suis assez sûr que cela ne fonctionnerait pas dans les EJB à session sans état. Le conteneur EJB peut (ou va) créer un nouveau thread pour chaque appel au bean de session
Le conteneur Spring fera-t-il la même chose? c'est-à-dire exécuter tous les beans dans le même thread ?
Lorsque j'ai essayé un test JUnit - j'ai obtenu le même identifiant via Thread.currentThread().getId() dans le cas de test et les deux beans - ce qui me conduit à croire qu'il n'y avait qu'un seul thread en action
Ou le comportement est-il imprévisible? Ou changera-t-il lors de l'exécution sur le serveur Tomcat ?
Clarification Je ne souhaite pas échanger des données entre deux threads. Je veux mettre des données dans le ThreadLocal et pouvoir les récupérer de tous les beans dans la pile d'appels. Cela ne fonctionnera que si tous les beans sont dans le même thread