private Config buildConfig(ClassLoader loader) { return getBuilder().forClassLoader(loader) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters() .build(); }
private void addConfigSourcesFromServices(ConfigBuilder builder, ServiceRegistry serviceRegistry, ClassLoader classloader) { List<ServiceName> serviceNames = serviceRegistry.getServiceNames(); for (ServiceName serviceName: serviceNames) { if (ServiceNames.CONFIG_SOURCE.isParentOf(serviceName)) { ServiceController<?> service = serviceRegistry.getService(serviceName); ConfigSource configSource = ConfigSource.class.cast(service.getValue()); builder.withSources(configSource); } else if (ServiceNames.CONFIG_SOURCE_PROVIDER.isParentOf(serviceName)) { ServiceController<?> service = serviceRegistry.getService(serviceName); ConfigSourceProvider configSourceProvider = ConfigSourceProvider.class.cast(service.getValue()); for (ConfigSource configSource : configSourceProvider.getConfigSources(classloader)) { builder.withSources(configSource); } } } }
@Override public void deploy(DeploymentPhaseContext phaseContext) { DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); Module module = deploymentUnit.getAttachment(Attachments.MODULE); SmallRyeConfigBuilder builder = new SmallRyeConfigBuilder(); builder.forClassLoader(module.getClassLoader()) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters(); addConfigSourcesFromServices(builder, phaseContext.getServiceRegistry(), module.getClassLoader()); Config config = builder.build(); deploymentUnit.putAttachment(CONFIG, config); ConfigProviderResolver configProviderResolver = deploymentUnit.getAttachment(CONFIG_PROVIDER_RESOLVER); configProviderResolver.registerConfig(config, module.getClassLoader()); }
@Test public void testAutoDiscoveredConfigureSources() { Config config = ConfigProviderResolver.instance().getBuilder().addDefaultSources().addDiscoveredSources().build(); Assert.assertEquals(config.getValue("tck.config.test.customDbConfig.key1", String.class), "valueFromDb1"); } @Test
@Test public void testDonaldConversionWithLambdaConverter() { Config newConfig = ConfigProviderResolver.instance().getBuilder().addDefaultSources() .withConverter(Donald.class, 100, (s) -> Donald.iLikeDonald(s)) .build(); Donald donald = newConfig.getValue("tck.config.test.javaconfig.converter.donaldname", Donald.class); Assert.assertNotNull(donald); Assert.assertEquals(donald.getName(), "Duck"); }
@Test public void testDuckConversionWithMultipleConverters() { // defines 2 config with the converters defined in different orders. // Order must not matter, the UpperCaseDuckConverter must always be used as it has the highest priority Config config1 = ConfigProviderResolver.instance().getBuilder().addDefaultSources() .withConverters(new UpperCaseDuckConverter(), new DuckConverter()) .build(); Config config2 = ConfigProviderResolver.instance().getBuilder().addDefaultSources() .withConverters(new DuckConverter(), new UpperCaseDuckConverter()) .build(); Duck duck = config1.getValue("tck.config.test.javaconfig.converter.duckname", Duck.class); Assert.assertNotNull(duck); Assert.assertEquals(duck.getName(), "HANNELORE", "The converter with the highest priority (UpperCaseDuckConverter) must be used."); duck = config2.getValue("tck.config.test.javaconfig.converter.duckname", Duck.class); Assert.assertNotNull(duck); // the UpperCaseDuckConverter has highest priority Assert.assertEquals(duck.getName(), "HANNELORE", "The converter with the highest priority (UpperCaseDuckConverter) must be used."); }
@Override public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); Module module = deploymentUnit.getAttachment(Attachments.MODULE); SmallRyeConfigBuilder builder = new SmallRyeConfigBuilder(); builder.forClassLoader(module.getClassLoader()) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters(); addConfigSourcesFromServices(builder, phaseContext.getServiceRegistry(), module.getClassLoader()); Config config = builder.build(); ConfigProviderResolver.instance().registerConfig(config, module.getClassLoader()); if (WeldDeploymentMarker.isPartOfWeldDeployment(deploymentUnit)) { WeldPortableExtensions extensions = WeldPortableExtensions.getPortableExtensions(deploymentUnit); extensions.registerExtensionInstance(new ConfigExtension(), deploymentUnit); } }
@Test(expectedExceptions = IllegalArgumentException.class) public void testAutoDiscoveredConverterNotAddedAutomatically() { Config config = ConfigProviderResolver.instance().getBuilder().addDefaultSources().addDiscoveredSources().build(); Pizza dVaule = config.getValue("tck.config.test.customDbConfig.key3", Pizza.class); Assert.fail("The auto discovered converter should not be added automatically."); } }
@Test public void testDonaldConversionWithMultipleLambdaConverters() { // defines 2 config with the lambda converters defined in different orders. // Order must not matter, the lambda with the upper case must always be used as it has the highest priority Config config1 = ConfigProviderResolver.instance().getBuilder().addDefaultSources() .withConverter(Donald.class, 101, (s) -> Donald.iLikeDonald(s.toUpperCase())) .withConverter(Donald.class, 100, (s) -> Donald.iLikeDonald(s)) .build(); Config config2 = ConfigProviderResolver.instance().getBuilder().addDefaultSources() .withConverter(Donald.class, 100, (s) -> Donald.iLikeDonald(s)) .withConverter(Donald.class, 101, (s) -> Donald.iLikeDonald(s.toUpperCase())) .build(); Donald donald = config1.getValue("tck.config.test.javaconfig.converter.donaldname", Donald.class); Assert.assertNotNull(donald); Assert.assertEquals(donald.getName(), "DUCK", "The converter with the highest priority (using upper case) must be used."); donald = config2.getValue("tck.config.test.javaconfig.converter.donaldname", Donald.class); Assert.assertNotNull(donald); Assert.assertEquals(donald.getName(), "DUCK", "The converter with the highest priority (using upper case) must be used."); }
private Config buildConfig(ClassLoader loader) { return getBuilder().forClassLoader(loader) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters() .build(); }
@Override public void deploy(DeploymentPhaseContext phaseContext) { DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); Module module = deploymentUnit.getAttachment(Attachments.MODULE); SmallRyeConfigBuilder builder = new SmallRyeConfigBuilder(); builder.forClassLoader(module.getClassLoader()) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters(); addConfigSourcesFromServices(builder, phaseContext.getServiceRegistry(), module.getClassLoader()); Config config = builder.build(); ConfigProviderResolver configProviderResolver = ConfigProviderResolver.instance(); deploymentUnit.putAttachment(CONFIG, config); deploymentUnit.putAttachment(CONFIG_PROVIDER_RESOLVER, configProviderResolver); configProviderResolver.registerConfig(config, module.getClassLoader()); if (WeldDeploymentMarker.isPartOfWeldDeployment(deploymentUnit)) { WeldPortableExtensions extensions = WeldPortableExtensions.getPortableExtensions(deploymentUnit); extensions.registerExtensionInstance(new ConfigExtension(), deploymentUnit); } }
private void addConfigSourcesFromServices(ConfigBuilder builder, ServiceRegistry serviceRegistry, ClassLoader classloader) { List<ServiceName> serviceNames = serviceRegistry.getServiceNames(); for (ServiceName serviceName: serviceNames) { if (ServiceNames.CONFIG_SOURCE.isParentOf(serviceName)) { ServiceController<?> service = serviceRegistry.getService(serviceName); ConfigSource configSource = ConfigSource.class.cast(service.getValue()); builder.withSources(configSource); } else if (ServiceNames.CONFIG_SOURCE_PROVIDER.isParentOf(serviceName)) { ServiceController<?> service = serviceRegistry.getService(serviceName); ConfigSourceProvider configSourceProvider = ConfigSourceProvider.class.cast(service.getValue()); for (ConfigSource configSource : configSourceProvider.getConfigSources(classloader)) { builder.withSources(configSource); } } } }
@Override public Config getConfig(ClassLoader classLoader) { Config config = configsForClassLoader.get(classLoader); if (config == null) { synchronized (this) { config = configsForClassLoader.get(classLoader); if (config == null) { config = getBuilder().forClassLoader(classLoader) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters() .build(); registerConfig(config, classLoader); } } } return config; }
private void addConfigSourcesFromServices(ConfigBuilder builder, ServiceRegistry serviceRegistry, ClassLoader classloader) { List<ServiceName> serviceNames = serviceRegistry.getServiceNames(); for (ServiceName serviceName: serviceNames) { if (ServiceNames.CONFIG_SOURCE.isParentOf(serviceName)) { ServiceController<?> service = serviceRegistry.getService(serviceName); ConfigSource configSource = ConfigSource.class.cast(service.getValue()); builder.withSources(configSource); } else if (ServiceNames.CONFIG_SOURCE_PROVIDER.isParentOf(serviceName)) { ServiceController<?> service = serviceRegistry.getService(serviceName); ConfigSourceProvider configSourceProvider = ConfigSourceProvider.class.cast(service.getValue()); for (ConfigSource configSource : configSourceProvider.getConfigSources(classloader)) { builder.withSources(configSource); } } } }
@Test public void testAutoDiscoveredConverterManuallyAdded() { Config config = ConfigProviderResolver.instance().getBuilder().addDefaultSources().addDiscoveredSources().addDiscoveredConverters().build(); Pizza dVaule = config.getValue("tck.config.test.customDbConfig.key3", Pizza.class); Assert.assertEquals(dVaule.getSize(), "big"); Assert.assertEquals(dVaule.getFlavor(), "cheese"); }
@Override public Config getConfig(ClassLoader forClassLoader) { Config config = existingConfig(forClassLoader); if (config == null) { synchronized (DefaultConfigProvider.class) { config = existingConfig(forClassLoader); if (config == null) { config = getBuilder().forClassLoader(forClassLoader) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters() .build(); registerConfig(config, forClassLoader); } } } return config; }