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