Nous avons une ancienne application qui fonctionne sur
Lorsqu'un client invoque la méthode du point de terminaison, le serveur renvoie immédiatement une UUID, puis invoque la méthode logique commerciale dans un thread séparé.
Quelle est la meilleure façon de mettre en œuvre cette
3 Réponses :
avec EJB 3.1, vous avez la possibilité de faire asynchrone a > Appels de méthode. Si vous utilisez Java 60 plus tard, une possibilité pourrait annoter votre méthode d'entreprise EJB avec l'annotation @Asynchrone. De cette façon, lorsque vous invoquez l'EJB à partir du service Web, le conteneur EJB retournera immédiatement le contrôle à la WS. P>
Si la méthode EJB renvoie une valeur, les choses pourraient être plus compliquées, vous devrez vérifier périodiquement l'état d'exécution et une fois terminé obtenir le résultat. Si tel est votre panne, pensez à ce que le code qui invoque la méthode asyncononne doit conserver une référence à un objet futur. p>
Autre option pourrait être de créer un nouveau fil qui exécute l'invocation de la méthode EJB. Depuis que JEE 7 (JSR 236: Les utilitaires de la concurrence), il existe la possibilité de créer un thread géré , qui vous permet d'exécuter de nouveaux threads dans un conteneur de manière sûre. P>
Comme je l'ai écrit, nous utilisons Javae 5 sur JBoss EAP 5.1 (cela signifie EJB 3.0)
JBoss EAP 5.1 peut exécuter avec différentes versions Java.
L'annotation javax.ejb.asynchronique i> appartient à Javaee 6 et il n'est pas pris en charge par JBoss EAP 5.1, Voir cette table
Je suggérerais d'utiliser un bean piloté par message (MDB) et d'utiliser le WebService en tant que producteur qui envoie le message à la MDB. La MDB invoque ensuite la méthode de haricot coûteuse dans sa méthode onMessage. Ceci est EJB3.0 conforme et possible dans JBoss 5.1 P>
Regarde ici: http://docs.oracle.com /javae/5/tutorial/doc/bnbpk.html ou pour la spécification complète: http://download.oracle.com/otndocs/ JCP / EJB-3_0-FR-EVAL-OTH-JSPEC / P>
Vous pouvez utiliser la fonction ExecuTertorservice de Java 5 qui fournira une implémentation de type de piscine de thread. Vous pouvez créer un objet runnable et le soumettre à la méthode de la piscine de thread.business peut être appelé par la méthode d'exécution de l'objet exécutable. P>