package au.com.vaadinutils.dao; import java.util.concurrent.Callable; /** * Allows a Callable to be wrapped in an EM. * * Usage: * * @formatter:off * * emc = new EntityManagerCallable(new Callable<T>() { T call() {return someT } }; * ThreadPoolExecutor executor = (ThreadPoolExecutor) * Executors.newFixedThreadPool(1); executor.submit(emc); * * @formatter:on * * @author bsutton * * @param <T> */ final public class EntityManagerCallable<T> implements Callable<T> { /** * Wraps the passed Callable with the necessary instrumentation to ensure * that an EM is available. */ private final Callable<T> wrapper; public EntityManagerCallable(Callable<T> callable) { wrapper = EntityManagerProvider.setThreadLocalEntityManager(callable); } public EntityManagerCallable(CallableUI<T> callable) { this.wrapper = EntityManagerProvider.setThreadLocalEntityManager(callable); } @Override public T call() throws Exception { return wrapper.call(); } }