You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2016/12/22 21:19:25 UTC

[1/5] incubator-tamaya git commit: TAMAYA-210: Added additional resource location logic. Tested and implemented especially with OSGI. Added create method.

Repository: incubator-tamaya
Updated Branches:
  refs/heads/master c2aee961b -> 9c073a739


TAMAYA-210: Added additional resource location logic. Tested and implemented especially with OSGI. Added create method.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/b31278a3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/b31278a3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/b31278a3

Branch: refs/heads/master
Commit: b31278a39be485a5b72d50408e3a2d2e557f1008
Parents: c2aee96
Author: anatole <an...@apache.org>
Authored: Wed Dec 21 16:41:02 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Wed Dec 21 16:41:02 2016 +0100

----------------------------------------------------------------------
 .../org/apache/tamaya/spi/ServiceContext.java   |  35 +++++++
 .../tamaya/spi/ServiceContextManagerTest.java   |  18 ++++
 .../apache/tamaya/spi/ServiceContextTest.java   |  22 +++-
 .../apache/tamaya/spi/TestServiceContext.java   |  38 ++++---
 code/core/bnd.bnd                               |   4 +-
 .../core/internal/DefaultServiceContext.java    |  63 +++++++++--
 .../tamaya/core/internal/OSGIActivator.java     |   5 +-
 .../core/internal/OSGIServiceContext.java       |  83 ++++++++++++---
 .../tamaya/core/internal/OSGIServiceLoader.java | 104 ++++++++++++++++---
 .../internal/PriorityServiceComparator.java     |   3 +
 .../provider/JavaConfigurationProvider.java     |  16 +--
 pom.xml                                         |   1 +
 12 files changed, 324 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/api/src/main/java/org/apache/tamaya/spi/ServiceContext.java
----------------------------------------------------------------------
diff --git a/code/api/src/main/java/org/apache/tamaya/spi/ServiceContext.java b/code/api/src/main/java/org/apache/tamaya/spi/ServiceContext.java
index c66b87b..9f1d28e 100644
--- a/code/api/src/main/java/org/apache/tamaya/spi/ServiceContext.java
+++ b/code/api/src/main/java/org/apache/tamaya/spi/ServiceContext.java
@@ -18,6 +18,9 @@
  */
 package org.apache.tamaya.spi;
 
+import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
 import java.util.List;
 
 
@@ -45,6 +48,19 @@ public interface ServiceContext {
     <T> T getService(Class<T> serviceType);
 
     /**
+     * Factory method to create a type, hereby a new instance is created on each access.
+     * If multiple implementations for the very serviceType exist then
+     * the one with the highest {@link javax.annotation.Priority} will be used as the base
+     * for creating subsequent instances.
+     *
+     * @param <T> the type of the service type.
+     * @param serviceType the service type.
+     * @return The new instance to be used, or {@code null}
+     * @throws org.apache.tamaya.ConfigException if there are multiple service implementations with the maximum priority.
+     */
+    <T> T create(Class<T> serviceType);
+
+    /**
      * Access a list current services, given its type. The bootstrap mechanism should
      * order the instance for precedence, hereby the most significant should be
      * first in order.
@@ -56,4 +72,23 @@ public interface ServiceContext {
      */
      <T> List<T> getServices(Class<T> serviceType);
 
+    /**
+     * Loads resources from the current runtime context. This method allows to use runtime
+     * specific code to load resources, e.g. within OSGI environments.
+     * @param resource the resource, not null.
+     * @param cl the desired classloader context, if null, the current thread context classloader is used.
+     * @return the resources found
+     * @throws IOException
+     */
+    Enumeration<URL> getResources(String resource, ClassLoader cl) throws IOException;
+
+    /**
+     * Loads a resource from the current runtime context. This method allows to use runtime
+     * specific code to load a resource, e.g. within OSGI environments.
+     * @param resource the resource, not null.
+     * @param cl the desired classloader context, if null, the current thread context classloader is used.
+     * @return the resource found, or null.
+     * @throws IOException
+     */
+    URL getResource(String resource, ClassLoader cl);
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/api/src/test/java/org/apache/tamaya/spi/ServiceContextManagerTest.java
----------------------------------------------------------------------
diff --git a/code/api/src/test/java/org/apache/tamaya/spi/ServiceContextManagerTest.java b/code/api/src/test/java/org/apache/tamaya/spi/ServiceContextManagerTest.java
index 7e9a010..423a707 100644
--- a/code/api/src/test/java/org/apache/tamaya/spi/ServiceContextManagerTest.java
+++ b/code/api/src/test/java/org/apache/tamaya/spi/ServiceContextManagerTest.java
@@ -20,7 +20,10 @@ package org.apache.tamaya.spi;
 
 import org.junit.Test;
 
+import java.io.IOException;
+import java.net.URL;
 import java.util.Collections;
+import java.util.Enumeration;
 import java.util.List;
 
 import static org.junit.Assert.*;
@@ -59,9 +62,24 @@ public class ServiceContextManagerTest {
         }
 
         @Override
+        public <T> T create(Class<T> serviceType) {
+            return null;
+        }
+
+        @Override
         public <T> List<T> getServices(Class<T> serviceType) {
             return Collections.emptyList();
         }
+
+        @Override
+        public Enumeration<URL> getResources(String resource, ClassLoader cl) throws IOException {
+            return null;
+        }
+
+        @Override
+        public URL getResource(String resource, ClassLoader cl) {
+            return null;
+        }
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/api/src/test/java/org/apache/tamaya/spi/ServiceContextTest.java
----------------------------------------------------------------------
diff --git a/code/api/src/test/java/org/apache/tamaya/spi/ServiceContextTest.java b/code/api/src/test/java/org/apache/tamaya/spi/ServiceContextTest.java
index dc544ed..652ea1c 100644
--- a/code/api/src/test/java/org/apache/tamaya/spi/ServiceContextTest.java
+++ b/code/api/src/test/java/org/apache/tamaya/spi/ServiceContextTest.java
@@ -24,10 +24,9 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.io.IOException;
+import java.net.URL;
+import java.util.*;
 
 import org.junit.Test;
 
@@ -49,6 +48,11 @@ public class ServiceContextTest {
         }
 
         @Override
+        public <T> T create(Class<T> serviceType) {
+            return getService(serviceType);
+        }
+
+        @Override
         public <T> List<T> getServices(Class<T> serviceType) {
             if(String.class.equals(serviceType)){
                 List<String> list = new ArrayList<>();
@@ -57,6 +61,16 @@ public class ServiceContextTest {
             }
             return Collections.emptyList();
         }
+
+        @Override
+        public Enumeration<URL> getResources(String resource, ClassLoader cl) throws IOException {
+            return cl.getResources(resource);
+        }
+
+        @Override
+        public URL getResource(String resource, ClassLoader cl) {
+            return cl.getResource(resource);
+        }
     };
 
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/api/src/test/java/org/apache/tamaya/spi/TestServiceContext.java
----------------------------------------------------------------------
diff --git a/code/api/src/test/java/org/apache/tamaya/spi/TestServiceContext.java b/code/api/src/test/java/org/apache/tamaya/spi/TestServiceContext.java
index 4df7340..65071de 100644
--- a/code/api/src/test/java/org/apache/tamaya/spi/TestServiceContext.java
+++ b/code/api/src/test/java/org/apache/tamaya/spi/TestServiceContext.java
@@ -18,12 +18,9 @@
  */
 package org.apache.tamaya.spi;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.ServiceLoader;
+import java.io.IOException;
+import java.net.URL;
+import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -47,13 +44,7 @@ public final class TestServiceContext implements ServiceContext {
     public <T> T getService(Class<T> serviceType) {
         T cached = serviceType.cast(singletons.get(serviceType));
         if(cached==null) {
-            Collection<T> services = getServices(serviceType);
-            if (services.isEmpty()) {
-                cached = (T) Object.class; // as marker for 'nothing here'
-            }
-            else{
-                cached = services.iterator().next();
-            }
+            cached = create(serviceType);
             singletons.put((Class)serviceType, cached);
         }
         if (cached == Object.class) {
@@ -62,6 +53,17 @@ public final class TestServiceContext implements ServiceContext {
         return cached;
     }
 
+    @Override
+    public <T> T create(Class<T> serviceType) {
+        Collection<T> services = getServices(serviceType);
+        if (services.isEmpty()) {
+            return (T) Object.class; // as marker for 'nothing here'
+        }
+        else{
+            return services.iterator().next();
+        }
+    }
+
     /**
      * Loads and registers services.
      *
@@ -87,4 +89,14 @@ public final class TestServiceContext implements ServiceContext {
         }
     }
 
+    @Override
+    public Enumeration<URL> getResources(String resource, ClassLoader cl) throws IOException {
+        return cl.getResources(resource);
+    }
+
+    @Override
+    public URL getResource(String resource, ClassLoader cl) {
+        return cl.getResource(resource);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/core/bnd.bnd
----------------------------------------------------------------------
diff --git a/code/core/bnd.bnd b/code/core/bnd.bnd
index a8eb68b..eec2853 100644
--- a/code/core/bnd.bnd
+++ b/code/core/bnd.bnd
@@ -1,5 +1,7 @@
 Export-Package: \
 	org.apache.tamaya.core,\
 	org.apache.tamaya.core.propertysource,\
-	org.apache.tamaya.core.provider
+	org.apache.tamaya.core.provider,\
+    org.apache.tamaya.core.internal,\
+    org.apache.tamaya.core.internal.converters
 Bundle-Activator: org.apache.tamaya.core.internal.OSGIActivator
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java
index 9e1fe1c..5285d87 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java
@@ -22,6 +22,8 @@ import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.spi.ServiceContext;
 
 import javax.annotation.Priority;
+import java.io.IOException;
+import java.net.URL;
 import java.text.MessageFormat;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
@@ -33,6 +35,7 @@ import java.util.logging.Logger;
  * {@link java.util.ServiceLoader} to load the services required.
  */
 public final class DefaultServiceContext implements ServiceContext {
+    private static final Logger LOG = Logger.getLogger(DefaultServiceContext.class.getName());
     /**
      * List current services loaded, per class.
      */
@@ -41,17 +44,13 @@ public final class DefaultServiceContext implements ServiceContext {
      * Singletons.
      */
     private final Map<Class<?>, Object> singletons = new ConcurrentHashMap<>();
+    private Map<Class, Class> factoryTypes = new ConcurrentHashMap<>();
 
     @Override
     public <T> T getService(Class<T> serviceType) {
         Object cached = singletons.get(serviceType);
         if (cached == null) {
-            Collection<T> services = getServices(serviceType);
-            if (services.isEmpty()) {
-                cached = null;
-            } else {
-                cached = getServiceWithHighestPriority(services, serviceType);
-            }
+            cached = create(serviceType);
             if(cached!=null) {
                 singletons.put(serviceType, cached);
             }
@@ -59,6 +58,25 @@ public final class DefaultServiceContext implements ServiceContext {
         return serviceType.cast(cached);
     }
 
+    @Override
+    public <T> T create(Class<T> serviceType) {
+        Class<? extends T> implType = factoryTypes.get(serviceType);
+        if(implType==null) {
+            Collection<T> services = getServices(serviceType);
+            if (services.isEmpty()) {
+                return null;
+            } else {
+                return getServiceWithHighestPriority(services, serviceType);
+            }
+        }
+        try {
+            return implType.newInstance();
+        } catch (Exception e) {
+            LOG.log(Level.SEVERE, "Failed to create instabce of " + implType.getName(), e);
+            return  null;
+        }
+    }
+
     /**
      * Loads and registers services.
      *
@@ -80,7 +98,7 @@ public final class DefaultServiceContext implements ServiceContext {
             Collections.sort(services, PriorityServiceComparator.getInstance());
             services = Collections.unmodifiableList(services);
         } catch (ServiceConfigurationError e) {
-            Logger.getLogger(DefaultServiceContext.class.getName()).log(Level.WARNING,
+            LOG.log(Level.WARNING,
                     "Error loading services current type " + serviceType, e);
             if(services==null){
                 services = Collections.emptyList();
@@ -114,15 +132,16 @@ public final class DefaultServiceContext implements ServiceContext {
      * @throws ConfigException if there are multiple service implementations with the maximum priority
      */
     private <T> T getServiceWithHighestPriority(Collection<T> services, Class<T> serviceType) {
-
+        T highestService = null;
         // we do not need the priority stuff if the list contains only one element
         if (services.size() == 1) {
-            return services.iterator().next();
+            highestService = services.iterator().next();
+            this.factoryTypes.put(serviceType, highestService.getClass());
+            return highestService;
         }
 
         Integer highestPriority = null;
         int highestPriorityServiceCount = 0;
-        T highestService = null;
 
         for (T service : services) {
             int prio = getPriority(service);
@@ -142,7 +161,7 @@ public final class DefaultServiceContext implements ServiceContext {
                                                            highestPriority,
                                                            services));
         }
-
+        this.factoryTypes.put(serviceType, highestService.getClass());
         return highestService;
     }
 
@@ -151,5 +170,27 @@ public final class DefaultServiceContext implements ServiceContext {
         return 1;
     }
 
+    @Override
+    public Enumeration<URL> getResources(String resource, ClassLoader cl) throws IOException {
+        if(cl==null){
+            cl = Thread.currentThread().getContextClassLoader();
+        }
+        if(cl==null){
+            cl = getClass().getClassLoader();
+        }
+        return cl.getResources(resource);
+    }
+
+    @Override
+    public URL getResource(String resource, ClassLoader cl) {
+        if(cl==null){
+            cl = Thread.currentThread().getContextClassLoader();
+        }
+        if(cl==null){
+            cl = getClass().getClassLoader();
+        }
+        return cl.getResource(resource);
+    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIActivator.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIActivator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIActivator.java
index 8a54d35..17c778e 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIActivator.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIActivator.java
@@ -38,9 +38,10 @@ public class OSGIActivator implements BundleActivator {
     @Override
     public void start(BundleContext context) {
         // Register marker service
-        ServiceContextManager.set(new OSGIServiceContext(context));
+        serviceLoader = new OSGIServiceLoader(context);
+        ServiceContextManager.set(new OSGIServiceContext(serviceLoader));
         LOG.info("Registered OSGI enabled ServiceContext...");
-        serviceLoader = new OSGIServiceLoader();
+
         context.addBundleListener(serviceLoader);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceContext.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceContext.java b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceContext.java
index 4cc6749..501c42f 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceContext.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceContext.java
@@ -18,16 +18,15 @@
  */
 package org.apache.tamaya.core.internal;
 
+import org.apache.tamaya.spi.ConfigurationProviderSpi;
 import org.apache.tamaya.spi.ServiceContext;
-import org.osgi.framework.BundleContext;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
+import java.io.IOException;
+import java.net.URL;
+import java.util.*;
 
 /**
  * ServiceContext implementation based on OSGI Service mechanisms.
@@ -36,14 +35,14 @@ public class OSGIServiceContext implements ServiceContext{
 
     private static final OSGIServiceComparator REF_COMPARATOR = new OSGIServiceComparator();
 
-    private final BundleContext bundleContext;
+    private final OSGIServiceLoader osgiServiceLoader;
 
-    public OSGIServiceContext(BundleContext bundleContext){
-        this.bundleContext = Objects.requireNonNull(bundleContext);
+    public OSGIServiceContext(OSGIServiceLoader osgiServiceLoader){
+        this.osgiServiceLoader = Objects.requireNonNull(osgiServiceLoader);
     }
 
     public boolean isInitialized(){
-        return bundleContext != null;
+        return osgiServiceLoader != null;
     }
 
 
@@ -54,9 +53,30 @@ public class OSGIServiceContext implements ServiceContext{
 
     @Override
     public <T> T getService(Class<T> serviceType) {
-        ServiceReference<T> ref = this.bundleContext.getServiceReference(serviceType);
+        ServiceReference<T> ref = this.osgiServiceLoader.getBundleContext().getServiceReference(serviceType);
         if(ref!=null){
-            return this.bundleContext.getService(ref);
+            return this.osgiServiceLoader.getBundleContext().getService(ref);
+        }
+        if(ConfigurationProviderSpi.class==serviceType){
+            T service = (T)new DefaultConfigurationProvider();
+            this.osgiServiceLoader.getBundleContext().registerService(
+                    serviceType.getName(),
+                    service,
+                    new Hashtable<String, Object>());
+            return service;
+        }
+        return null;
+    }
+
+    @Override
+    public <T> T create(Class<T> serviceType) {
+        ServiceReference<T> ref = this.osgiServiceLoader.getBundleContext().getServiceReference(serviceType);
+        if(ref!=null){
+            try {
+                return (T)this.osgiServiceLoader.getBundleContext().getService(ref).getClass().newInstance();
+            } catch (Exception e) {
+                return null;
+            }
         }
         return null;
     }
@@ -65,11 +85,11 @@ public class OSGIServiceContext implements ServiceContext{
     public <T> List<T> getServices(Class<T> serviceType) {
         List<ServiceReference<T>> refs = new ArrayList<>();
         try {
-            refs.addAll(this.bundleContext.getServiceReferences(serviceType, null));
+            refs.addAll(this.osgiServiceLoader.getBundleContext().getServiceReferences(serviceType, null));
             Collections.sort(refs, REF_COMPARATOR);
             List<T> services = new ArrayList<>(refs.size());
             for(ServiceReference<T> ref:refs){
-                T service = bundleContext.getService(ref);
+                T service = osgiServiceLoader.getBundleContext().getService(ref);
                 if(service!=null) {
                     services.add(service);
                 }
@@ -80,4 +100,39 @@ public class OSGIServiceContext implements ServiceContext{
             return Collections.emptyList();
         }
     }
+
+    @Override
+    public Enumeration<URL> getResources(String resource, ClassLoader cl) throws IOException{
+        List<URL> result = new ArrayList<>();
+        URL url = osgiServiceLoader.getBundleContext().getBundle()
+                .getEntry(resource);
+        if(url != null) {
+            result.add(url);
+        }
+        for(Bundle bundle: osgiServiceLoader.getResourceBundles()) {
+            url = bundle.getEntry(resource);
+            if (url != null) {
+                if(!result.contains(url)) {
+                    result.add(url);
+                }
+            }
+        }
+        return Collections.enumeration(result);
+    }
+
+    @Override
+    public URL getResource(String resource, ClassLoader cl){
+        URL url = osgiServiceLoader.getBundleContext().getBundle()
+                .getEntry(resource);
+        if(url!=null){
+            return url;
+        }
+        for(Bundle bundle: osgiServiceLoader.getResourceBundles()) {
+            url = bundle.getEntry(resource);
+            if(url != null){
+                return url;
+            }
+        }
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
index 7cd98d2..89d28c0 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
@@ -22,21 +22,12 @@ import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.URL;
-import java.util.ConcurrentModificationException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.BundleListener;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceFactory;
-import org.osgi.framework.ServiceRegistration;
+import org.osgi.framework.*;
 import org.osgi.util.tracker.ServiceTracker;
 
 /**
@@ -48,13 +39,36 @@ public class OSGIServiceLoader implements BundleListener {
     // Provide logging
     private static final Logger log = Logger.getLogger(OSGIServiceLoader.class.getName());
 
+    private BundleContext context;
+
     private Map<Class, ServiceTracker<Object,Object>> services = new ConcurrentHashMap<>();
 
+    private Set<Bundle> resourceBundles = Collections.synchronizedSet(new HashSet<Bundle>());
+
+    public OSGIServiceLoader(BundleContext context){
+        this.context = Objects.requireNonNull(context);
+    }
+
+    public BundleContext getBundleContext(){
+        return context;
+    }
+
+    public Set<Bundle> getResourceBundles(){
+        synchronized (resourceBundles){
+            return new HashSet<>(resourceBundles);
+        }
+    }
+
     @Override
     public void bundleChanged(BundleEvent bundleEvent) {
         // Parse and create metadta on STARTING
         if (bundleEvent.getType() == BundleEvent.STARTED) {
             Bundle bundle = bundleEvent.getBundle();
+            if (bundle.getEntry("META-INF/OSGIResource") != null) {
+                synchronized (resourceBundles){
+                    resourceBundles.add(bundle);
+                }
+            }
             if (bundle.getEntry("META-INF/services/") == null) {
                 return;
             }
@@ -65,6 +79,23 @@ public class OSGIServiceLoader implements BundleListener {
                     processEntryPath(bundle, entryPath);
                 }
             }
+        }else if (bundleEvent.getType() == BundleEvent.STOPPED) {
+            Bundle bundle = bundleEvent.getBundle();
+            if (bundle.getEntry("META-INF/OSGIResources") != null) {
+                synchronized (resourceBundles){
+                    resourceBundles.remove(bundle);
+                }
+            }
+            if (bundle.getEntry("META-INF/services/") == null) {
+                return;
+            }
+            Enumeration<String> entryPaths = bundle.getEntryPaths("META-INF/services/");
+            while (entryPaths.hasMoreElements()) {
+                String entryPath = entryPaths.nextElement();
+                if(!entryPath.endsWith("/")) {
+                    removeEntryPath(bundle, entryPath);
+                }
+            }
         }
     }
 
@@ -127,6 +158,55 @@ public class OSGIServiceLoader implements BundleListener {
         }
     }
 
+    private void removeEntryPath(Bundle bundle, String entryPath) {
+        try {
+            String serviceName = entryPath.substring("META-INF/services/".length());
+            Class<?> serviceClass = bundle.loadClass(serviceName);
+
+            URL child = bundle.getEntry(entryPath);
+            InputStream inStream = child.openStream();
+
+            BufferedReader br = new BufferedReader(new InputStreamReader(inStream, "UTF-8"));
+            String implClassName = br.readLine();
+            while (implClassName != null){
+                int hashIndex = implClassName.indexOf("#");
+                if (hashIndex > 0) {
+                    implClassName = implClassName.substring(0, hashIndex-1);
+                }
+                else if (hashIndex == 0) {
+                    implClassName = "";
+                }
+                implClassName = implClassName.trim();
+                if (implClassName.length() > 0) {
+                    try {
+                        // Load the service class
+                        Class<?> implClass = bundle.loadClass(implClassName);
+                        if (!serviceClass.isAssignableFrom(implClass)) {
+                            log.warning("Configured service: " + implClassName + " is not assignble to " +
+                                    serviceClass.getName());
+                            continue;
+                        }
+                        ServiceReference<?> ref = bundle.getBundleContext().getServiceReference(implClass);
+                        if(ref!=null){
+                            bundle.getBundleContext().ungetService(ref);
+                        }
+                    }
+                    catch(Exception e){
+                        log.log(Level.SEVERE,
+                                "Failed to unload service class using ServiceLoader logic: " + implClassName, e);
+                    }
+                }
+                implClassName = br.readLine();
+            }
+            br.close();
+        }
+        catch (RuntimeException rte) {
+            throw rte;
+        }
+        catch (Exception e) {
+            log.log(Level.SEVERE, "Failed to read services from: " + entryPath, e);
+        }
+    }
 
     /**
      * Service factory simply instantiating the configured service.
@@ -146,7 +226,7 @@ public class OSGIServiceLoader implements BundleListener {
             }
             catch (Exception ex) {
                 ex.printStackTrace();
-                throw new IllegalStateException("Cannot instanciate service", ex);
+                throw new IllegalStateException("Cannot create service: " + serviceClass.getName(), ex);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java
index 671c3fb..f0d855e 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java
@@ -28,6 +28,9 @@ public class PriorityServiceComparator implements Comparator<Object> {
 
     private static final PriorityServiceComparator INSTANCE = new PriorityServiceComparator();
 
+    /** Singleton constructor. */
+    private PriorityServiceComparator(){}
+
     /**
      * Get the shared instance of the comparator.
      * @return the shared instance, never null.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/code/core/src/main/java/org/apache/tamaya/core/provider/JavaConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/provider/JavaConfigurationProvider.java b/code/core/src/main/java/org/apache/tamaya/core/provider/JavaConfigurationProvider.java
index 79017a5..7d14ed8 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/provider/JavaConfigurationProvider.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/provider/JavaConfigurationProvider.java
@@ -22,6 +22,7 @@ import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.core.propertysource.SimplePropertySource;
 import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertySourceProvider;
+import org.apache.tamaya.spi.ServiceContextManager;
 
 import java.io.IOException;
 import java.net.URL;
@@ -86,18 +87,11 @@ public class JavaConfigurationProvider implements PropertySourceProvider {
     }
 
     private Collection<? extends PropertySource> loadPropertySourcesByName(String filename) {
-        URL currentUrl = null;
-
         List<PropertySource> propertySources = new ArrayList<>();
-        Enumeration<URL> propertyLocations = Collections.emptyEnumeration();
-
+        Enumeration<URL> propertyLocations;
         try {
-            ClassLoader cl = currentThread().getContextClassLoader();
-
-            if (cl != null) {
-                propertyLocations = currentThread().getContextClassLoader()
-                                                   .getResources(filename);
-            }
+            propertyLocations = ServiceContextManager.getServiceContext()
+                    .getResources(filename, currentThread().getContextClassLoader());
         } catch (IOException e) {
             String msg = format("Error while searching for %s", filename);
 
@@ -105,7 +99,7 @@ public class JavaConfigurationProvider implements PropertySourceProvider {
         }
 
         while (propertyLocations.hasMoreElements()) {
-            currentUrl = propertyLocations.nextElement();
+            URL currentUrl = propertyLocations.nextElement();
             SimplePropertySource sps = new SimplePropertySource(currentUrl);
 
             propertySources.add(sps);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b31278a3/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5dc14f8..99f4031 100644
--- a/pom.xml
+++ b/pom.xml
@@ -436,6 +436,7 @@ under the License.
                     <artifactId>maven-jar-plugin</artifactId>
                     <configuration>
                         <archive>
+                            <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                             <addMavenDescriptor>false</addMavenDescriptor>
                             <manifestEntries>
                                 <Specification-Title>Apache ${project.name}</Specification-Title>


[3/5] incubator-tamaya git commit: TAMAYA-217: Added equals/hashCode for converters.

Posted by an...@apache.org.
TAMAYA-217: Added equals/hashCode for converters.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/0c7ed25c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/0c7ed25c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/0c7ed25c

Branch: refs/heads/master
Commit: 0c7ed25c3ec2b321196645b7a82a610b9e41b671
Parents: 7796303
Author: anatole <an...@apache.org>
Authored: Thu Dec 22 21:55:11 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Thu Dec 22 21:55:11 2016 +0100

----------------------------------------------------------------------
 .../DefaultConfigurationContextBuilder.java     | 54 ++++++++++++++++----
 .../tamaya/core/internal/OSGIActivator.java     | 16 +++++-
 .../core/internal/OSGIServiceContext.java       | 33 ++++++++++--
 .../tamaya/core/internal/OSGIServiceLoader.java | 11 ++--
 .../converters/BigDecimalConverter.java         | 10 ++++
 .../converters/BigIntegerConverter.java         | 10 ++++
 .../internal/converters/BooleanConverter.java   | 10 ++++
 .../core/internal/converters/ByteConverter.java | 10 ++++
 .../core/internal/converters/CharConverter.java |  9 ++++
 .../internal/converters/ClassConverter.java     | 10 ++++
 .../internal/converters/CurrencyConverter.java  | 10 ++++
 .../internal/converters/DoubleConverter.java    | 10 ++++
 .../core/internal/converters/EnumConverter.java | 13 +++++
 .../core/internal/converters/FileConverter.java | 10 ++++
 .../internal/converters/FloatConverter.java     | 10 ++++
 .../internal/converters/IntegerConverter.java   | 10 ++++
 .../core/internal/converters/LongConverter.java |  9 ++++
 .../internal/converters/NumberConverter.java    | 10 ++++
 .../core/internal/converters/PathConverter.java | 10 ++++
 .../internal/converters/ShortConverter.java     | 10 ++++
 .../core/internal/converters/URIConverter.java  | 10 ++++
 .../core/internal/converters/URLConverter.java  | 10 ++++
 22 files changed, 273 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
index 2e34842..f825614 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
@@ -20,6 +20,11 @@ package org.apache.tamaya.core.internal;
 
 import org.apache.tamaya.Configuration;
 import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.core.internal.converters.*;
+import org.apache.tamaya.core.propertysource.CLIPropertySource;
+import org.apache.tamaya.core.propertysource.EnvironmentPropertySource;
+import org.apache.tamaya.core.propertysource.SystemPropertySource;
+import org.apache.tamaya.core.propertysource.JavaConfigurationPropertySource;
 import org.apache.tamaya.spi.ConfigurationContext;
 import org.apache.tamaya.spi.ConfigurationContextBuilder;
 import org.apache.tamaya.spi.PropertyConverter;
@@ -29,16 +34,14 @@ import org.apache.tamaya.spi.PropertySourceProvider;
 import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
 import org.apache.tamaya.spi.ServiceContextManager;
 
+import java.io.File;
 import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.URI;
+import java.net.URL;
+import java.nio.file.Path;
+import java.util.*;
 import java.util.logging.Logger;
 
 /**
@@ -131,6 +134,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
     public ConfigurationContextBuilder addDefaultPropertySources() {
         checkBuilderState();
         List<PropertySource> propertySources = new ArrayList<>();
+        addCorePropertyResources(propertySources);
         propertySources.addAll(ServiceContextManager.getServiceContext().getServices(PropertySource.class));
         for(PropertySourceProvider provider:
                 ServiceContextManager.getServiceContext().getServices(PropertySourceProvider.class)){
@@ -140,6 +144,13 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
         return addPropertySources(propertySources);
     }
 
+    private void addCorePropertyResources(List<PropertySource> propertySources) {
+        propertySources.add(new EnvironmentPropertySource());
+        propertySources.add(new JavaConfigurationPropertySource());
+        propertySources.add(new CLIPropertySource());
+        propertySources.add(new SystemPropertySource());
+    }
+
     @Override
     public ConfigurationContextBuilder addDefaultPropertyFilters() {
         checkBuilderState();
@@ -153,6 +164,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
     @Override
     public DefaultConfigurationContextBuilder addDefaultPropertyConverters() {
         checkBuilderState();
+        addCorePropertyConverters();
         for(Map.Entry<TypeLiteral, Collection<PropertyConverter>> en:getDefaultPropertyConverters().entrySet()){
             for(PropertyConverter pc: en.getValue()) {
                 addPropertyConverters(en.getKey(), pc);
@@ -161,6 +173,26 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
         return this;
     }
 
+    private void addCorePropertyConverters() {
+        addPropertyConverters(TypeLiteral.<BigDecimal>of(BigDecimal.class), new BigDecimalConverter());
+        addPropertyConverters(TypeLiteral.<BigInteger>of(BigInteger.class), new BigIntegerConverter());
+        addPropertyConverters(TypeLiteral.<Boolean>of(Boolean.class), new BooleanConverter());
+        addPropertyConverters(TypeLiteral.<Byte>of(Byte.class), new ByteConverter());
+        addPropertyConverters(TypeLiteral.<Character>of(Character.class), new CharConverter());
+        addPropertyConverters(TypeLiteral.<Class<?>>of(Class.class), new ClassConverter());
+        addPropertyConverters(TypeLiteral.<Currency>of(Currency.class), new CurrencyConverter());
+        addPropertyConverters(TypeLiteral.<Double>of(Double.class), new DoubleConverter());
+        addPropertyConverters(TypeLiteral.<File>of(File.class), new FileConverter());
+        addPropertyConverters(TypeLiteral.<Float>of(Float.class), new FloatConverter());
+        addPropertyConverters(TypeLiteral.<Integer>of(Integer.class), new IntegerConverter());
+        addPropertyConverters(TypeLiteral.<Long>of(Long.class), new LongConverter());
+        addPropertyConverters(TypeLiteral.<Number>of(Number.class), new NumberConverter());
+        addPropertyConverters(TypeLiteral.<Path>of(Path.class), new PathConverter());
+        addPropertyConverters(TypeLiteral.<Short>of(Short.class), new ShortConverter());
+        addPropertyConverters(TypeLiteral.<URI>of(URI.class), new URIConverter());
+        addPropertyConverters(TypeLiteral.<URL>of(URL.class), new URLConverter());
+    }
+
     @Override
     public ConfigurationContextBuilder removePropertySources(PropertySource... propertySources) {
         return removePropertySources(Arrays.asList(propertySources));
@@ -317,7 +349,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
             if (!converters.contains(propertyConverter)) {
                 converters.add(propertyConverter);
             } else {
-                LOG.warning("Converter ignored, already registered: " + propertyConverter);
+                LOG.finer("Converter ignored, already registered: " + propertyConverter);
             }
         }
         return this;
@@ -337,7 +369,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
             if (!converters.contains(propertyConverter)) {
                 converters.add(propertyConverter);
             } else {
-                LOG.warning("Converter ignored, already registered: " + propertyConverter);
+                LOG.finer("Converter ignored, already registered: " + propertyConverter);
             }
         }
         return this;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIActivator.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIActivator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIActivator.java
index 17c778e..6e18f0f 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIActivator.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIActivator.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.core.internal;
 
 
 
+import org.apache.tamaya.ConfigurationProvider;
 import org.apache.tamaya.spi.ServiceContextManager;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
@@ -39,10 +40,21 @@ public class OSGIActivator implements BundleActivator {
     public void start(BundleContext context) {
         // Register marker service
         serviceLoader = new OSGIServiceLoader(context);
+        context.addBundleListener(serviceLoader);
         ServiceContextManager.set(new OSGIServiceContext(serviceLoader));
         LOG.info("Registered OSGI enabled ServiceContext...");
-
-        context.addBundleListener(serviceLoader);
+        ConfigurationProvider.setConfiguration(
+                new DefaultConfiguration(
+                       new DefaultConfigurationContextBuilder()
+                        .addDefaultPropertyConverters()
+                        .addDefaultPropertyFilters()
+                        .addDefaultPropertySources()
+                        .sortPropertyFilter(PropertyFilterComparator.getInstance())
+                        .sortPropertySources(PropertySourceComparator.getInstance())
+                        .build()
+                )
+        );
+        LOG.info("Loaded default configuration from OSGI.");
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceContext.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceContext.java b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceContext.java
index 501c42f..3763937 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceContext.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceContext.java
@@ -27,12 +27,14 @@ import org.osgi.framework.ServiceReference;
 import java.io.IOException;
 import java.net.URL;
 import java.util.*;
+import java.util.logging.Logger;
 
 /**
  * ServiceContext implementation based on OSGI Service mechanisms.
  */
 public class OSGIServiceContext implements ServiceContext{
 
+    private static final Logger LOG = Logger.getLogger(OSGIServiceContext.class.getName());
     private static final OSGIServiceComparator REF_COMPARATOR = new OSGIServiceComparator();
 
     private final OSGIServiceLoader osgiServiceLoader;
@@ -53,6 +55,7 @@ public class OSGIServiceContext implements ServiceContext{
 
     @Override
     public <T> T getService(Class<T> serviceType) {
+        LOG.finest("TAMAYA  Loading service: " + serviceType.getName());
         ServiceReference<T> ref = this.osgiServiceLoader.getBundleContext().getServiceReference(serviceType);
         if(ref!=null){
             return this.osgiServiceLoader.getBundleContext().getService(ref);
@@ -70,6 +73,7 @@ public class OSGIServiceContext implements ServiceContext{
 
     @Override
     public <T> T create(Class<T> serviceType) {
+        LOG.finest("TAMAYA  Creating service: " + serviceType.getName());
         ServiceReference<T> ref = this.osgiServiceLoader.getBundleContext().getServiceReference(serviceType);
         if(ref!=null){
             try {
@@ -83,6 +87,7 @@ public class OSGIServiceContext implements ServiceContext{
 
     @Override
     public <T> List<T> getServices(Class<T> serviceType) {
+        LOG.finest("TAMAYA  Loading services: " + serviceType.getName());
         List<ServiceReference<T>> refs = new ArrayList<>();
         try {
             refs.addAll(this.osgiServiceLoader.getBundleContext().getServiceReferences(serviceType, null));
@@ -103,18 +108,27 @@ public class OSGIServiceContext implements ServiceContext{
 
     @Override
     public Enumeration<URL> getResources(String resource, ClassLoader cl) throws IOException{
+        LOG.finest("TAMAYA  Loading resources: " + resource);
         List<URL> result = new ArrayList<>();
         URL url = osgiServiceLoader.getBundleContext().getBundle()
                 .getEntry(resource);
         if(url != null) {
+            LOG.finest("TAMAYA  Resource: " + resource + " found in unregistered bundle " +
+                    osgiServiceLoader.getBundleContext().getBundle().getSymbolicName());
             result.add(url);
         }
         for(Bundle bundle: osgiServiceLoader.getResourceBundles()) {
             url = bundle.getEntry(resource);
-            if (url != null) {
-                if(!result.contains(url)) {
-                    result.add(url);
-                }
+            if (url != null && !result.contains(url)) {
+                LOG.finest("TAMAYA  Resource: " + resource + " found in registered bundle " + bundle.getSymbolicName());
+                result.add(url);
+            }
+        }
+        for(Bundle bundle: osgiServiceLoader.getBundleContext().getBundles()) {
+            url = bundle.getEntry(resource);
+            if (url != null && !result.contains(url)) {
+                LOG.finest("TAMAYA  Resource: " + resource + " found in unregistered bundle " + bundle.getSymbolicName());
+                result.add(url);
             }
         }
         return Collections.enumeration(result);
@@ -122,14 +136,25 @@ public class OSGIServiceContext implements ServiceContext{
 
     @Override
     public URL getResource(String resource, ClassLoader cl){
+        LOG.finest("TAMAYA  Loading resource: " + resource);
         URL url = osgiServiceLoader.getBundleContext().getBundle()
                 .getEntry(resource);
         if(url!=null){
+            LOG.finest("TAMAYA  Resource: " + resource + " found in bundle " +
+                    osgiServiceLoader.getBundleContext().getBundle().getSymbolicName());
             return url;
         }
         for(Bundle bundle: osgiServiceLoader.getResourceBundles()) {
             url = bundle.getEntry(resource);
             if(url != null){
+                LOG.finest("TAMAYA  Resource: " + resource + " found in registered bundle " + bundle.getSymbolicName());
+                return url;
+            }
+        }
+        for(Bundle bundle: osgiServiceLoader.getBundleContext().getBundles()) {
+            url = bundle.getEntry(resource);
+            if(url != null){
+                LOG.finest("TAMAYA  Resource: " + resource + " found in unregistered bundle " + bundle.getSymbolicName());
                 return url;
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
index 89d28c0..96f9562 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
@@ -38,6 +38,7 @@ import org.osgi.util.tracker.ServiceTracker;
 public class OSGIServiceLoader implements BundleListener {
     // Provide logging
     private static final Logger log = Logger.getLogger(OSGIServiceLoader.class.getName());
+    private static final String OSGIRESOURCE_MARKER = "META-INF/OSGIResource";
 
     private BundleContext context;
 
@@ -61,10 +62,10 @@ public class OSGIServiceLoader implements BundleListener {
 
     @Override
     public void bundleChanged(BundleEvent bundleEvent) {
-        // Parse and create metadta on STARTING
-        if (bundleEvent.getType() == BundleEvent.STARTED) {
+        // Parse and create metadata on STARTING
+        if (bundleEvent.getType() == BundleEvent.STARTING) {
             Bundle bundle = bundleEvent.getBundle();
-            if (bundle.getEntry("META-INF/OSGIResource") != null) {
+            if (bundle.getEntry(OSGIRESOURCE_MARKER) != null) {
                 synchronized (resourceBundles){
                     resourceBundles.add(bundle);
                 }
@@ -79,9 +80,9 @@ public class OSGIServiceLoader implements BundleListener {
                     processEntryPath(bundle, entryPath);
                 }
             }
-        }else if (bundleEvent.getType() == BundleEvent.STOPPED) {
+        } else if (bundleEvent.getType() == BundleEvent.STOPPING) {
             Bundle bundle = bundleEvent.getBundle();
-            if (bundle.getEntry("META-INF/OSGIResources") != null) {
+            if (bundle.getEntry(OSGIRESOURCE_MARKER) != null) {
                 synchronized (resourceBundles){
                     resourceBundles.remove(bundle);
                 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BigDecimalConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BigDecimalConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BigDecimalConverter.java
index 2c17214..6779809 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BigDecimalConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BigDecimalConverter.java
@@ -60,4 +60,14 @@ public class BigDecimalConverter implements PropertyConverter<BigDecimal>{
             return null;
         }
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BigIntegerConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BigIntegerConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BigIntegerConverter.java
index a5a32b3..19052f7 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BigIntegerConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BigIntegerConverter.java
@@ -91,4 +91,14 @@ public class BigIntegerConverter implements PropertyConverter<BigInteger>{
         }
     }
 
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BooleanConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BooleanConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BooleanConverter.java
index 93b1da3..d926b14 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BooleanConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/BooleanConverter.java
@@ -54,4 +54,14 @@ public class BooleanConverter implements PropertyConverter<Boolean> {
         }
         return null;
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ByteConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ByteConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ByteConverter.java
index fc2bf9d..1382fdb 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ByteConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ByteConverter.java
@@ -68,4 +68,14 @@ public class ByteConverter implements PropertyConverter<Byte>{
                 }
         }
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/CharConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/CharConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/CharConverter.java
index dd6f557..fe332af 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/CharConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/CharConverter.java
@@ -66,4 +66,13 @@ public class CharConverter implements PropertyConverter<Character>{
         }
     }
 
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ClassConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ClassConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ClassConverter.java
index e1823e9..15311b2 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ClassConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ClassConverter.java
@@ -63,4 +63,14 @@ public class ClassConverter implements PropertyConverter<Class<?>>{
             return null;
         }
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/CurrencyConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/CurrencyConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/CurrencyConverter.java
index f774693..bdbc7a1 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/CurrencyConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/CurrencyConverter.java
@@ -87,4 +87,14 @@ public class CurrencyConverter implements PropertyConverter<Currency> {
         }
         return null;
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/DoubleConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/DoubleConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/DoubleConverter.java
index 791632d..2311d9b 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/DoubleConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/DoubleConverter.java
@@ -78,4 +78,14 @@ public class DoubleConverter implements PropertyConverter<Double> {
         }
 
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/EnumConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/EnumConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/EnumConverter.java
index 01c15eb..d19c2f5 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/EnumConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/EnumConverter.java
@@ -65,4 +65,17 @@ public class EnumConverter<T> implements PropertyConverter<T> {
         }
         return null;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof EnumConverter)) return false;
+        EnumConverter<?> that = (EnumConverter<?>) o;
+        return Objects.equals(enumType, that.enumType);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(enumType);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/FileConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/FileConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/FileConverter.java
index 6e4109d..4e9ecea 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/FileConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/FileConverter.java
@@ -48,4 +48,14 @@ public class FileConverter implements PropertyConverter<File> {
         }
         return null;
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/FloatConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/FloatConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/FloatConverter.java
index d66f1f9..7a27f98 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/FloatConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/FloatConverter.java
@@ -78,4 +78,14 @@ public class FloatConverter implements PropertyConverter<Float> {
                 return null;
         }
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/IntegerConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/IntegerConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/IntegerConverter.java
index 313cb63..27ce70f 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/IntegerConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/IntegerConverter.java
@@ -71,4 +71,14 @@ public class IntegerConverter implements PropertyConverter<Integer>{
         }
 
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/LongConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/LongConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/LongConverter.java
index 11cda90..fee2efd 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/LongConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/LongConverter.java
@@ -67,6 +67,15 @@ public class LongConverter implements PropertyConverter<Long>{
                         return null;
                     }
             }
+    }
 
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/NumberConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/NumberConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/NumberConverter.java
index d267580..06f1e18 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/NumberConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/NumberConverter.java
@@ -69,4 +69,14 @@ public class NumberConverter implements PropertyConverter<Number>{
                 }
         }
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/PathConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/PathConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/PathConverter.java
index 6c0b287..9d334c8 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/PathConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/PathConverter.java
@@ -51,4 +51,14 @@ public class PathConverter implements PropertyConverter<Path> {
         }
         return null;
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ShortConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ShortConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ShortConverter.java
index dd9ebdd..e42bc26 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ShortConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/ShortConverter.java
@@ -69,4 +69,14 @@ public class ShortConverter implements PropertyConverter<Short>{
         }
     }
 
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/URIConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/URIConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/URIConverter.java
index 55273e0..9304f27 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/URIConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/URIConverter.java
@@ -47,4 +47,14 @@ public class URIConverter implements PropertyConverter<URI> {
         }
         return null;
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0c7ed25c/code/core/src/main/java/org/apache/tamaya/core/internal/converters/URLConverter.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/URLConverter.java b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/URLConverter.java
index e250943..bca7637 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/converters/URLConverter.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/converters/URLConverter.java
@@ -47,4 +47,14 @@ public class URLConverter implements PropertyConverter<URL> {
         }
         return null;
     }
+
+    @Override
+    public boolean equals(Object o){
+        return getClass().equals(o.getClass());
+    }
+
+    @Override
+    public int hashCode(){
+        return getClass().hashCode();
+    }
 }


[2/5] incubator-tamaya git commit: TAMAYA-212: Rendered default comparators into singletons.

Posted by an...@apache.org.
TAMAYA-212: Rendered default comparators into singletons.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/7796303d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/7796303d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/7796303d

Branch: refs/heads/master
Commit: 7796303ddffd590a8ff14d3091278ef540ba041b
Parents: b31278a
Author: anatole <an...@apache.org>
Authored: Wed Dec 21 16:49:15 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Wed Dec 21 16:49:15 2016 +0100

----------------------------------------------------------------------
 .../core/internal/DefaultConfigurationContextBuilder.java |  5 +----
 .../tamaya/core/internal/PropertyFilterComparator.java    |  3 +++
 .../tamaya/core/internal/PropertySourceComparator.java    |  3 +++
 .../core/internal/PriorityServiceComparatorTest.java      | 10 ++++------
 4 files changed, 11 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7796303d/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
index b3dcc82..2e34842 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
@@ -48,9 +48,6 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
 
     private static final Logger LOG = Logger.getLogger(DefaultConfigurationContextBuilder.class.getName());
 
-    public static final Comparator<PropertySource> DEFAULT_PROPERTYSOURCE_COMPARATOR = new PropertySourceComparator();
-    public static final Comparator<?> DEFAULT_PROPERTYFILTER_COMPARATOR = new PriorityServiceComparator();
-
     List<PropertyFilter> propertyFilters = new ArrayList<>();
     List<PropertySource> propertySources = new ArrayList<>();
     PropertyValueCombinationPolicy combinationPolicy =
@@ -139,7 +136,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
                 ServiceContextManager.getServiceContext().getServices(PropertySourceProvider.class)){
                 propertySources.addAll(provider.getPropertySources());
         }
-        Collections.sort(propertySources, DEFAULT_PROPERTYSOURCE_COMPARATOR);
+        Collections.sort(propertySources, PropertySourceComparator.getInstance());
         return addPropertySources(propertySources);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7796303d/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java
index e0bd8e0..96779df 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java
@@ -33,6 +33,9 @@ public class PropertyFilterComparator implements Comparator<PropertyFilter>, Ser
 
     private static final PropertyFilterComparator INSTANCE = new PropertyFilterComparator();
 
+    /** Singleton constructor. */
+    private PropertyFilterComparator(){}
+
     /**
      * Get the shared instance of the comparator.
      * @return the shared instance, never null.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7796303d/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java
index f686ee3..0b46f1c 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java
@@ -32,6 +32,9 @@ public class PropertySourceComparator implements Comparator<PropertySource>, Ser
 
     private static final PropertySourceComparator INSTANCE = new PropertySourceComparator();
 
+    /** Singleton constructor. */
+    private PropertySourceComparator(){}
+
     /**
      * Get the shared instance of the comparator.
      * @return the shared instance, never null.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7796303d/code/core/src/test/java/org/apache/tamaya/core/internal/PriorityServiceComparatorTest.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/PriorityServiceComparatorTest.java b/code/core/src/test/java/org/apache/tamaya/core/internal/PriorityServiceComparatorTest.java
index e08c8b0..1b1425b 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/internal/PriorityServiceComparatorTest.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/internal/PriorityServiceComparatorTest.java
@@ -18,7 +18,6 @@
  */
 package org.apache.tamaya.core.internal;
 
-import org.apache.tamaya.core.propertysource.EnvironmentPropertySource;
 import org.apache.tamaya.core.propertysource.SystemPropertySource;
 import org.junit.Test;
 
@@ -31,14 +30,13 @@ import static org.junit.Assert.*;
  */
 public class PriorityServiceComparatorTest {
 
-    private PriorityServiceComparator comp = new PriorityServiceComparator();
 
     @Test
     public void compare() throws Exception {
-        assertTrue(comp.compare("a", "b")==0);
-        assertTrue(comp.compare(getClass(), getClass())==0);
-        assertTrue(comp.compare(new A(), new SystemPropertySource())==-1);
-        assertTrue(comp.compare(new SystemPropertySource(), new A())==1);
+        assertTrue(PriorityServiceComparator.getInstance().compare("a", "b")==0);
+        assertTrue(PriorityServiceComparator.getInstance().compare(getClass(), getClass())==0);
+        assertTrue(PriorityServiceComparator.getInstance().compare(new A(), new SystemPropertySource())==-1);
+        assertTrue(PriorityServiceComparator.getInstance().compare(new SystemPropertySource(), new A())==1);
     }
 
     @Priority(100)


[4/5] incubator-tamaya git commit: TAMAYA-214: Rendered provider into property source for better OSGI support.

Posted by an...@apache.org.
TAMAYA-214: Rendered provider into property source for better OSGI support.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/ff03e511
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/ff03e511
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/ff03e511

Branch: refs/heads/master
Commit: ff03e511babeccf37f4fc8ddb2ae9e774f5e6f16
Parents: 0c7ed25
Author: anatole <an...@apache.org>
Authored: Thu Dec 22 22:00:14 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Thu Dec 22 22:00:14 2016 +0100

----------------------------------------------------------------------
 .../core/propertysource/BasePropertySource.java |  13 ++
 .../JavaConfigurationPropertySource.java        | 135 +++++++++++++++++++
 .../propertysource/SimplePropertySource.java    |   2 +-
 .../provider/JavaConfigurationProvider.java     | 116 ----------------
 .../org.apache.tamaya.spi.PropertySource        |   3 +-
 ...org.apache.tamaya.spi.PropertySourceProvider |  19 ---
 .../DefaultConfigurationContextTest.java        |   2 +-
 .../provider/JavaConfigurationProviderTest.java |  14 +-
 ...org.apache.tamaya.spi.PropertySourceProvider |   1 -
 9 files changed, 155 insertions(+), 150 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ff03e511/code/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java b/code/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
index 75c4893..c59f78f 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
@@ -155,4 +155,17 @@ public abstract class BasePropertySource implements PropertySource {
     public boolean isScannable(){
         return true;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof BasePropertySource)) return false;
+        BasePropertySource that = (BasePropertySource) o;
+        return Objects.equals(getName(), that.getName());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getName());
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ff03e511/code/core/src/main/java/org/apache/tamaya/core/propertysource/JavaConfigurationPropertySource.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/propertysource/JavaConfigurationPropertySource.java b/code/core/src/main/java/org/apache/tamaya/core/propertysource/JavaConfigurationPropertySource.java
new file mode 100644
index 0000000..90abb72
--- /dev/null
+++ b/code/core/src/main/java/org/apache/tamaya/core/propertysource/JavaConfigurationPropertySource.java
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.core.propertysource;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.core.internal.PropertySourceComparator;
+import org.apache.tamaya.core.propertysource.SimplePropertySource;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertySourceProvider;
+import org.apache.tamaya.spi.ServiceContextManager;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.*;
+
+import static java.lang.String.format;
+import static java.lang.Thread.currentThread;
+
+/**
+ * Provider which reads all {@value DEFAULT_SIMPLE_PROPERTIES_FILE_NAME} and
+ * {@value DEFAULT_XML_PROPERTIES_FILE_NAME} files found in the
+ * classpath. By setting
+ * {@code tamaya.defaultprops.disable} or {@code tamaya.defaults.disable}
+ * as system or environment property this feature can be disabled.
+ */
+public class JavaConfigurationPropertySource extends BasePropertySource {
+    /**
+     * Default location in the classpath, where Tamaya looks for simple line based configuration by default.
+     */
+    public static final String DEFAULT_SIMPLE_PROPERTIES_FILE_NAME="META-INF/javaconfiguration.properties";
+
+    /**
+     * Default location in the classpath, where Tamaya looks for XML based configuration by default.
+     */
+    public static final String DEFAULT_XML_PROPERTIES_FILE_NAME = "META-INF/javaconfiguration.xml";
+
+    private static final int DEFAULT_ORDINAL = 900;
+
+    private boolean enabled = evaluateEnabled();
+
+    public JavaConfigurationPropertySource(){
+        super("resource:META-INF/javaconfiguration.*", DEFAULT_ORDINAL);
+    }
+
+    private boolean evaluateEnabled() {
+        String value = System.getProperty("tamaya.defaultprops.disable");
+        if(value==null){
+            value = System.getenv("tamaya.defaultprops.disable");
+        }
+        if(value==null){
+            value = System.getProperty("tamaya.defaults.disable");
+        }
+        if(value==null){
+            value = System.getenv("tamaya.defaults.disable");
+        }
+        if(value==null){
+            return true;
+        }
+        return value.isEmpty() || !Boolean.parseBoolean(value);
+    }
+
+    private List<PropertySource> getPropertySources() {
+        List<PropertySource> propertySources = new ArrayList<>();
+        propertySources.addAll(loadPropertySourcesByName(DEFAULT_SIMPLE_PROPERTIES_FILE_NAME));
+        propertySources.addAll(loadPropertySourcesByName(DEFAULT_XML_PROPERTIES_FILE_NAME));
+        Collections.sort(propertySources, PropertySourceComparator.getInstance());
+        return propertySources;
+    }
+
+    private Collection<? extends PropertySource> loadPropertySourcesByName(String filename) {
+        List<PropertySource> propertySources = new ArrayList<>();
+        Enumeration<URL> propertyLocations;
+        try {
+            propertyLocations = ServiceContextManager.getServiceContext()
+                    .getResources(filename, currentThread().getContextClassLoader());
+        } catch (IOException e) {
+            String msg = format("Error while searching for %s", filename);
+
+            throw new ConfigException(msg, e);
+        }
+
+        while (propertyLocations.hasMoreElements()) {
+            URL currentUrl = propertyLocations.nextElement();
+            SimplePropertySource sps = new SimplePropertySource(currentUrl);
+
+            propertySources.add(sps);
+        }
+
+        return propertySources;
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled){
+        this.enabled = enabled;
+    }
+
+
+    @Override
+    public Map<String, String> getProperties() {
+        if (!isEnabled()) {
+            return Collections.emptyMap();
+        }
+        Map<String,String> result = new HashMap<>();
+        for(PropertySource ps:getPropertySources()){
+            result.putAll(ps.getProperties());
+        }
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "JavaConfigurationPropertySource{" +
+                "enabled=" + enabled +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ff03e511/code/core/src/main/java/org/apache/tamaya/core/propertysource/SimplePropertySource.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/propertysource/SimplePropertySource.java b/code/core/src/main/java/org/apache/tamaya/core/propertysource/SimplePropertySource.java
index bce68da..6a06b62 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/propertysource/SimplePropertySource.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/propertysource/SimplePropertySource.java
@@ -132,7 +132,7 @@ public class SimplePropertySource extends BasePropertySource {
             for (String key : props.stringPropertyNames()) {
                 properties.put(key, props.getProperty(key));
                 if (getName() == null){
-                    LOG.warning("No property source name found for " + this +", ommitting source meta-entries.");
+                    LOG.finest("No property source name found for " + this +", ommitting source meta-entries.");
                 } else {
                     properties.put("_" + key + ".source", getName());
                 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ff03e511/code/core/src/main/java/org/apache/tamaya/core/provider/JavaConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/provider/JavaConfigurationProvider.java b/code/core/src/main/java/org/apache/tamaya/core/provider/JavaConfigurationProvider.java
deleted file mode 100644
index 7d14ed8..0000000
--- a/code/core/src/main/java/org/apache/tamaya/core/provider/JavaConfigurationProvider.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tamaya.core.provider;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.core.propertysource.SimplePropertySource;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-import org.apache.tamaya.spi.ServiceContextManager;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-
-import static java.lang.String.format;
-import static java.lang.Thread.currentThread;
-
-/**
- * Provider which reads all {@value DEFAULT_SIMPLE_PROPERTIES_FILE_NAME} and
- * {@value DEFAULT_XML_PROPERTIES_FILE_NAME} files found in the
- * classpath. By setting
- * {@code tamaya.defaultprops.disable} or {@code tamaya.defaults.disable}
- * as system or environment property this feature can be disabled.
- */
-public class JavaConfigurationProvider implements PropertySourceProvider {
-    /**
-     * Default location in the classpath, where Tamaya looks for simple line based configuration by default.
-     */
-    public static final String DEFAULT_SIMPLE_PROPERTIES_FILE_NAME="META-INF/javaconfiguration.properties";
-
-    /**
-     * Default location in the classpath, where Tamaya looks for XML based configuration by default.
-     */
-    public static final String DEFAULT_XML_PROPERTIES_FILE_NAME = "META-INF/javaconfiguration.xml";
-
-    private final boolean disabled = evaluateDisabled();
-
-    private boolean evaluateDisabled() {
-        String value = System.getProperty("tamaya.defaultprops.disable");
-        if(value==null){
-            value = System.getenv("tamaya.defaultprops.disable");
-        }
-        if(value==null){
-            value = System.getProperty("tamaya.defaults.disable");
-        }
-        if(value==null){
-            value = System.getenv("tamaya.defaults.disable");
-        }
-        if(value==null){
-            return false;
-        }
-        return value.isEmpty() || Boolean.parseBoolean(value);
-    }
-
-    @Override
-    public Collection<PropertySource> getPropertySources() {
-        if (isDisabled()) {
-            return Collections.emptySet();
-        }
-
-        List<PropertySource> propertySources = new ArrayList<>();
-
-        propertySources.addAll(loadPropertySourcesByName(DEFAULT_SIMPLE_PROPERTIES_FILE_NAME));
-        propertySources.addAll(loadPropertySourcesByName(DEFAULT_XML_PROPERTIES_FILE_NAME));
-
-        return Collections.unmodifiableList(propertySources);
-    }
-
-    private Collection<? extends PropertySource> loadPropertySourcesByName(String filename) {
-        List<PropertySource> propertySources = new ArrayList<>();
-        Enumeration<URL> propertyLocations;
-        try {
-            propertyLocations = ServiceContextManager.getServiceContext()
-                    .getResources(filename, currentThread().getContextClassLoader());
-        } catch (IOException e) {
-            String msg = format("Error while searching for %s", filename);
-
-            throw new ConfigException(msg, e);
-        }
-
-        while (propertyLocations.hasMoreElements()) {
-            URL currentUrl = propertyLocations.nextElement();
-            SimplePropertySource sps = new SimplePropertySource(currentUrl);
-
-            propertySources.add(sps);
-        }
-
-        return propertySources;
-    }
-
-    protected boolean isDisabled() {
-        return disabled;
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ff03e511/code/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
----------------------------------------------------------------------
diff --git a/code/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource b/code/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
index 5bc940d..56c599c 100644
--- a/code/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
+++ b/code/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
@@ -18,4 +18,5 @@
 #
 org.apache.tamaya.core.propertysource.EnvironmentPropertySource
 org.apache.tamaya.core.propertysource.SystemPropertySource
-org.apache.tamaya.core.propertysource.CLIPropertySource
\ No newline at end of file
+org.apache.tamaya.core.propertysource.CLIPropertySource
+org.apache.tamaya.core.propertysource.JavaConfigurationPropertySource
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ff03e511/code/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
----------------------------------------------------------------------
diff --git a/code/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider b/code/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
deleted file mode 100644
index 4535a09..0000000
--- a/code/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy current the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-org.apache.tamaya.core.provider.JavaConfigurationProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ff03e511/code/core/src/test/java/org/apache/tamaya/core/internal/DefaultConfigurationContextTest.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/DefaultConfigurationContextTest.java b/code/core/src/test/java/org/apache/tamaya/core/internal/DefaultConfigurationContextTest.java
index e0f50d7..6ab5976 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/internal/DefaultConfigurationContextTest.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/internal/DefaultConfigurationContextTest.java
@@ -53,7 +53,7 @@ public class DefaultConfigurationContextTest {
         assertEquals(ctx.getPropertySources().size(), 0);
         ctx = new DefaultConfigurationContextBuilder().addDefaultPropertySources().build();
         assertNotNull(ctx.getPropertySources());
-        assertEquals(8, ctx.getPropertySources().size());
+        assertEquals(7, ctx.getPropertySources().size());
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ff03e511/code/core/src/test/java/org/apache/tamaya/core/provider/JavaConfigurationProviderTest.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/provider/JavaConfigurationProviderTest.java b/code/core/src/test/java/org/apache/tamaya/core/provider/JavaConfigurationProviderTest.java
index 41bd8a1..26e5291 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/provider/JavaConfigurationProviderTest.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/provider/JavaConfigurationProviderTest.java
@@ -18,17 +18,15 @@
  */
 package org.apache.tamaya.core.provider;
 
+import org.apache.tamaya.core.propertysource.JavaConfigurationPropertySource;
 import org.apache.tamaya.spi.PropertySource;
 import org.junit.Test;
 
-import java.util.Collection;
-
 import static org.apache.tamaya.ConfigurationProvider.getConfiguration;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
 
 public class JavaConfigurationProviderTest {
 
@@ -37,14 +35,8 @@ public class JavaConfigurationProviderTest {
 
     @Test
     public void loadsSimpleAndXMLPropertyFilesProper() {
-        Collection<PropertySource> propertySources = new JavaConfigurationProvider().getPropertySources();
-
-        assertThat(propertySources, notNullValue());
-        assertThat(propertySources, hasSize(2));
-
-        PropertySource propertySource = propertySources.iterator().next();
-
-        assertThat(propertySource.getProperties().keySet(), hasSize(5));  // double the size for .source values.
+        PropertySource propertySource = new JavaConfigurationPropertySource();
+        assertThat(propertySource.getProperties().keySet(), hasSize(7));  // double the size for .source values.
 
         for (int i = 1; i < 6; i++) {
             String key = "confkey" + i;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ff03e511/code/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
----------------------------------------------------------------------
diff --git a/code/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider b/code/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
index 9c352f4..c9f255a 100644
--- a/code/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
+++ b/code/core/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
@@ -17,4 +17,3 @@
 # under the License.
 #
 org.apache.tamaya.core.testdata.TestPropertySourceProvider
-org.apache.tamaya.core.provider.JavaConfigurationProvider


[5/5] incubator-tamaya git commit: Added logging for loading of the SPI.

Posted by an...@apache.org.
Added logging for loading of the SPI.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/9c073a73
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/9c073a73
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/9c073a73

Branch: refs/heads/master
Commit: 9c073a739cbd6f7b78564b52485088e7949e7e75
Parents: ff03e51
Author: anatole <an...@apache.org>
Authored: Thu Dec 22 22:01:21 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Thu Dec 22 22:01:21 2016 +0100

----------------------------------------------------------------------
 .../src/main/java/org/apache/tamaya/ConfigurationProvider.java | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9c073a73/code/api/src/main/java/org/apache/tamaya/ConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/code/api/src/main/java/org/apache/tamaya/ConfigurationProvider.java b/code/api/src/main/java/org/apache/tamaya/ConfigurationProvider.java
index e4bbb9a..6927d94 100644
--- a/code/api/src/main/java/org/apache/tamaya/ConfigurationProvider.java
+++ b/code/api/src/main/java/org/apache/tamaya/ConfigurationProvider.java
@@ -23,11 +23,14 @@ import org.apache.tamaya.spi.ConfigurationContextBuilder;
 import org.apache.tamaya.spi.ConfigurationProviderSpi;
 import org.apache.tamaya.spi.ServiceContextManager;
 
+import java.util.logging.Logger;
+
 /**
  * Static access to the {@link Configuration} for the very application.
  */
 public final class ConfigurationProvider {
 
+    private static final Logger LOG = Logger.getLogger(ConfigurationProvider.class.getName());
     private static final ConfigurationProviderSpi PROVIDER_SPI = loadSpi();
 
     private static ConfigurationProviderSpi loadSpi() {
@@ -36,7 +39,7 @@ public final class ConfigurationProvider {
         if(spi==null){
             throw new IllegalStateException("ConfigurationProviderSpi not available.");
         }
-
+        LOG.info("TAMAYA Loaded ConfigurationProviderSpi: " + spi.getClass().getName());
         return spi;
     }
 
@@ -103,6 +106,7 @@ public final class ConfigurationProvider {
      *                                                 applying a new Configuration.
      */
     public static void setConfiguration(Configuration config) {
+        LOG.info("TAMAYA Applying new Configuration: " + config);
         PROVIDER_SPI.setConfiguration(config);
     }