private static String requireNonEmpty(String originsFile) { if (originsFile.isEmpty()) { throw new ConfigurationException("empty [services.registry.factory.config.originsFile] config value for factory class FileBackedBackendServicesRegistry.Factory"); } else { return originsFile; } } }
@Override protected Path convert(java.lang.String value) { Path location = Paths.get(removeFilePrefix(value)); if (!isReadable(location)) { throw new ConfigurationException(format("%s=%s is not a readable configuration path.", name(), location)); } return location; }
private static PluginFactory newPluginFactory(SpiExtension extensionConfig) { try { return EXTENSION_OBJECT_FACTORY.newInstance(extensionConfig.factory(), PluginFactory.class); } catch (Exception e) { throw new ConfigurationException(format("Could not load a plugin factory for configuration=%s", extensionConfig), e); } } }
@Override public Registry<BackendService> create(Environment environment, Configuration registryConfiguration) { BackendService service = registryConfiguration.get("backendService", BackendService.class) .orElseThrow(() -> new ConfigurationException( "missing [services.registry.factory.config.backendService] config value for factory class TestBackendProvider.Factory")); return new TestBackendProvider(service); } }
private static ServiceFactory newServiceFactory(SpiExtension extensionConfig) { try { return EXTENSION_OBJECT_FACTORY.newInstance(extensionConfig.factory(), ServiceFactory.class); } catch (Exception e) { throw new ConfigurationException(format("Could not load a service factory for configuration=%s", extensionConfig), e); } }
@Override public Registry<BackendService> create(Environment environment, Configuration registryConfiguration) { String originsFile = registryConfiguration.get("originsFile", String.class) .map(Factory::requireNonEmpty) .orElseThrow(() -> new ConfigurationException( "missing [services.registry.factory.config.originsFile] config value for factory class FileBackedBackendServicesRegistry.Factory")); FileMonitorSettings monitorSettings = registryConfiguration.get("monitor", FileMonitorSettings.class) .orElseGet(FileMonitorSettings::new); return registry(originsFile, monitorSettings); }
private static <U> Map<String, U> servicesMap(JsonNode jsonNode, Environment environment, Class<? extends U> serviceClass) { JsonNode factories = jsonNode.get("factories"); JsonNodeConfig jsonNodeConfig = new JsonNodeConfig(factories); return newArrayList(factories.fieldNames()) .stream() .flatMap(name -> { if (isType(name, jsonNodeConfig, SpiExtension.class)) { return namedExtensionFromSpiExtension(environment, serviceClass, jsonNodeConfig, name); } else if (isType(name, jsonNodeConfig, ServiceFactoryConfig.class)) { return namedExtensionFromServiceFactoryConfig(environment, serviceClass, jsonNodeConfig, name); } else { String content = factories.get(name).toString(); String message = format("Unexpected configuration object 'services.factories.%s', Configuration='%s'", name, content); throw new ConfigurationException(message); } }) .collect(toMap(Pair::key, Pair::value)); }
/** * Create a {@link com.hotels.styx.client.StyxBackendServiceClient} related factory configured with a particular key, * then uses the factory's create method to create its product. * * @param <E> service type * @param configuration Styx configuration * @param key Factory configuration attribute * @param serviceClass Service class * @param activeOrigins source of active connections for purpose of load balancing * @return service, if such a configuration key exists */ public static <E extends LoadBalancer> Optional<E> loadLoadBalancer( Configuration configuration, Environment environment, String key, Class<? extends E> serviceClass, ActiveOrigins activeOrigins) { return configuration .get(key, ServiceFactoryConfig.class) .map(factoryConfig -> { try { LoadBalancerFactory factory = newInstance(factoryConfig.factory(), LoadBalancerFactory.class); return serviceClass.cast(factory.create(environment, factoryConfig.config(), activeOrigins)); } catch (Exception e) { throw new ConfigurationException("Error creating service", e); } }); }