Hi, Nathan (and others); what was the rationale behind developing your own extension system instead of using ServiceLoader (http://download.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html)?
Note that ServiceLoader allows you to prioritize the possible implementations, and is a standard part of the JDK.
In brief, place a file named com.whatever.YourService in META-INF/services. Each line in the file is a classname that represents, in order, all known implementations of that service.
By contrast, the priority scheme which you’ve implemented requires all possible implementations to be instantiated so that their priority can be assessed. That seems a little odd.