Patching serviceloader (original) (raw)
Paulo Levi i30817 at gmail.com
Tue Jul 7 01:28:44 UTC 2009
- Previous message: Is Closeable going to get a super-interface that throws Exception
- Next message: Review request for 6857803 Missing links to exceptions in javadoc for Class.getGeneric{Superclass, Interfaces}
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I'd like to patch service loader to disable caching of services, but i didn't sign the SUN agreement, or platform to test a jdk change. I suppose jdk classes can be tested with the Xbootclasspath option right? (instead of the whole project).
The reload method appears to already do this, but it needs to be called on each iteration of ServiceProvider. It also re-reads the meta-inf/service files. I would just like that each iterator would always return a new object, and never read the service files more than once.
The options are creating 3 more static factory methods (so that ServiceLoader is still effectily immutable).
Regardless, my suggestion to change the iterator would be this, if you could remove the duplication, it would be nice too :
public Iterator<S> iterator() {
return new Iterator<S>() {
Iterator<Map.Entry<String,S>> knownProviders
= providers.entrySet().iterator();
public boolean hasNext() {
if (knownProviders.hasNext())
return true;
return lookupIterator.hasNext();
}
public S next() {
if (knownProviders.hasNext())
return newInstance(knownProviders.next().getValue());
return lookupIterator.next();
}
private S newInstance(S object){
if(cached){
return object;
}
String className = object.getClass().getCanonicalName();
try {
return service.cast(Class.forName(className, true,
loader).newInstance()); } catch (ClassNotFoundException x) { fail(service, "Provider " + className + " not found"); } catch (Throwable x) { fail(service, "Provider " + className + " could not be instantiated: " + x, x); } }
public void remove() {
throw new UnsupportedOperationException();
}
};
}
the cached variable is a final one set on the static function factories. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20090707/ba3e5c78/attachment.html>
- Previous message: Is Closeable going to get a super-interface that throws Exception
- Next message: Review request for 6857803 Missing links to exceptions in javadoc for Class.getGeneric{Superclass, Interfaces}
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]