public void reload() { ServiceLoader<S> serviceLoaderTmp = load(service, loader); this.serviceClassNames = serviceLoaderTmp.serviceClassNames; }
public static <S> ServiceLoader<S> load(final Class<S> service, final ClassLoader loader) { List<String> serviceClassNames = new ArrayList<String>(); try { // Standard Java platforms. Enumeration<URL> en = loader.getResources("META-INF/services/" + service.getName()); while (en.hasMoreElements()) parse(en.nextElement(), serviceClassNames); // Android support (META-INF/** files are not included in APK files). en = loader.getResources("meta_inf/services/" + service.getName()); while (en.hasMoreElements()) parse(en.nextElement(), serviceClassNames); return new ServiceLoader<S>(service, loader, serviceClassNames); } catch (Exception e) { jdkLog.log(Level.SEVERE, "Could not load services of type " + service, e); throw new RuntimeException(e); } }
public static synchronized Platform initInstance(ClassLoader platformClassLoader) { if (instance != null) throw new IllegalStateException("Platform already loaded"); if (platformClassLoader == null) platformClassLoader = Thread.currentThread().getContextClassLoader(); ServiceLoader<Platform> platformLoader = ServiceLoader.load(Platform.class, platformClassLoader); Iterator<Platform> platforms = null; try { platforms = platformLoader.iterator(); if (platforms.hasNext()) instance = platforms.next(); if (platforms.hasNext()) throw new PlatformConfigurationError("Multiple Platform services: " + instance + " / " + platforms.next()); } catch (PlatformConfigurationError e) { throw e; } catch (Throwable t) { throw new PlatformConfigurationError("Could not load Platform service", t); } return instance; }
public static Logger getLogger(String name, LoggingFormatter formatter) { String loggerImplClass = System.getProperty(LOGGER_IMPL_SYSTEM_PROPERTY); if (loggerImplClass != null) { try { Class<? extends Logger> clazz = TypeUtil.forName(loggerImplClass, Logger.class); Constructor<? extends Logger> constructor = clazz.getConstructor(String.class, LoggingFormatter.class); return constructor.newInstance(name, formatter); } catch (Exception e) { throw new RuntimeException( "Could not create instance of: " + loggerImplClass + " (" + LOGGER_IMPL_SYSTEM_PROPERTY + " system property)", e); } } ServiceLoader<Logger> loader = ServiceLoader.load(Logger.class); loader.setConstructorParameters(new Class<?>[]{String.class, LoggingFormatter.class}, new Object[]{name, formatter}); for (Logger logger : loader) return logger; return log4jAvailable ? new Log4jLogger(name, formatter) : new JdkLogger(name, formatter); }
public static <S> ServiceLoader<S> load(Class<S> service) { return load(service, Thread.currentThread().getContextClassLoader()); }