Comment tuer une thread en attente de réponse sur une SOAPConnection
4 réponses
muslidrikk
Bonjour,
J'ai une thread cliente ("thread1") qui envoie une requete =E0 un
serveur SOAP via la m=E9thode SOAPConnection.call(...).
Lorsque le serveur ne r=E9pond pas, la thread se bloque ind=E9finiment.
Je souhaite trouver un moyen de d=E9bloquer cette thread.
J'ai essay=E9 avec un Timer: J'ai cr=E9=E9 une TimerTask avec en
param=E8tre la thread1. Au bout du d=E9lai param=E9tr=E9, la timerTask
s'ex=E9cute et fait un thread1.interrupt().
=3D> Rien ne se passe.
J'ai essay=E9 =E9galement en mettant dans la timerTask un close() sur la
SOAPConnection.
=3D> Rien ne se passe.
La SOAPConnection que j'utilise est celle de SUN:
javax.xml.soap.SOAPConnection. J'ai d=E9couvert qu'il y a une
impl=E9mentation apache dans laquelle la SOAPConnection poss=E8de une
m=E9thode setTimeout(), mais je ne peux pas utiliser cette
impl=E9mentation...
Une id=E9e? Comment tuer/ r=E9veiller/ interrompre ma thread bloqu=E9e?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Mike Baroukh
J'ai découvert qu'il y a une implémentation apache dans laquelle la SOAPConnection possède une méthode setTimeout(), mais je ne peux pas utiliser cette implémentation...
Pour info, pas de regret car le timeout d'Axis est sur la réponse, pas sur la connection. C'est à dire que si le serveur est allumé, et qu'il ne répond pas assez rapidement, le timeout va fonctionner. Par contre, s'il est eteint, c'est le timeout de connection qui est utilisé qui, lui, n'est pas paramétrable.
Personnellement, que personne ne rigole svp, la derniére fois j'avais utilisé un serveur Apache en proxy sur le service soap auquel j'accédais. L'avantage est que dans le vhost j'avais pu mettre une directive Timeout ...
Mike
Bonjour,
J'ai une thread cliente ("thread1") qui envoie une requete à un serveur SOAP via la méthode SOAPConnection.call(...). Lorsque le serveur ne répond pas, la thread se bloque indéfiniment. Je souhaite trouver un moyen de débloquer cette thread.
J'ai essayé avec un Timer: J'ai créé une TimerTask avec en paramètre la thread1. Au bout du délai paramétré, la timerTask s'exécute et fait un thread1.interrupt(). => Rien ne se passe. J'ai essayé également en mettant dans la timerTask un close() sur la SOAPConnection. => Rien ne se passe.
La SOAPConnection que j'utilise est celle de SUN: javax.xml.soap.SOAPConnection. J'ai découvert qu'il y a une implémentation apache dans laquelle la SOAPConnection possède une méthode setTimeout(), mais je ne peux pas utiliser cette implémentation...
Une idée? Comment tuer/ réveiller/ interrompre ma thread bloquée?
Merci d'avance Muslidrikk
J'ai découvert qu'il y a une
implémentation apache dans laquelle la SOAPConnection possède une
méthode setTimeout(), mais je ne peux pas utiliser cette
implémentation...
Pour info, pas de regret car le timeout d'Axis est sur la réponse, pas
sur la connection. C'est à dire que si le serveur est allumé, et qu'il
ne répond pas assez rapidement, le timeout va fonctionner. Par contre,
s'il est eteint, c'est le timeout de connection qui est utilisé qui,
lui, n'est pas paramétrable.
Personnellement, que personne ne rigole svp, la derniére fois j'avais
utilisé un serveur Apache en proxy sur le service soap auquel
j'accédais. L'avantage est que dans le vhost j'avais pu mettre une
directive Timeout ...
Mike
Bonjour,
J'ai une thread cliente ("thread1") qui envoie une requete à un
serveur SOAP via la méthode SOAPConnection.call(...).
Lorsque le serveur ne répond pas, la thread se bloque indéfiniment.
Je souhaite trouver un moyen de débloquer cette thread.
J'ai essayé avec un Timer: J'ai créé une TimerTask avec en
paramètre la thread1. Au bout du délai paramétré, la timerTask
s'exécute et fait un thread1.interrupt().
=> Rien ne se passe.
J'ai essayé également en mettant dans la timerTask un close() sur la
SOAPConnection.
=> Rien ne se passe.
La SOAPConnection que j'utilise est celle de SUN:
javax.xml.soap.SOAPConnection. J'ai découvert qu'il y a une
implémentation apache dans laquelle la SOAPConnection possède une
méthode setTimeout(), mais je ne peux pas utiliser cette
implémentation...
Une idée? Comment tuer/ réveiller/ interrompre ma thread bloquée?
J'ai découvert qu'il y a une implémentation apache dans laquelle la SOAPConnection possède une méthode setTimeout(), mais je ne peux pas utiliser cette implémentation...
Pour info, pas de regret car le timeout d'Axis est sur la réponse, pas sur la connection. C'est à dire que si le serveur est allumé, et qu'il ne répond pas assez rapidement, le timeout va fonctionner. Par contre, s'il est eteint, c'est le timeout de connection qui est utilisé qui, lui, n'est pas paramétrable.
Personnellement, que personne ne rigole svp, la derniére fois j'avais utilisé un serveur Apache en proxy sur le service soap auquel j'accédais. L'avantage est que dans le vhost j'avais pu mettre une directive Timeout ...
Mike
Bonjour,
J'ai une thread cliente ("thread1") qui envoie une requete à un serveur SOAP via la méthode SOAPConnection.call(...). Lorsque le serveur ne répond pas, la thread se bloque indéfiniment. Je souhaite trouver un moyen de débloquer cette thread.
J'ai essayé avec un Timer: J'ai créé une TimerTask avec en paramètre la thread1. Au bout du délai paramétré, la timerTask s'exécute et fait un thread1.interrupt(). => Rien ne se passe. J'ai essayé également en mettant dans la timerTask un close() sur la SOAPConnection. => Rien ne se passe.
La SOAPConnection que j'utilise est celle de SUN: javax.xml.soap.SOAPConnection. J'ai découvert qu'il y a une implémentation apache dans laquelle la SOAPConnection possède une méthode setTimeout(), mais je ne peux pas utiliser cette implémentation...
Une idée? Comment tuer/ réveiller/ interrompre ma thread bloquée?
Merci d'avance Muslidrikk
muslidrikk
Mmm... l'idée du serveur apache n'est pas mauvaise du tout! :o) Sachant que j'ai effectievement un serveur apache en frontal... Merci!
Mmm... l'idée du serveur apache n'est pas mauvaise du tout! :o)
Sachant que j'ai effectievement un serveur apache en frontal...
Merci!
Mmm... l'idée du serveur apache n'est pas mauvaise du tout! :o) Sachant que j'ai effectievement un serveur apache en frontal... Merci!
cilovie
Il est possible d'utiliser commons-httpclient ou ce que tu veux d'autres comme Handler avec axis. Il te faut un fichier client-config.wsdd dans le classpath. Dedans tu déclares
on ta classe qui doit implémenter l'interface org.apache.axis.Handler Le + facile étant d'étendre org.apache.axis.handlers.BasicHandler. Regarde les sources de HTTPSender pour voir comment faire.
Ou regarde http://svn.apache.org/viewvc/webservices/axis/trunk/java/src/org/apache/axis/transport/http/CommonsHTTPSender.java?
et tu peux voire comment configurer axis pour les time out de commons-httpclient
Mais je configure qu'il est possible de configurer les time de connection et temps de réponse avec axis (il faut un peu fouiller mais c'est faisable)
/o
Mmm... l'idée du serveur apache n'est pas mauvaise du tout! :o) Sachant que j'ai effectievement un serveur apache en frontal... Merci!
Il est possible d'utiliser commons-httpclient ou ce que tu veux d'autres
comme Handler avec axis.
Il te faut un fichier client-config.wsdd dans le classpath.
Dedans tu déclares
on ta classe qui doit implémenter l'interface org.apache.axis.Handler
Le + facile étant d'étendre org.apache.axis.handlers.BasicHandler.
Regarde les sources de HTTPSender pour voir comment faire.
Ou regarde
http://svn.apache.org/viewvc/webservices/axis/trunk/java/src/org/apache/axis/transport/http/CommonsHTTPSender.java?revision@6011
et tu peux voire comment configurer axis pour les time out de
commons-httpclient
Mais je configure qu'il est possible de configurer les time de
connection et temps de réponse avec axis (il faut un peu fouiller mais
c'est faisable)
/o
Mmm... l'idée du serveur apache n'est pas mauvaise du tout! :o)
Sachant que j'ai effectievement un serveur apache en frontal...
Merci!
Il est possible d'utiliser commons-httpclient ou ce que tu veux d'autres comme Handler avec axis. Il te faut un fichier client-config.wsdd dans le classpath. Dedans tu déclares
on ta classe qui doit implémenter l'interface org.apache.axis.Handler Le + facile étant d'étendre org.apache.axis.handlers.BasicHandler. Regarde les sources de HTTPSender pour voir comment faire.
Ou regarde http://svn.apache.org/viewvc/webservices/axis/trunk/java/src/org/apache/axis/transport/http/CommonsHTTPSender.java?
et tu peux voire comment configurer axis pour les time out de commons-httpclient
Mais je configure qu'il est possible de configurer les time de connection et temps de réponse avec axis (il faut un peu fouiller mais c'est faisable)
/o
Mmm... l'idée du serveur apache n'est pas mauvaise du tout! :o) Sachant que j'ai effectievement un serveur apache en frontal... Merci!
muslidrikk
Merci pour cette réponse. Malheureusement, je n'utilise pas Axis, mais du soap de base (saaj)...
Merci pour cette réponse.
Malheureusement, je n'utilise pas Axis, mais du soap de base (saaj)...