You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by sh...@apache.org on 2016/12/22 09:45:47 UTC

incubator-unomi git commit: Make condition evaluator and condition ES query builders registration more solid by using reference listeners.

Repository: incubator-unomi
Updated Branches:
  refs/heads/feature-UNOMI-70-ES5X 2ff92868f -> 1c11ecc10


Make condition evaluator and condition ES query builders registration more solid by using reference listeners.

Signed-off-by: Serge Huber <sh...@apache.org>


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

Branch: refs/heads/feature-UNOMI-70-ES5X
Commit: 1c11ecc109469a6c7b5bc446d4b35d4eeb82bee6
Parents: 2ff9286
Author: Serge Huber <sh...@apache.org>
Authored: Thu Dec 22 10:42:42 2016 +0100
Committer: Serge Huber <sh...@apache.org>
Committed: Thu Dec 22 10:42:42 2016 +0100

----------------------------------------------------------------------
 .../ElasticSearchPersistenceServiceImpl.java    | 49 +++++++-------------
 .../ConditionESQueryBuilderDispatcher.java      | 10 ++++
 .../ConditionEvaluatorDispatcher.java           |  9 ++++
 .../resources/OSGI-INF/blueprint/blueprint.xml  | 15 ++++++
 4 files changed, 52 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/1c11ecc1/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
----------------------------------------------------------------------
diff --git a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
index f52dc5a..2a074c8 100644
--- a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
+++ b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
@@ -430,19 +430,6 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
 
         bundleContext.addBundleListener(this);
 
-        try {
-            for (ServiceReference<ConditionEvaluator> reference : bundleContext.getServiceReferences(ConditionEvaluator.class, null)) {
-                ConditionEvaluator service = bundleContext.getService(reference);
-                conditionEvaluatorDispatcher.addEvaluator(reference.getProperty("conditionEvaluatorId").toString(), reference.getBundle().getBundleId(), service);
-            }
-            for (ServiceReference<ConditionESQueryBuilder> reference : bundleContext.getServiceReferences(ConditionESQueryBuilder.class, null)) {
-                ConditionESQueryBuilder service = bundleContext.getService(reference);
-                conditionESQueryBuilderDispatcher.addQueryBuilder(reference.getProperty("queryBuilderId").toString(), reference.getBundle().getBundleId(), service);
-            }
-        } catch (Exception e) {
-            logger.error("Cannot get services", e);
-        }
-
         timer = new Timer();
 
         timer.scheduleAtFixedRate(new TimerTask() {
@@ -594,30 +581,30 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
         bundleContext.removeBundleListener(this);
     }
 
+    public void bindConditionEvaluator(ServiceReference<ConditionEvaluator> conditionEvaluatorServiceReference) {
+        ConditionEvaluator conditionEvaluator = bundleContext.getService(conditionEvaluatorServiceReference);
+        conditionEvaluatorDispatcher.addEvaluator(conditionEvaluatorServiceReference.getProperty("conditionEvaluatorId").toString(), conditionEvaluatorServiceReference.getBundle().getBundleId(), conditionEvaluator);
+    }
+
+    public void unbindConditionEvaluator(ServiceReference<ConditionEvaluator> conditionEvaluatorServiceReference) {
+        conditionEvaluatorDispatcher.removeEvaluator(conditionEvaluatorServiceReference.getProperty("conditionEvaluatorId").toString(), conditionEvaluatorServiceReference.getBundle().getBundleId());
+    }
+
+    public void bindConditionESQueryBuilder(ServiceReference<ConditionESQueryBuilder> conditionESQueryBuilderServiceReference) {
+        ConditionESQueryBuilder conditionESQueryBuilder = bundleContext.getService(conditionESQueryBuilderServiceReference);
+        conditionESQueryBuilderDispatcher.addQueryBuilder(conditionESQueryBuilderServiceReference.getProperty("queryBuilderId").toString(), conditionESQueryBuilderServiceReference.getBundle().getBundleId(), conditionESQueryBuilder);
+    }
+
+    public void unbindConditionESQueryBuilder(ServiceReference<ConditionESQueryBuilder> conditionESQueryBuilderServiceReference) {
+        conditionESQueryBuilderDispatcher.removeQueryBuilder(conditionESQueryBuilderServiceReference.getProperty("queryBuilderId").toString(), conditionESQueryBuilderServiceReference.getBundle().getBundleId());
+    }
+
     @Override
     public void bundleChanged(BundleEvent event) {
         switch (event.getType()) {
-            case BundleEvent.STARTED:
-                // @todo replace this with a proper service tracker/listener
-                if (event.getBundle() != null && event.getBundle().getRegisteredServices() != null) {
-                    for (ServiceReference<?> reference : event.getBundle().getRegisteredServices()) {
-                        Object service = bundleContext.getService(reference);
-                        if (service instanceof ConditionEvaluator) {
-                            conditionEvaluatorDispatcher.addEvaluator(reference.getProperty("conditionEvaluatorId").toString(), event.getBundle().getBundleId(), (ConditionEvaluator) service);
-                        }
-                        if (service instanceof ConditionESQueryBuilder) {
-                            conditionESQueryBuilderDispatcher.addQueryBuilder(reference.getProperty("queryBuilderId").toString(), event.getBundle().getBundleId(), (ConditionESQueryBuilder) service);
-                        }
-                    }
-                }
-                break;
             case BundleEvent.STARTING:
                 loadPredefinedMappings(event.getBundle().getBundleContext(), true);
                 break;
-            case BundleEvent.STOPPING:
-                conditionEvaluatorDispatcher.removeEvaluators(event.getBundle().getBundleId());
-                conditionESQueryBuilderDispatcher.removeQueryBuilders(event.getBundle().getBundleId());
-                break;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/1c11ecc1/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/conditions/ConditionESQueryBuilderDispatcher.java
----------------------------------------------------------------------
diff --git a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/conditions/ConditionESQueryBuilderDispatcher.java b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/conditions/ConditionESQueryBuilderDispatcher.java
index 3ab0d5e..fbea30e 100644
--- a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/conditions/ConditionESQueryBuilderDispatcher.java
+++ b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/conditions/ConditionESQueryBuilderDispatcher.java
@@ -52,6 +52,16 @@ public class ConditionESQueryBuilderDispatcher {
         queryBuildersByBundle.get(bundleId).add(name);
     }
 
+    public void removeQueryBuilder(String name, long bundleId) {
+        queryBuilders.remove(name);
+        List<String> bundleEvaluators = queryBuildersByBundle.get(bundleId);
+        if (bundleEvaluators != null && bundleEvaluators.size() > 0) {
+            bundleEvaluators.remove(name);
+            queryBuildersByBundle.put(bundleId, bundleEvaluators);
+        }
+    }
+
+
     public void removeQueryBuilders(long bundleId) {
         if (queryBuildersByBundle.containsKey(bundleId)) {
             for (String s : queryBuildersByBundle.get(bundleId)) {

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/1c11ecc1/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/conditions/ConditionEvaluatorDispatcher.java
----------------------------------------------------------------------
diff --git a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/conditions/ConditionEvaluatorDispatcher.java b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/conditions/ConditionEvaluatorDispatcher.java
index 0341c46..5573eed 100644
--- a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/conditions/ConditionEvaluatorDispatcher.java
+++ b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/conditions/ConditionEvaluatorDispatcher.java
@@ -51,6 +51,15 @@ public class ConditionEvaluatorDispatcher {
         evaluatorsByBundle.get(bundleId).add(name);
     }
 
+    public void removeEvaluator(String name, long bundleId) {
+        evaluators.remove(name);
+        List<String> bundleEvaluators = evaluatorsByBundle.get(bundleId);
+        if (bundleEvaluators != null && bundleEvaluators.size() > 0) {
+            bundleEvaluators.remove(name);
+            evaluatorsByBundle.put(bundleId, bundleEvaluators);
+        }
+    }
+
     public void removeEvaluators(long bundleId) {
         if (evaluatorsByBundle.containsKey(bundleId)) {
             for (String s : evaluatorsByBundle.get(bundleId)) {

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/1c11ecc1/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index 23963ac..8b514d7 100644
--- a/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -131,4 +131,19 @@
         <property name="karafJMXPort" value="${es.cluster.jmxPort}" />
     </bean>
 
+    <!-- We use a listener here because using the list directly for listening to proxies coming from the same bundle didn't seem to work -->
+    <reference-list id="conditionEvaluators"
+                    interface="org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluator"
+                    availability="optional">
+        <reference-listener
+                bind-method="bindConditionEvaluator" unbind-method="unbindConditionEvaluator" ref="elasticSearchPersistenceServiceImpl"/>
+    </reference-list>
+
+    <reference-list id="conditionESQueryBuilders"
+                    interface="org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilder"
+        availability="optional">
+        <reference-listener
+                bind-method="bindConditionESQueryBuilder" unbind-method="unbindConditionESQueryBuilder" ref="elasticSearchPersistenceServiceImpl"/>
+    </reference-list>
+
 </blueprint>