An asynchronous callback object that manages timeouts
-----------------------------------------------------

         Key: XMLRPC-56
         URL: http://issues.apache.org/jira/browse/XMLRPC-56
     Project: XML-RPC
        Type: New Feature
    Reporter: Ken Weiner


I have created an object that helps clients to XmlRpcClient impose a timeout 
value onto a call to send an XML-RPC message.

I want to propose that this callback object be added to the XML-RPC codebase.  
Feel free to change the name of the class or any of its variables or methods.

Here is example client code for the class:

TimingOutAsyncCallback callback = new TimingOutAsyncCallback(10000);
XmlRpcClient client = new XmlRpcClient(url);            
client.executeAsync(methodName, aVector, callback);
callback.waitForResponse();
if (callback.getException() != null) {
    throw callback.getException();
}
Object result = callback.getResult();


Here is the code for TimingOutAsyncCallback:

/**
 * A callback object that can wait up to a specified amount
 * of time for the XML-RPC response.
 */
protected class TimingOutAsyncCallback implements AsyncCallback {
    
    private long timeout = 10 * 1000; // default to 10 seconds
    private Object result;
    private Exception exception;
    
    public TimingOutAsyncCallback() {
        super();
    }
    
    public TimingOutAsyncCallback(long timeout) {
        this.timeout = timeout;
    }
    
    public void setTimeout(long timeout) {
        this.timeout = timeout;
    }
    
    public long getTimeout() {
        return this.timeout;
    }
    
    public Object getResult() {
        return this.result;
    }
    
    public Exception getException() {
        return this.exception;
    }
    
    public synchronized void handleError(Exception exception, URL url, String 
method) {
        this.exception = exception;
        this.notify();
    }

    public synchronized void handleResult(Object result, URL url, String 
method) {
        this.result = result;
        this.notify();
    }
    
    public synchronized void waitForResponse() throws InterruptedException {
        this.wait(timeout);
    }
}


Please comment if you have any questions or comments.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira

Reply via email to