001package com.hammurapi.common.concurrent;
002
003import java.util.concurrent.ExecutorService;
004
005/**
006 * Something that can be invoked.
007 * @author Pavel Vlasov
008 *
009 * @param <R> Return type.
010 */
011public interface Invocable<C, R, K, E extends Exception> {
012        
013        /**
014         * 
015         * @param invocation Invocation
016         * @param executorService Executor service for performing asynchronous processing.
017         * @return
018         */
019        R invoke(C context, Invocation<K> invocation, ExecutorService executorService) throws E;
020        
021        Class<R> getReturnType();
022        
023        Class<?>[] getParameterTypes();
024
025}