package org.jgroups.blocks;
import org.jgroups.Message;
public interface RequestHandler {
/**
* Processes a request <em>synchronously</em>, ie. on the thread invoking this handler
* @param msg the message containing the request
* @return the object, rceeived as result, or null (void method)
*/
Object handle(Message msg) throws Exception;
/**
* Processes a request <em>asynchronously</em>. This could be done (for example) by dispatching this to a thread pool.
* When done, if a response is needed (e.g. in case of a sync RPC), {@link Response#send(Object,boolean)} should
* be called.
* @param request The request
* @param response The response implementation. Contains information needed to send the reply (e.g. a request ID).
* If no response is required, e.g. because this is an asynchronous RPC, then response will be null.
* @throws Exception If an exception is thrown (e.g. in case of an issue submitting the request to a thread pool,
* the exception will be taken as return value and will be sent as a response. In this case,
* {@link Response#send(Object,boolean)} must not be called
*/
default void handle(Message request, Response response) throws Exception {
throw new UnsupportedOperationException();
}
}