package net.djpowell.liverepl.discovery;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.atomic.AtomicInteger;
/**
* ClassLoaderDiscovery implementations must register all ClassLoaders with this registry to give them an
* identifier which can be used to subsequently find the ClassLoader that they user asked for.
*
*/
public class ClassLoaderRegistry {
private final AtomicInteger clIdGenerator = new AtomicInteger(0);
private final Map<ClassLoader, String> clIdMap = new WeakHashMap<ClassLoader, String>();
public String registerClassLoader(ClassLoader classLoader) {
String id;
synchronized (clIdMap) {
id = clIdMap.get(classLoader);
if (id == null) {
id = String.valueOf(clIdGenerator.getAndIncrement());
clIdMap.put(classLoader, id);
}
}
return id;
}
}