public Iterable<Transport> discover() {
List<Transport> transports = new LinkedList<Transport>();
// discover transports lazily
ServiceClassLoader<Transport> serviceClassLoader = ServiceClassLoader.load(
Transport.class,
new DefaultLoader(Thread.currentThread().getContextClassLoader()));
Iterator<Class<Transport>> it = serviceClassLoader.iterator();
while (it.hasNext()) {
Class<Transport> transportClass;
try {
transportClass = it.next();