package org.gbif.occurrence.persistence.guice; import org.gbif.occurrence.persistence.zookeeper.ZookeeperLockManager; import com.google.inject.Provider; import com.google.inject.Singleton; import org.apache.curator.framework.CuratorFramework; /** * A provider that will issue a new instance per thread. * Importantly, this is a singleton or Guice will create one factory per thread. */ @Singleton public class ThreadLocalLockProvider implements Provider<ZookeeperLockManager> { private final ThreadLocal<ZookeeperLockManager> threadLocalManager; public ThreadLocalLockProvider(final CuratorFramework curator) { threadLocalManager = new ThreadLocal<ZookeeperLockManager>() { @Override protected ZookeeperLockManager initialValue() { return new ZookeeperLockManager(curator); } }; } @Override public ZookeeperLockManager get() { return threadLocalManager.get(); } }