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);
+    }
+
 }

Reply via email to