/** * Loads a class in the given classloader context, suppressing any exceptions, and optionally * providing a default instance to use. * * @param context * the per-table context, can be null * @param clazzName * the name of the class to load * @param base * the type of the class * @param defaultInstance * a default instance if the class cannot be loaded * @return a new instance of the class, or the defaultInstance */ public static <T> T getClassInstance(String context, String clazzName, Class<T> base, T defaultInstance) { T instance = null; try { instance = getClassInstance(context, clazzName, base); } catch (RuntimeException | ClassNotFoundException | IOException | InstantiationException | IllegalAccessException e) { log.warn("Failed to load class {}", clazzName, e); } if (instance == null && defaultInstance != null) { log.info("Using default class {}", defaultInstance.getClass().getName()); instance = defaultInstance; } return instance; }
/** * Creates a new instance of a class specified in a configuration property. * * @param conf * configuration containing property * @param property * property specifying class name * @param base * base class of type * @param defaultInstance * instance to use if creation fails * @return new class instance, or default instance if creation failed * @see AccumuloVFSClassLoader */ public static <T> T createInstanceFromPropertyName(AccumuloConfiguration conf, Property property, Class<T> base, T defaultInstance) { String clazzName = conf.get(property); return ConfigurationTypeHelper.getClassInstance(null, clazzName, base, defaultInstance); }
return ConfigurationTypeHelper.getClassInstance(context, className, VolumeChooser.class); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IOException e) {
private ExecutorService createPriorityExecutor(ScanExecutorConfig sec, Map<String,Queue<?>> scanExecQueues) { BlockingQueue<Runnable> queue; if (sec.prioritizerClass.orElse("").isEmpty()) { queue = new LinkedBlockingQueue<>(); } else { ScanPrioritizer factory = null; try { factory = ConfigurationTypeHelper.getClassInstance(null, sec.prioritizerClass.get(), ScanPrioritizer.class); } catch (Exception e) { throw new RuntimeException(e); } if (factory == null) { queue = new LinkedBlockingQueue<>(); } else { Comparator<ScanInfo> comparator = factory.createComparator(() -> sec.prioritizerOpts); // function to extract scan scan session from runnable Function<Runnable,ScanInfo> extractor = r -> ((ScanSession.ScanMeasurer) ((TraceRunnable) r) .getRunnable()).getScanInfo(); queue = new PriorityBlockingQueue<>(sec.maxThreads, Comparator.comparing(extractor, comparator)); } } scanExecQueues.put(sec.name, queue); return createEs(() -> sec.getCurrentMaxThreads(), "scan-" + sec.name, queue, sec.priority); }
/** * Creates a new instance of a class specified in a configuration property. The table classpath * context is used if set. * * @param conf * configuration containing property * @param property * property specifying class name * @param base * base class of type * @param defaultInstance * instance to use if creation fails * @return new class instance, or default instance if creation failed * @see AccumuloVFSClassLoader */ public static <T> T createTableInstanceFromPropertyName(AccumuloConfiguration conf, Property property, Class<T> base, T defaultInstance) { String clazzName = conf.get(property); String context = conf.get(TABLE_CLASSPATH); return ConfigurationTypeHelper.getClassInstance(context, clazzName, base, defaultInstance); }
/** * Verifies a configured option is a legal class and has a required base class. * * @param confOption * The Property key name * @param className * The Property value, the string representation of a class to be loaded * @param requiredBaseClass * The base class required for the className */ private static void verifyValidClassName(String confOption, String className, Class<?> requiredBaseClass) { try { ConfigurationTypeHelper.getClassInstance(null, className, requiredBaseClass); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IOException e) { fatal(confOption + " has an invalid class name: " + className); } catch (ClassCastException e) { fatal(confOption + " must implement " + requiredBaseClass + ", but the configured class does not: " + className); } } }
CryptoService cryptoService = ConfigurationTypeHelper.getClassInstance(null, opts.cryptoClass, CryptoService.class, CryptoServiceFactory.newDefaultInstance()); Path path = new Path(file);