package org.activemq.work.pool;

import EDU.oswego.cs.dl.util.concurrent.Executor;
import org.activemq.work.WorkerContext;

import javax.resource.spi.work.WorkException;

/**
 * @version $Revision: 1.1.1.1 $ $Date: 2005/03/11 21:14:09 $
 */
public interface WorkExecutor {

    /**
     * This method must be implemented by sub-classes in order to provide the
     * relevant synchronization policy. It is called by the executeWork template
     * method.
     *
     * @param work Work to be executed.
     * @throws javax.resource.spi.work.WorkException
     *                              Indicates that the work has failed.
     * @throws InterruptedException Indicates that the thread in charge of the
     *                              execution of the specified work has been interrupted.
     */
    void doExecute(WorkerContext work, Executor executor)
            throws WorkException, InterruptedException;


}
