package org.infinispan.distexec.spi;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.ServiceConfigurationError;
import java.util.concurrent.Callable;
import org.infinispan.Cache;
import org.infinispan.commons.util.ServiceFinder;
import org.infinispan.util.logging.Log;
import org.infinispan.util.logging.LogFactory;
public final class DistributedTaskLifecycleService {
private static final Log log = LogFactory.getLog(DistributedTaskLifecycleService.class);
private static DistributedTaskLifecycleService service;
private final List<DistributedTaskLifecycle> lifecycles;
private DistributedTaskLifecycleService() {
lifecycles = new ArrayList<>();
for (DistributedTaskLifecycle cl : ServiceFinder.load(DistributedTaskLifecycle.class)) {
lifecycles.add(cl);
}
}
public static synchronized DistributedTaskLifecycleService getInstance() {
if (service == null) {
service = new DistributedTaskLifecycleService();
}
return service;
}
public <T, K, V> void onPreExecute(Callable<T> task, Cache<K, V> inputCache, Collection<K> inputKeys) {
try {
for (DistributedTaskLifecycle l : lifecycles) {
l.onPreExecute(task, inputCache, inputKeys);
}
} catch (ServiceConfigurationError serviceError) {
log.errorReadingProperties(new IOException(
"Could not properly load and instantiate DistributedTaskLifecycle service ",
serviceError));
}
}
public <T> void onPostExecute(Callable<T> task) {
try {
for (DistributedTaskLifecycle l : lifecycles) {
l.onPostExecute(task);
}
} catch (ServiceConfigurationError serviceError) {
log.errorReadingProperties(new IOException(
"Could not properly load and instantiate DistributedTaskLifecycle service ",
serviceError));
}
}
}