1 package liquibase.executor; 2 3 import liquibase.database.Database; 4 import liquibase.exception.UnexpectedLiquibaseException; 5 import liquibase.servicelocator.ServiceLocator; 6 7 import java.util.Map; 8 import java.util.concurrent.ConcurrentHashMap; 9 10 public class ExecutorService { 11 12 private static ExecutorService instance = new ExecutorService(); 13 14 private Map<Database, Executor> executors = new ConcurrentHashMap<Database, Executor>(); 15 16 private ExecutorService() { 17 } 18 19 public static ExecutorService getInstance() { 20 return instance; 21 } 22 23 public Executor getExecutor(Database database) { 24 if (!executors.containsKey(database)) { 25 try { 26 Executor executor = (Executor) ServiceLocator.getInstance().newInstance(Executor.class); 27 executor.setDatabase(database); 28 executors.put(database, executor); 29 } catch (Exception e) { 30 throw new UnexpectedLiquibaseException(e); 31 } 32 } 33 return executors.get(database); 34 } 35 36 public void setExecutor(Database database, Executor executor) { 37 executors.put(database, executor); 38 } 39 40 public void clearExecutor(Database database) { 41 executors.remove(database); 42 } 43 44 public void reset() { 45 executors.clear(); 46 } 47 }