Repository: incubator-tamaya Updated Branches: refs/heads/configjsr cd37ae9c4 -> 0be1acbf3
Adapted to comply with JSR API. Signed-off-by: Anatole Tresch <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/0be1acbf Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/0be1acbf Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/0be1acbf Branch: refs/heads/configjsr Commit: 0be1acbf36966b02b49325cdc9f63279552836bd Parents: cd37ae9 Author: Anatole Tresch <[email protected]> Authored: Sat Feb 3 21:02:11 2018 +0100 Committer: Anatole Tresch <[email protected]> Committed: Sat Feb 3 21:02:11 2018 +0100 ---------------------------------------------------------------------- .../base/configsource/BaseConfigSource.java | 6 +-- .../core/TamayaConfigProviderResolver.java | 53 +++++++++++++++----- 2 files changed, 41 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be1acbf/code/base/src/main/java/org/apache/tamaya/base/configsource/BaseConfigSource.java ---------------------------------------------------------------------- diff --git a/code/base/src/main/java/org/apache/tamaya/base/configsource/BaseConfigSource.java b/code/base/src/main/java/org/apache/tamaya/base/configsource/BaseConfigSource.java index 12adfaa..c62b8f2 100644 --- a/code/base/src/main/java/org/apache/tamaya/base/configsource/BaseConfigSource.java +++ b/code/base/src/main/java/org/apache/tamaya/base/configsource/BaseConfigSource.java @@ -133,11 +133,7 @@ public abstract class BaseConfigSource implements ConfigSource{ @Override public String getValue(String key) { Map<String,String> properties = getProperties(); - String val = properties.get(key); - if(val==null){ - return null; - } - return val; + return properties.get(key); } @Override http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be1acbf/code/core/src/main/java/org/apache/tamaya/core/TamayaConfigProviderResolver.java ---------------------------------------------------------------------- diff --git a/code/core/src/main/java/org/apache/tamaya/core/TamayaConfigProviderResolver.java b/code/core/src/main/java/org/apache/tamaya/core/TamayaConfigProviderResolver.java index f4bc048..9c9d587 100644 --- a/code/core/src/main/java/org/apache/tamaya/core/TamayaConfigProviderResolver.java +++ b/code/core/src/main/java/org/apache/tamaya/core/TamayaConfigProviderResolver.java @@ -19,9 +19,7 @@ package org.apache.tamaya.core; import org.apache.tamaya.base.DefaultConfigBuilder; -import org.apache.tamaya.spi.ConfigContext; -import org.apache.tamaya.spi.Filter; -import org.apache.tamaya.spi.ServiceContext; +import org.apache.tamaya.spi.*; import org.osgi.service.component.annotations.Component; import javax.config.Config; @@ -29,6 +27,7 @@ import javax.config.spi.ConfigBuilder; import javax.config.spi.ConfigProviderResolver; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; import java.util.logging.Logger; /** @@ -39,6 +38,8 @@ import java.util.logging.Logger; @Component(service = ConfigProviderResolver.class) public class TamayaConfigProviderResolver extends ConfigProviderResolver { + private static final Logger LOG = Logger.getLogger(TamayaConfigProviderResolver.class.getName()); + private Map<ClassLoader, Config> configs = new ConcurrentHashMap<>(); @Override @@ -50,13 +51,24 @@ public class TamayaConfigProviderResolver extends ConfigProviderResolver { public Config getConfig(ClassLoader loader) { Config config = this.configs.get(loader); if(config==null){ - config = new DefaultConfigBuilder() - .addDiscoveredFilters() - .addDiscoveredConverters() - .addDefaultSources() - .addDiscoveredSources() - .build(); - this.configs.put(loader, config); + ConfigFactory factory = ServiceContextManager.getServiceContext().getService(ConfigFactory.class); + if(factory!=null){ + try { + config = factory.createConfig(loader); + }catch(Exception e){ + LOG.log(Level.SEVERE, "Config factory threw exception: " + factory, e); + } + } + if(config==null) { + LOG.finest(() -> "Creating default config for classloader: " + loader); + config = new DefaultConfigBuilder() + .addDiscoveredFilters() + .addDiscoveredConverters() + .addDefaultSources() + .addDiscoveredSources() + .build(); + } + registerConfig(config, loader); } return config; } @@ -72,10 +84,9 @@ public class TamayaConfigProviderResolver extends ConfigProviderResolver { classLoader = ServiceContext.defaultClassLoader(); } if(configs.containsKey(classLoader)){ - Logger.getLogger(getClass().getName()) - .warning("Replacing existing config for classloader: " + classLoader); -// throw new IllegalArgumentException("Already a config registered with classloader: " + classLoader); + LOG.warning("Replacing existing config for classloader: " + classLoader); } + LOG.info( "Registering config for classloader: " + classLoader + ": " + config); this.configs.put(classLoader, config); } @@ -83,10 +94,26 @@ public class TamayaConfigProviderResolver extends ConfigProviderResolver { public void releaseConfig(Config config) { for(Map.Entry<ClassLoader, Config> en: this.configs.entrySet()){ if(en.getValue().equals(config)){ + LOG.info( "Releasing config for classloader: " + en.getKey()); this.configs.remove(en.getKey()); return; } } } + /** + * Registering an implementation allows to define the way the default configurations are created if accessed the + * first time. + */ + @FunctionalInterface + public interface ConfigFactory{ + + /** + * Create a new configuration to be used for the given classloader. + * @param classLoader the classloader, not null. + * @return the new config to be used, or null. + */ + Config createConfig(ClassLoader classLoader); + } + }
