Les beans sans état de Java ne conservent pas leur état entre deux appels du client. Donc, en un mot, nous pourrions les considérer comme des objets avec des méthodes commerciales. Chaque méthode prend des paramètres et renvoie des résultats. Lorsque la méthode est appelée, certaines variables locales sont créées dans la pile d'exécution. Lorsque la méthode retourne les sections locales sont retirées de la pile et si certains objets temporaires ont été alloués, ils sont collectés de toute façon. De mon point de vue, cela ne diffère pas de la méthode d'appel de la même instance par des threads distincts. Alors, pourquoi un conteneur ne peut-il pas utiliser une instance d'un bean au lieu d'en regrouper plusieurs?Pourquoi regrouper les beans de session sans état?
Répondre
La mise en pool fait plusieurs choses. Un, en ayant un bean par instance, vous êtes sûr d'être threads sûr (Servlets, par exemple, ne sont pas thread-safe). Deuxièmement, vous réduisez le temps de démarrage potentiel d'un bean. Bien que les beans de session soient «apatrides», ils n'ont besoin que d'être apatrides en ce qui concerne le client. Par exemple, dans EJB, vous pouvez injecter plusieurs ressources de serveur dans un bean Session. Cet état est privé au bean, mais il n'y a aucune raison que vous ne puissiez pas le garder de l'invocation à l'invocation. Ainsi, en regroupant les beans, vous réduisez ces recherches à seulement lorsque le bean est créé. Troisièmement, vous pouvez utiliser le pool de bean comme moyen d'étrangler le trafic. Si vous n'avez que 10 Beans dans un pool, vous ne recevrez que 10 requêtes simultanées, le reste sera mis en file d'attente.
Le cycle de vie des beans session Statelesss n'existe pas, Passif et MethodReady (Passif ou Inactif). Pour optimiser la perormance, au lieu de traverser le bean de l'état de création à l'état prêt, le conteneur gère le bean actif et les états passifs via les rappels de conteneur - ejbActivate() et ejbPassivate() en gérant le pool de beans.
sreenut
Le regroupement améliore les performances. Une instance unique gérant toutes les demandes/tous les threads entraînerait beaucoup de conflits et de blocages.
Puisque vous ne savez pas quelle instance sera utilisée (et plusieurs threads peuvent utiliser une seule instance simultanément), les beans doivent être threadsafe.
Le conteneur peut gérer la taille du pool en fonction de l'activité réelle.
La transactionnalité du modèle Java EE utilise le contexte de thread pour gérer le cycle de vie des transactions.
Cette simplification existe de sorte qu'il n'est pas nécessaire d'implémenter une interface spécifique pour interagir directement avec l'objet UserTransaction; lorsque la transaction est extraite du InitialContext (ou injectée dans le bean session), elle est liée à une variable locale thread pour réutilisation (par exemple si une méthode dans votre bean session sans état appelle un autre bean session sans état qui utilise également une transaction injectée.
- 1. Comment migrer des beans session sans état ejb2 vers ejb3 au coup par coup?
- 2. Fils dans les beans session
- 3. Lorsque vous utilisez des beans de session en façade, pourquoi utiliser également des beans de session métier?
- 4. Pourquoi un InitialContext sur des beans session EJB3 distants
- 5. FileIO à partir d'un bean de session sans état
- 6. MDB doit-il appeler remove() après avoir utilisé un bean de session sans état?
- 7. MySQL: Compter les entrées sans regrouper?
- 8. Puis-je appeler un bean Session avec Stateful via un bean Session sans état?
- 9. Question EJB sans état
- 10. ASP.Net état de session pour les longues Auth Cookies
- 11. asp.net mvc état de la session .. aide?
- 12. Comment capturer un état de session
- 13. Comment obtenir des informations utilisateur dans un bean session sans état
- 14. Question d'architecture impliquant un état de recherche et de session
- 15. Silverlight, WCF AspNetCompatibilityRequirements et ASPNET État de session non partagé
- 16. Est-ce que les références de bean de session sans état à distance peuvent être mises en cache dans EJB3?
- 17. État de session suppression et ajout de surcharge
- 18. Comment obtenir des chemins d'EJB sans état JNDI?
- 19. NHibernate sans session
- 20. ASP.NET session état du serveur - Enregistrement des données en desordre
- 21. Les beans de package n'existent pas
- 22. inscriptionFormulaire sur la page sans état
- 23. Utilisation de la mémoire JSF Problème lors de l'utilisation de beans de session
- 24. État dans les digrammes d'Erlang
- 25. swing editor ui pour les beans applicationContext.xml?
- 26. Log4j pour les beans gérés par message
- 27. Comment énumérer et initialiser les beans au printemps/jsf
- 28. lignes dans les colonnes et regrouper
- 29. configuration des beans de printemps
- 30. Problème de tag Django regrouper
"Premièrement, en ayant un seul bean par instance, vous êtes sûr d'avoir des threads sûrs (les servlets, par exemple, ne sont pas thread-safe)." Comment est-ce que l'aide thread-safe dans un bean session sans état? – anjanb
Je ne comprends pas ce que vous voulez dire lorsque vous affirmez que les servlets ne sont pas adaptés aux threads. IIRC, la console de gestion Tomcat me permet également de regrouper des Servlets. – Alan
Les beans de session sans état sont des composants simples.Ils peuvent avoir "State", mais l'état est lié au composant, pas au client. Le haricot a un cycle de vie complet. Ainsi, vous pourriez avoir un cache local, par exemple, dans le bean et ne jamais vous soucier de le synchroniser. –