I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 5bb90c61 authored by meeh's avatar meeh
Browse files

* Fixed the FIXME in createInstance where the method failed to ensures that...

* Fixed the FIXME in createInstance where the method failed to ensures that there will be only one naming service instance.
parent 94525472
No related branches found
No related tags found
No related merge requests found
......@@ -31,6 +31,8 @@ public abstract class NamingService {
protected final Set<NamingServiceListener> _listeners;
protected final Set<NamingServiceUpdater> _updaters;
private static NamingService instance;
/** what classname should be used as the naming service impl? */
public static final String PROP_IMPL = "i2p.naming.impl";
private static final String DEFAULT_IMPL = "net.i2p.client.naming.BlockfileNamingService";
......@@ -451,26 +453,27 @@ public abstract class NamingService {
* choose the implementation from the "i2p.naming.impl" system
* property.
*
* FIXME Actually, it doesn't ensure that. Only call this once!!!
*/
public static final synchronized NamingService createInstance(I2PAppContext context) {
NamingService instance = null;
String impl = context.getProperty(PROP_IMPL, DEFAULT_IMPL);
if (instance instanceof NamingService) {
return instance;
}
String impl = context.getProperty(PROP_IMPL, DEFAULT_IMPL);
try {
Class cls = Class.forName(impl);
Constructor con = cls.getConstructor(new Class[] { I2PAppContext.class });
instance = (NamingService)con.newInstance(new Object[] { context });
} catch (Exception ex) {
Log log = context.logManager().getLog(NamingService.class);
// Blockfile may throw RuntimeException but HostsTxt won't
if (!impl.equals(BACKUP_IMPL)) {
log.error("Cannot load naming service " + impl + ", using HostsTxtNamingService", ex);
instance = new HostsTxtNamingService(context);
} else {
log.error("Cannot load naming service " + impl + ", only .b32.i2p lookups will succeed", ex);
instance = new DummyNamingService(context);
}
}
} catch (Exception ex) {
Log log = context.logManager().getLog(NamingService.class);
// Blockfile may throw RuntimeException but HostsTxt won't
if (!impl.equals(BACKUP_IMPL)) {
log.error("Cannot load naming service " + impl + ", using HostsTxtNamingService", ex);
instance = new HostsTxtNamingService(context);
} else {
log.error("Cannot load naming service " + impl + ", only .b32.i2p lookups will succeed", ex);
instance = new DummyNamingService(context);
}
}
return instance;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment