package gov.nih.ncgc.bard.service;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NamingException;
import javax.naming.RefAddr;
import javax.naming.Reference;
import javax.naming.spi.ObjectFactory;
public class CachingServiceFactory implements ObjectFactory {
static final Logger logger =
Logger.getLogger(CachingServiceFactory.class.getName());
CachingService service;
public CachingServiceFactory () {
}
// ObjectFactory interface
public Object getObjectInstance
(Object obj, Name name, Context ctx, Hashtable environment)
throws NamingException {
if (service == null) {
Reference ref = (Reference)obj;
Enumeration addrs = ref.getAll();
int maxCacheSize = -1; // use default
while (addrs.hasMoreElements()) {
RefAddr addr = (RefAddr) addrs.nextElement();
String type = addr.getType();
String value = (String) addr.getContent();
if (type.equals("max-cache-size")) {
try {
maxCacheSize= Integer.parseInt(value);
logger.info("max-cache-size: "+maxCacheSize);
}
catch (NumberFormatException e) {
logger.warning("Bogus max-cache-size: "+value);
}
}
else {
logger.warning("Unknown parameter: "+type);
}
}
service = new CachingService (maxCacheSize);
logger.info("** CachingService "+service+" ready; maxCacheSize="
+service.getMaxCacheSize());
}
return service;
}
}