Bonjour à tous,
Je vous plante le décor
J'ai à l'heure actuelle une demande sur une application J2EE struts weblogic 9.2 oracle. Pas d'ejb ... Toute la communication entre le client et weblo passe par un proxy
En fait, certains traitements sont trop longs et dépassent une norme interne sur le temps de session du proxy. Note : Ces traitements sont indivisibles.
L'idée est donc la suivante :
1. Le client appelle une actions struts comportant le traitement long.
2. L'action lance un thread porteur du traitement métier, le thread est indépendant de la demande, il exécute en tache de fond la demande et positionnera une fois terminé la réponse dans la session utilisateur positionnera un flag F à "traitement terminé" . En attendant l'action positionne le flag F à "en cours" dans la session utilisateur.
3. L'action rend la main au client avec une page indiquant que le traitement est en cours.
4. Cette page indiquant que le traitement est en cours et qu'une demande sur la terminaison ou non de l’action sera réitérée automatiquement dans n secondes (chronomètre). En fait ce serait un javascript qui réinterrogerait la même action au bout de n secondes. Cela permet à la session de ne pas arrivé au timeout.
5. Lorsque le client envoie la demande sur la terminaison du Traitement T à l'action celui-ci re-répond suivant la fin du traitement :
- « traitement en cours » et on repart sur l’étape 3
- soit par la réponse au traitement demandé initialement (traitement T terminé)
Le problème c'est que la création de Thread est plutôt déconseillée car ils ne sont pas forcémment gérés par Weblogic d'où les problèmes d'interblocages de processus orphelins ... bref la classe
J'ai vu qu'il y avait qqs posts sur des sujets similaires ... ou on parle de décomposer les traitements, utiliser jms, ...
Moi la question est simple est-il possible de créer un pool de thread perso gérés par weblogic ? J4ai vu dans la doc qu'il y avait des pools mais j'ai cru comprendre que c'est plus pour prioriser les servlets, ce n'est que de la config et du tuning de weblog... Il n'y a pas de trace de pool de thread pour des dev persos...
Enfin me semble-t-il ...
Donc si vous avez des éléments de réponse, des exemples je suis preneur, des recommandations sur ce que je devrais "absolument" faire ...
Sinon il y aurait une possibilité de faire cela à la AJAX, le client enverrait une requete AJAX au serveur lançant ainsi le traitement mais bon après si l'utilisateur navigue sur l'appli et revient sur la page du traitement long ca va être plus compliqué pour lui afficher le statut d'exécution ...
Enfin j'étais plutôt parti sur la première solution
Voilà, j'espère avoir été assez clair. N'hésitez pas si je dois préciser
Je remercie d'avance tout ceux qui pourront m'aider, pis aussi tout ceux qui aimeraient bien mais qui savent pas, comme moi
bonne soirée tlm
Partager