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 2015/10/23 00:40:34 UTC
incubator-tamaya git commit: TAMAYA-123: Adding support for
ManagedServices for injection
Repository: incubator-tamaya
Updated Branches:
refs/heads/master b12d8952e -> 215e7c25a
TAMAYA-123: Adding support for ManagedServices for injection
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/215e7c25
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/215e7c25
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/215e7c25
Branch: refs/heads/master
Commit: 215e7c25a309357aba26a190633eb3b6e6b527f3
Parents: b12d895
Author: Anatole Tresch <an...@apache.org>
Authored: Fri Oct 23 00:40:28 2015 +0200
Committer: Anatole Tresch <an...@apache.org>
Committed: Fri Oct 23 00:40:28 2015 +0200
----------------------------------------------------------------------
modules/integration/osgi/pom.xml | 5 ++
.../integration/osgi/TamayaConfigAdminImpl.java | 57 +++++++++++---------
.../osgi/TamayaConfigurationImpl.java | 40 +++++++++-----
3 files changed, 63 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/215e7c25/modules/integration/osgi/pom.xml
----------------------------------------------------------------------
diff --git a/modules/integration/osgi/pom.xml b/modules/integration/osgi/pom.xml
index 6bff679..80980ad 100644
--- a/modules/integration/osgi/pom.xml
+++ b/modules/integration/osgi/pom.xml
@@ -81,6 +81,11 @@
<artifactId>tamaya-functions</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.tamaya.ext</groupId>
+ <artifactId>tamaya-injection</artifactId>
+ <version>${project.version}</version>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/215e7c25/modules/integration/osgi/src/main/java/org/tamaya/integration/osgi/TamayaConfigAdminImpl.java
----------------------------------------------------------------------
diff --git a/modules/integration/osgi/src/main/java/org/tamaya/integration/osgi/TamayaConfigAdminImpl.java b/modules/integration/osgi/src/main/java/org/tamaya/integration/osgi/TamayaConfigAdminImpl.java
index 649661c..9333974 100644
--- a/modules/integration/osgi/src/main/java/org/tamaya/integration/osgi/TamayaConfigAdminImpl.java
+++ b/modules/integration/osgi/src/main/java/org/tamaya/integration/osgi/TamayaConfigAdminImpl.java
@@ -23,12 +23,10 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
+import org.osgi.framework.*;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.cm.ManagedService;
@@ -40,11 +38,16 @@ import org.osgi.util.tracker.ServiceTracker;
*/
public class TamayaConfigAdminImpl implements ConfigurationAdmin {
private final BundleContext context;
+ private ConfigurationAdmin parent;
private Map<String,Configuration> configs = new ConcurrentHashMap<>();
+ private static final Logger LOG = Logger.getLogger(TamayaConfigAdminImpl.class.getName());
public TamayaConfigAdminImpl(BundleContext context) throws IOException {
this.context = context;
- ServiceTracker<ManagedService, ManagedService> serviceTracker = new ServiceTracker<ManagedService, ManagedService>(context, ManagedService.class, null) {
+ ServiceReference<ConfigurationAdmin> ref = context.getServiceReference(ConfigurationAdmin.class);
+ this.parent = context.getService(ref);
+ ServiceTracker<ManagedService, ManagedService> serviceTracker = new ServiceTracker<ManagedService,
+ ManagedService>(context, ManagedService.class, null) {
@Override
public ManagedService addingService(ServiceReference<ManagedService> reference) {
ManagedService service = context.getService(reference);
@@ -59,10 +62,10 @@ public class TamayaConfigAdminImpl implements ConfigurationAdmin {
service.updated(config.getProperties());
}
} catch (Exception e) {
- e.printStackTrace();
+ LOG.log(Level.WARNING, "Error configuring ManagedService: " + service, e);
}
} else {
- System.err.println("Unsupported pid: " + pidObj);
+ LOG.log(Level.SEVERE, "Unsupported pid: " + pidObj);
}
return service;
}
@@ -74,34 +77,38 @@ public class TamayaConfigAdminImpl implements ConfigurationAdmin {
};
serviceTracker.open();
- ServiceTracker<ManagedServiceFactory, ManagedServiceFactory> factoryTracker
- = new ServiceTracker<ManagedServiceFactory, ManagedServiceFactory>(context, ManagedServiceFactory.class, null) {
+ ServiceTracker<ServiceFactory, ServiceFactory> factoryTracker
+ = new ServiceTracker<ServiceFactory, ServiceFactory>(context, ServiceFactory.class, null) {
@Override
- public ManagedServiceFactory addingService(ServiceReference<ManagedServiceFactory> reference) {
- ManagedServiceFactory factory = context.getService(reference);
- Object pidObj = reference.getProperty(Constants.SERVICE_PID);
- if (pidObj instanceof String) {
- String pid = (String) pidObj;
- try {
- Configuration config = getConfiguration(pid);
- if(config!=null){
- factory.updated(config.getFactoryPid(), config.getProperties());
+ public ServiceFactory addingService(ServiceReference<ServiceFactory> reference) {
+ ServiceFactory factory = context.getService(reference);
+ if(factory instanceof ManagedServiceFactory) {
+ Object pidObj = reference.getProperty(Constants.SERVICE_PID);
+ if (pidObj instanceof String) {
+ String pid = (String) pidObj;
+ try {
+ Configuration config = getConfiguration(pid);
+ if (config != null) {
+ ((ManagedServiceFactory) factory).updated(config.getFactoryPid(), config.getProperties());
+ }
+ } catch (Exception e) {
+ LOG.log(Level.WARNING, "Error configuring ManagedServiceFactory: " + factory, e);
}
- } catch (Exception e) {
- e.printStackTrace();
+ } else {
+ LOG.log(Level.SEVERE, "Unsupported pid: " + pidObj);
}
- } else {
- System.err.println("Unsupported pid: " + pidObj);
}
return factory;
}
@Override
- public void removedService(ServiceReference<ManagedServiceFactory> reference, ManagedServiceFactory service) {
+ public void removedService(ServiceReference<ServiceFactory> reference, ServiceFactory service) {
super.removedService(reference, service);
}
};
factoryTracker.open();
+
+
}
@Override
@@ -121,7 +128,7 @@ public class TamayaConfigAdminImpl implements ConfigurationAdmin {
@Override
public Configuration getConfiguration(String pid) throws IOException {
- return new TamayaConfigurationImpl(pid, null);
+ return new TamayaConfigurationImpl(pid, null, this.parent);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/215e7c25/modules/integration/osgi/src/main/java/org/tamaya/integration/osgi/TamayaConfigurationImpl.java
----------------------------------------------------------------------
diff --git a/modules/integration/osgi/src/main/java/org/tamaya/integration/osgi/TamayaConfigurationImpl.java b/modules/integration/osgi/src/main/java/org/tamaya/integration/osgi/TamayaConfigurationImpl.java
index 085b1d9..6af0392 100644
--- a/modules/integration/osgi/src/main/java/org/tamaya/integration/osgi/TamayaConfigurationImpl.java
+++ b/modules/integration/osgi/src/main/java/org/tamaya/integration/osgi/TamayaConfigurationImpl.java
@@ -19,14 +19,13 @@
package org.tamaya.integration.osgi;
import java.io.IOException;
-import java.util.Dictionary;
-import java.util.Hashtable;
-import java.util.Map;
+import java.util.*;
import org.apache.tamaya.ConfigurationProvider;
import org.apache.tamaya.functions.BiPredicate;
import org.apache.tamaya.functions.ConfigurationFunctions;
import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
/**
* Tamaya based implementation of an OSGI {@link Configuration}.
@@ -34,23 +33,36 @@ import org.osgi.service.cm.Configuration;
public class TamayaConfigurationImpl implements Configuration {
private final String pid;
private final String factoryPid;
- private Map<String, String> properties;
+ private Map<String, String> properties = new HashMap<>();
private org.apache.tamaya.Configuration config;
- public TamayaConfigurationImpl(String confPid, String factoryPid) {
+ public TamayaConfigurationImpl(String confPid, String factoryPid, ConfigurationAdmin parent) {
this.pid = confPid;
this.factoryPid = factoryPid;
- this.config = ConfigurationProvider.getConfiguration();
- this.properties = config.with(ConfigurationFunctions.filter(new BiPredicate<String, String>() {
- @Override
- public boolean test(String key, String value) {
- // TODO define name space / SPI
- if(key.startsWith("bundle." + pid)){
- return true;
+ if(parent!=null){
+ try {
+ Dictionary<String, Object> conf = parent.getConfiguration(confPid, factoryPid).getProperties();
+ Enumeration<String> keys = conf.keys();
+ while(keys.hasMoreElements()){
+ String key = keys.nextElement();
+ this.properties.put(key, conf.get(key).toString());
}
- return false;
+ } catch (IOException e) {
+ e.printStackTrace();
}
- })).getProperties();
+ }
+ this.config = ConfigurationProvider.getConfiguration();
+ this.properties.putAll(
+ config.with(ConfigurationFunctions.filter(new BiPredicate<String, String>() {
+ @Override
+ public boolean test(String key, String value) {
+ // TODO define name space / SPI
+ if (key.startsWith("bundle." + pid)) {
+ return true;
+ }
+ return false;
+ }
+ })).getProperties());
}
@Override