Le Multithreading dans un bean session sans état?
Les EJB 3.0 spécification ne permet pas à une entreprise de la méthode d'un bean session sans état pour créer de nouveaux threads. Pourquoi est-ce? Quel est le problème avec la création des threads de travail supplémentaires qui ne font brutes calculs et de ne jamais l'appeler le serveur d'application?
Dire, ma session bean implémente un service qui permet aux utilisateurs de télécharger des images, et la méthode des affaires n'processeur de traitement d'image sur ces images. Ensuite, il peut utiliser un seul cœur de processeur pour faire ce travail, même si la machine dispose de 8 ou plus de cœurs? Si j'utilise un tiers bibliothèque de traitement d'images, en interne crée des threads de travail, je voudrais également violer les spécifications EJB, même si la bibliothèque et ces fils n'ont rien à voir avec le conteneur d'EJB. Cela ne semble pas juste.
Ce qui peut arriver si j'ignore l'EJB de règles et de toujours créer des threads de travail à faire cpu intensive de traitement? Bien sûr, ces threads ne touchez jamais le serveur d'application des objets et le haricot thread va se joindre à eux avant de retourner. Pouvez toujours quelque chose de mauvais se produire?
OriginalL'auteur Gerald Thaler | 2010-09-28
Vous devez vous connecter pour publier un commentaire.
Version courte: la gestion des threads Ejb est rejetée, car il serait dommage de gestion des ressources, la gestion des transactions, la sécurité (raisons techniques) et aussi parce que c'est quelque chose que le modèle EJB ne veut pas promouvoir (la raison philosophique).
La spécification EJB il met comme ceci:
Voir aussi
Ce que je peux dire, ne pas utiliser les Ejb si vous n'aimez pas cela.
Si ces fils sont en contact avec le serveur d'application des objets ou pas n'a pas d'importance. Les règles sont les règles, vous ne voulez pas de les suivre, vous êtes sur votre propre et le comportement est indéfini. Certains conteneur peut être plus permissif et permettent, certains autres ne le sera pas, votre demande ne sera pas portable, etc. Mais c'est toujours explicitement interdit.
Si vous voulez "spawn" threads dans un façon standard, utilisez la WorkManager API, ou de l'utilisation de JMS.
Questions Connexes
OriginalL'auteur Pascal Thivent
Dans ma compréhension simplifiée, c'est comme diriger une entreprise. Vous êtes le patron (le contenant), et il y a un employé qui tout d'un coup juste d'embaucher 100 personnes à l'improviste sans préavis (la fève).
Mais vous pouvez toujours le faire facilement le multithreading avec le @Asynchrone annotation (il y en a d'autres moyens).
Il y a aussi un meilleur exemple ici:
Jboss, Java EE conteneur et un ExecutorService
OriginalL'auteur Rowanto
Un type de solution de contournement:
Maintenant, vous pouvez utiliser TransactionalExecutor comme exécuteur testamentaire:
OriginalL'auteur Orbita
Ceci est connu restriction de ne pas utiliser des threads dans des applications J2EE.
Serveur d'Application doit prendre soin de l'exécution en parallèle du programme
Oui, vous pouvez ignorer les EJB règles, mais peut-face avec extrêmement comportement imprévisible.
OriginalL'auteur Andriy Sholokh