views:

596

answers:

2

I need to add a timeout to a J2ME application that uses ksoap 2 to connect to a web service.

I've tried the method described as a possible pseudo timeout at http://ksoap2.sourceforge.net/doc/api/org/ksoap2/transport/HttpTransport.html, but it doesn't seem to function on this device.

I'd run the connection on another thread and kill it if a timer fires but there's no way to kill a thread before it finishes executing in J2ME per http://developers.sun.com/mobility/midp/articles/threading2/ (this is an embedded device, so I can't just leave an indefinite number of threads blocking in the background). I can't use the poll a boolean method since it's the single attempt to open the connection that blocks.

The system timeout seems to vary between device modal and is too long for my purposes.

Does anybody have any thoughts as to something that might work?

+1  A: 

Keep in mind you are not dealing with fully functional computers. On some devices, you just can't interrupt network operations, especially the TCP connect.

This is what we do,

  1. Before making the connection, create another monitoring timer thread on a a short frequency (say 2 seconds).
  2. In the monitoring thread, you can send some message to the device pretending you are making progress if time limit is not reached.
  3. If a certain time limit is reached, try to interrupt the other thread by sending Thread.interrupt(). This call is available in MIDP.
  4. On the connection thread, just quit if being interrupted.

This works great on all emulators but the connection thread doesn't get the exception till 5 minutes later on some phones.

ZZ Coder
Unfortunately this is not a phone but is instead a copier, which doesn't use the MIDP, and thus no Thread.interrupt().
Lawrence Johnston
A: 

I ended up using the Socket class which has the setSoTimeout() method.

Lawrence Johnston
could you please explain a bit more how did you use that??
UMMA
i am stuck in this problem and still not able to solve it.
UMMA