Refine search
@Override public Iterable<Metadata<Extension>> loadExtensions(ClassLoader classLoader) { return ServiceLoader.load(Extension.class, classLoader); }
public static <S> ServiceLoader<S> load(Class<S> service, ResourceLoader loader) { if (loader == null) { return load(service, service.getClassLoader()); } return new ServiceLoader<S>(service, loader); }
private S prepareInstance(final Class<? extends S> serviceClass) { SecurityManager securityManager = System.getSecurityManager(); if (securityManager != null) { return AccessController.doPrivileged(new PrivilegedAction<S>() { @Override public S run() { return createInstance(serviceClass); } }); } else { return createInstance(serviceClass); } }
/** * Clear this loader's provider cache so that all providers will be reloaded. * <p/> * After invoking this method, subsequent invocations of the iterator method * will lazily look up and instantiate providers from scratch, just as is * done by a newly-created loader. * <p/> * This method is intended for use in situations in which new providers can * be installed into a running Java virtual machine. */ public void reload() { providers = new HashSet<Metadata<S>>(); for (URL serviceFile : loadServiceFiles()) { loadServiceFile(serviceFile); } }
private void loadService(String serviceClassName, URL file, int lineNumber) { Class<? extends S> serviceClass = loadClass(serviceClassName); if (serviceClass == null) { return; } S serviceInstance = prepareInstance(serviceClass); if (serviceInstance == null) { return; } providers.add(new FileMetadata<S>(serviceInstance, file, lineNumber)); }
List<BeanArchiveHandler> initBeanArchiveHandlers() { List<SimpleEntry<Integer, BeanArchiveHandler>> entries = new ArrayList<>(); // Add programatically added handlers for (ListIterator<BeanArchiveHandler> iterator = handlers.listIterator(); iterator.hasNext();) { entries.add(new SimpleEntry<>(handlers.size() - iterator.nextIndex(), iterator.next())); } // Load additional bean archive handlers - use Weld ServiceLoader so that we can use the given ResourceLoader for (Metadata<BeanArchiveHandler> meta : ServiceLoader.load(BeanArchiveHandler.class, resourceLoader)) { BeanArchiveHandler handler = meta.getValue(); CommonLogger.LOG.debugv("Additional BeanArchiveHandler loaded: {0}", handler.getClass()); entries.add(new SimpleEntry<>(getPriority(handler), handler)); } Collections.sort(entries, new Comparator<SimpleEntry<Integer, BeanArchiveHandler>>() { @Override public int compare(SimpleEntry<Integer, BeanArchiveHandler> o1, SimpleEntry<Integer, BeanArchiveHandler> o2) { return Integer.compare(o2.getKey(), o1.getKey()); } }); List<BeanArchiveHandler> beanArchiveHandlers = new ArrayList<>(entries.size()); for (SimpleEntry<Integer, BeanArchiveHandler> entry : entries) { beanArchiveHandlers.add(entry.getValue()); } return beanArchiveHandlers; }
public WeldModules() { modules = load(WeldModule.class, WeldClassLoaderResourceLoader.INSTANCE).stream().map(metadata -> metadata.getValue()) .sorted((m1, m2) -> m1.getName().compareTo(m2.getName())) .collect(ImmutableList.collector()); this.validators = Collections.emptySet(); BootstrapLogger.LOG.debugv("Using Weld modules: {0}", modules.stream().map(m -> m.getName()).collect(Collectors.toList())); }
@SuppressFBWarnings(value = "OS_OPEN_STREAM", justification = "False positive") private void loadServiceFile(URL serviceFile) { InputStream is = null; try { is = serviceFile.openStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String serviceClassName = null; int i = 0; while ((serviceClassName = reader.readLine()) != null) { i++; serviceClassName = trim(serviceClassName); if (serviceClassName.length() > 0) { loadService(serviceClassName, serviceFile, i); } } } catch (IOException e) { throw new RuntimeException("Could not read services file " + serviceFile, e); } finally { if (is != null) { try { is.close(); } catch (IOException e) { throw new RuntimeException("Could not close services file " + serviceFile, e); } } } }
/** * Creates a new service loader for the given service type and class loader. * * @param service The interface or abstract class representing the service * @param loader The class loader to be used to load provider-configuration * files and provider classes, or null if the system class loader * (or, failing that, the bootstrap class loader) is to be used * @return A new service loader */ public static <S> ServiceLoader<S> load(Class<S> service, ClassLoader loader) { if (loader == null) { loader = service.getClassLoader(); } return new ServiceLoader<S>(service, new ClassLoaderResourceLoader(loader)); }
List<BeanArchiveHandler> initBeanArchiveHandlers() { List<SimpleEntry<Integer, BeanArchiveHandler>> entries = new ArrayList<>(); // Add programatically added handlers for (ListIterator<BeanArchiveHandler> iterator = handlers.listIterator(); iterator.hasNext();) { entries.add(new SimpleEntry<>(handlers.size() - iterator.nextIndex(), iterator.next())); } // Load additional bean archive handlers - use Weld ServiceLoader so that we can use the given ResourceLoader for (Metadata<BeanArchiveHandler> meta : ServiceLoader.load(BeanArchiveHandler.class, resourceLoader)) { BeanArchiveHandler handler = meta.getValue(); CommonLogger.LOG.debugv("Additional BeanArchiveHandler loaded: {0}", handler.getClass()); entries.add(new SimpleEntry<>(getPriority(handler), handler)); } Collections.sort(entries, new Comparator<SimpleEntry<Integer, BeanArchiveHandler>>() { @Override public int compare(SimpleEntry<Integer, BeanArchiveHandler> o1, SimpleEntry<Integer, BeanArchiveHandler> o2) { return Integer.compare(o2.getKey(), o1.getKey()); } }); List<BeanArchiveHandler> beanArchiveHandlers = new ArrayList<>(entries.size()); for (SimpleEntry<Integer, BeanArchiveHandler> entry : entries) { beanArchiveHandlers.add(entry.getValue()); } return beanArchiveHandlers; }
public WeldModules() { modules = load(WeldModule.class, WeldClassLoaderResourceLoader.INSTANCE).stream().map(metadata -> metadata.getValue()) .sorted((m1, m2) -> m1.getName().compareTo(m2.getName())) .collect(ImmutableList.collector()); this.validators = Collections.emptySet(); BootstrapLogger.LOG.debugv("Using Weld modules: {0}", modules.stream().map(m -> m.getName()).collect(Collectors.toList())); }
private void loadService(String serviceClassName, URL file, int lineNumber) { Class<? extends S> serviceClass = loadClass(serviceClassName); if (serviceClass == null) { return; } S serviceInstance = prepareInstance(serviceClass); if (serviceInstance == null) { return; } providers.add(new FileMetadata<S>(serviceInstance, file, lineNumber)); }
/** * Clear this loader's provider cache so that all providers will be reloaded. * <p/> * After invoking this method, subsequent invocations of the iterator method * will lazily look up and instantiate providers from scratch, just as is * done by a newly-created loader. * <p/> * This method is intended for use in situations in which new providers can * be installed into a running Java virtual machine. */ public void reload() { providers = new HashSet<Metadata<S>>(); for (URL serviceFile : loadServiceFiles()) { loadServiceFile(serviceFile); } }
@SuppressFBWarnings(value = "OS_OPEN_STREAM", justification = "False positive") private void loadServiceFile(URL serviceFile) { InputStream is = null; try { is = serviceFile.openStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String serviceClassName = null; int i = 0; while ((serviceClassName = reader.readLine()) != null) { i++; serviceClassName = trim(serviceClassName); if (serviceClassName.length() > 0) { loadService(serviceClassName, serviceFile, i); } } } catch (IOException e) { throw new RuntimeException("Could not read services file " + serviceFile, e); } finally { if (is != null) { try { is.close(); } catch (IOException e) { throw new RuntimeException("Could not close services file " + serviceFile, e); } } } }
/** * Creates a new service loader for the given service type and class loader. * * @param service The interface or abstract class representing the service * @param loader The class loader to be used to load provider-configuration * files and provider classes, or null if the system class loader * (or, failing that, the bootstrap class loader) is to be used * @return A new service loader */ public static <S> ServiceLoader<S> load(Class<S> service, ClassLoader loader) { if (loader == null) { loader = service.getClassLoader(); } return new ServiceLoader<S>(service, new ClassLoaderResourceLoader(loader)); }
/** * Discovers additional services using {@link ServiceLoader} and appends them to the given service registry. * @param registry the given service registry */ void loadAdditionalServices(ServiceRegistry registry) { for (ResourceLoader loader : getResourceLoaders()) { for (Metadata<Service> metadata : ServiceLoader.load(Service.class, loader)) { Service service = metadata.getValue(); for (Class<? extends Service> serviceInterface : Services.identifyServiceInterfaces(service.getClass(), new HashSet<>())) { Services.put(registry, serviceInterface, service); } } } }
public WeldModules() { modules = load(WeldModule.class, WeldClassLoaderResourceLoader.INSTANCE).stream().map(metadata -> metadata.getValue()) .sorted((m1, m2) -> m1.getName().compareTo(m2.getName())) .collect(ImmutableList.collector()); this.validators = Collections.emptySet(); BootstrapLogger.LOG.debugv("Using Weld modules: {0}", modules.stream().map(m -> m.getName()).collect(Collectors.toList())); }
@Override public Iterable<Metadata<Extension>> loadExtensions(ClassLoader classLoader) { return ServiceLoader.load(Extension.class, classLoader); }