Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment tuer une thread en attente de réponse sur une SOAPConnection

4 réponses
Avatar
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?

Merci d'avance
Muslidrikk

4 réponses

Avatar
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



Avatar
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!
Avatar
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

<transport name="http"
pivot="java:org.apache.axis.transport.http.CommonsHTTPSender"/>


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!



Avatar
muslidrikk
Merci pour cette réponse.
Malheureusement, je n'utilise pas Axis, mais du soap de base (saaj)...