001package net.sf.hajdbc.invocation; 002 003import java.util.SortedMap; 004 005import net.sf.hajdbc.Database; 006import net.sf.hajdbc.logging.Level; 007import net.sf.hajdbc.logging.Logger; 008import net.sf.hajdbc.logging.LoggerFactory; 009import net.sf.hajdbc.sql.ProxyFactory; 010 011public enum InvocationStrategies implements InvocationStrategy 012{ 013 INVOKE_ON_ALL(new InvokeOnManyInvocationStrategy(new AllResultsCollector(new StandardExecutorProvider()))), 014 INVOKE_ON_ANY(new InvokeOnAnyInvocationStrategy(new InvokeOnOneInvocationStrategy(new NextDatabaseSelector()))), 015 INVOKE_ON_EXISTING(new InvokeOnManyInvocationStrategy(new ExistingResultsCollector())), 016 INVOKE_ON_NEXT(new InvokeOnOneInvocationStrategy(new NextDatabaseSelector())), 017 INVOKE_ON_PRIMARY(new InvokeOnOneInvocationStrategy(new PrimaryDatabaseSelector())), 018 TRANSACTION_INVOKE_ON_ALL(new InvokeOnManyInvocationStrategy(new AllResultsCollector(new TransactionalExecutorProvider(false)))), 019 END_TRANSACTION_INVOKE_ON_ALL(new InvokeOnManyInvocationStrategy(new AllResultsCollector(new TransactionalExecutorProvider(true)))), 020 ; 021 022 private static final Logger logger = LoggerFactory.getLogger(SimpleInvoker.class); 023 024 private final InvocationStrategy strategy; 025 026 private InvocationStrategies(InvocationStrategy strategy) 027 { 028 this.strategy = strategy; 029 } 030 031 @Override 032 public <Z, D extends Database<Z>, T, R, E extends Exception> SortedMap<D, R> invoke(ProxyFactory<Z, D, T, E> map, Invoker<Z, D, T, R, E> invoker) throws E 033 { 034 logger.log(Level.TRACE, "Invoking {0} using {1} strategy.", invoker, this); 035 return this.strategy.invoke(map, invoker); 036 } 037}