Hi Jérôme
First, sorry bu I actually use the version 1.0.10 (I forgot a zero). My
client HTTP connector is quite simple :
On A:8181 I have :
Request req = new Request(Method.PUT, "http://127.0.0.1:8282"
+ "/helloworld");
Client client = new Client(Protocol.HTTP);
req.setEntity("Client 8181", MediaType.TEXT_PLAIN);
Response response = client2.handle(req);
On A:8282:
Request req = new Request(Method.PUT, "http://127.0.0.1:8383"
+ "/helloworld");
Client client = new Client(Protocol.HTTP);
req.setEntity("Client 8282", MediaType.TEXT_PLAIN);
Response response = client2.handle(req);
and so forth ...
I though also about launching this code in a dedicated thread but I
though maybe something in my code is wrong.
Anyway, thank you for your answer
regards
Hélia
Jerome Louvel a écrit :
Hi Hélia,
First, it isn't obvious to me why server A3 blocks. You need to check the
parameters of your client HTTP connector to check whether it limits the
number of concurrent requests.
My next suggestion is to upgrade to the latest 1.0.10 version as many bugs
were fixed since 1.0.1.
Now, if this doesn't work, you could start a new thread in your handlePut()
method to let the current thread return silently. Of course, you can't
properly handle errors this way.
Best regards,
Jerome
-----Message d'origine-----
De : Hélia Pouyllau [mailto:[EMAIL PROTECTED]
Envoyé : lundi 2 juin 2008 17:33
À : [email protected]
Objet : Recursive put
Hi all,
I'm using the version 1.01 of Restlet and I have a kind of distributed
deadlock problem. Let me explain it in pseudo-code:
I have a server A http://A:8181 that contains a resource
public class AResource {
public void handlePut() {
Request req = new Request (Method.PUT, "http://A:8282/aresource");
...
client.handle(req);
}
}
Then a server A2 http://A:8282 that contains a resource
public class AResource {
public void handlePut() {
Request req = new Request (Method.PUT, "http://A:8383/aresource");
...
client.handle(req);
}
}
and of course a server A3 http://A:8383 that contains a resource
public class AResource {
public void handlePut() {
Request req = new Request (Method.PUT, "http://A:8181/aresource");
...
client.handle(req);
}
}
A client make a put -through a web page - on server A1. The recursive
calls should terminate - the number of loops is counted until a bound
is reached. But when server A3 executes its handlePut() method, it is
blocked. I guess the handlePut() method of A1 is still waiting the
answer from A2. Is there a way to not wait for the answer ?
Any suggestion to bypass this problem is welcomed and sorry if it's a
trivial question,
thanks in advance,
hp