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 16:25:42 UTC

incubator-unomi git commit: Fixed most issues by making sure we use reference listeners everywhere for proper registration of actions and conditions

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


Fixed most issues by making sure we use reference listeners everywhere for proper registration of actions and conditions

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/2105da7e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/2105da7e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/2105da7e

Branch: refs/heads/feature-UNOMI-70-ES5X
Commit: 2105da7eceeecb377063dca34bdbb545042691fa
Parents: 1c11ecc
Author: Serge Huber <sh...@apache.org>
Authored: Thu Dec 22 17:25:29 2016 +0100
Committer: Serge Huber <sh...@apache.org>
Committed: Thu Dec 22 17:25:29 2016 +0100

----------------------------------------------------------------------
 .../ElasticSearchPersistenceServiceImpl.java    | 14 +++++---
 .../ConditionESQueryBuilderDispatcher.java      | 31 ++--------------
 .../ConditionEvaluatorDispatcher.java           | 31 ++--------------
 .../resources/OSGI-INF/blueprint/blueprint.xml  |  2 --
 .../actions/ActionExecutorDispatcher.java       | 24 ++-----------
 .../services/services/RulesServiceImpl.java     | 37 +++++++++-----------
 .../resources/OSGI-INF/blueprint/blueprint.xml  |  8 ++++-
 7 files changed, 40 insertions(+), 107 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2105da7e/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 2a074c8..8fc7a7e 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
@@ -583,20 +583,26 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
 
     public void bindConditionEvaluator(ServiceReference<ConditionEvaluator> conditionEvaluatorServiceReference) {
         ConditionEvaluator conditionEvaluator = bundleContext.getService(conditionEvaluatorServiceReference);
-        conditionEvaluatorDispatcher.addEvaluator(conditionEvaluatorServiceReference.getProperty("conditionEvaluatorId").toString(), conditionEvaluatorServiceReference.getBundle().getBundleId(), conditionEvaluator);
+        conditionEvaluatorDispatcher.addEvaluator(conditionEvaluatorServiceReference.getProperty("conditionEvaluatorId").toString(), conditionEvaluator);
     }
 
     public void unbindConditionEvaluator(ServiceReference<ConditionEvaluator> conditionEvaluatorServiceReference) {
-        conditionEvaluatorDispatcher.removeEvaluator(conditionEvaluatorServiceReference.getProperty("conditionEvaluatorId").toString(), conditionEvaluatorServiceReference.getBundle().getBundleId());
+        if (conditionEvaluatorServiceReference == null) {
+            return;
+        }
+        conditionEvaluatorDispatcher.removeEvaluator(conditionEvaluatorServiceReference.getProperty("conditionEvaluatorId").toString());
     }
 
     public void bindConditionESQueryBuilder(ServiceReference<ConditionESQueryBuilder> conditionESQueryBuilderServiceReference) {
         ConditionESQueryBuilder conditionESQueryBuilder = bundleContext.getService(conditionESQueryBuilderServiceReference);
-        conditionESQueryBuilderDispatcher.addQueryBuilder(conditionESQueryBuilderServiceReference.getProperty("queryBuilderId").toString(), conditionESQueryBuilderServiceReference.getBundle().getBundleId(), conditionESQueryBuilder);
+        conditionESQueryBuilderDispatcher.addQueryBuilder(conditionESQueryBuilderServiceReference.getProperty("queryBuilderId").toString(), conditionESQueryBuilder);
     }
 
     public void unbindConditionESQueryBuilder(ServiceReference<ConditionESQueryBuilder> conditionESQueryBuilderServiceReference) {
-        conditionESQueryBuilderDispatcher.removeQueryBuilder(conditionESQueryBuilderServiceReference.getProperty("queryBuilderId").toString(), conditionESQueryBuilderServiceReference.getBundle().getBundleId());
+        if (conditionESQueryBuilderServiceReference == null) {
+            return;
+        }
+        conditionESQueryBuilderDispatcher.removeQueryBuilder(conditionESQueryBuilderServiceReference.getProperty("queryBuilderId").toString());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2105da7e/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 fbea30e..b3099bc 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
@@ -20,57 +20,30 @@ package org.apache.unomi.persistence.elasticsearch.conditions;
 import org.apache.unomi.api.conditions.Condition;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
-import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 public class ConditionESQueryBuilderDispatcher {
     private static final Logger logger = LoggerFactory.getLogger(ConditionESQueryBuilderDispatcher.class.getName());
 
-    private BundleContext bundleContext;
     private Map<String, ConditionESQueryBuilder> queryBuilders = new ConcurrentHashMap<>();
-    private Map<Long, List<String>> queryBuildersByBundle = new ConcurrentHashMap<>();
 
     public ConditionESQueryBuilderDispatcher() {
     }
 
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public void addQueryBuilder(String name, long bundleId, ConditionESQueryBuilder evaluator) {
+    public void addQueryBuilder(String name, ConditionESQueryBuilder evaluator) {
         queryBuilders.put(name, evaluator);
-        if (!queryBuildersByBundle.containsKey(bundleId)) {
-            queryBuildersByBundle.put(bundleId, new ArrayList<String>());
-        }
-        queryBuildersByBundle.get(bundleId).add(name);
     }
 
-    public void removeQueryBuilder(String name, long bundleId) {
+    public void removeQueryBuilder(String name) {
         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)) {
-                queryBuilders.remove(s);
-            }
-            queryBuildersByBundle.remove(bundleId);
-        }
-    }
-
     public String getQuery(Condition condition) {
         return "{\"query\": " + getQueryBuilder(condition).toString() + "}";
     }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2105da7e/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 5573eed..dff7ecb 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
@@ -19,13 +19,10 @@ package org.apache.unomi.persistence.elasticsearch.conditions;
 
 import org.apache.unomi.api.Item;
 import org.apache.unomi.api.conditions.Condition;
-import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -35,38 +32,14 @@ import java.util.concurrent.ConcurrentHashMap;
 public class ConditionEvaluatorDispatcher {
     private static final Logger logger = LoggerFactory.getLogger(ConditionEvaluatorDispatcher.class.getName());
 
-    private BundleContext bundleContext;
     private Map<String, ConditionEvaluator> evaluators = new ConcurrentHashMap<>();
-    private Map<Long, List<String>> evaluatorsByBundle = new ConcurrentHashMap<>();
 
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public void addEvaluator(String name, long bundleId, ConditionEvaluator evaluator) {
+    public void addEvaluator(String name, ConditionEvaluator evaluator) {
         evaluators.put(name, evaluator);
-        if (!evaluatorsByBundle.containsKey(bundleId)) {
-            evaluatorsByBundle.put(bundleId, new ArrayList<String>());
-        }
-        evaluatorsByBundle.get(bundleId).add(name);
     }
 
-    public void removeEvaluator(String name, long bundleId) {
+    public void removeEvaluator(String name) {
         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)) {
-                evaluators.remove(s);
-            }
-            evaluatorsByBundle.remove(bundleId);
-        }
     }
 
     public boolean eval(Condition condition, Item item) {

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2105da7e/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 8b514d7..fea1879 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
@@ -75,12 +75,10 @@
 
     <bean id="conditionESQueryBuilderDispatcher"
           class="org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
     </bean>
 
     <bean id="conditionEvaluatorDispatcherImpl"
           class="org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
     </bean>
 
     <bean id="elasticSearchPersistenceServiceImpl"

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2105da7e/services/src/main/java/org/apache/unomi/services/actions/ActionExecutorDispatcher.java
----------------------------------------------------------------------
diff --git a/services/src/main/java/org/apache/unomi/services/actions/ActionExecutorDispatcher.java b/services/src/main/java/org/apache/unomi/services/actions/ActionExecutorDispatcher.java
index bcd49e7..62e2463 100644
--- a/services/src/main/java/org/apache/unomi/services/actions/ActionExecutorDispatcher.java
+++ b/services/src/main/java/org/apache/unomi/services/actions/ActionExecutorDispatcher.java
@@ -26,15 +26,12 @@ import org.apache.unomi.api.services.EventService;
 import org.mvel2.MVEL;
 import org.mvel2.ParserConfiguration;
 import org.mvel2.ParserContext;
-import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.Serializable;
 import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -43,9 +40,7 @@ public class ActionExecutorDispatcher {
     private static final String VALUE_NAME_SEPARATOR = "::";
     private final Map<String, Serializable> mvelExpressions = new ConcurrentHashMap<>();
     private final Map<String, ValueExtractor> valueExtractors = new HashMap<>(11);
-    private BundleContext bundleContext;
     private Map<String, ActionExecutor> executors = new ConcurrentHashMap<>();
-    private Map<Long, List<String>> executorsByBundle = new ConcurrentHashMap<>();
 
     public ActionExecutorDispatcher() {
         valueExtractors.put("profileProperty", new ValueExtractor() {
@@ -101,21 +96,12 @@ public class ActionExecutorDispatcher {
         });
     }
 
-    public void addExecutor(String name, long bundleId, ActionExecutor evaluator) {
+    public void addExecutor(String name, ActionExecutor evaluator) {
         executors.put(name, evaluator);
-        if (!executorsByBundle.containsKey(bundleId)) {
-            executorsByBundle.put(bundleId, new ArrayList<String>());
-        }
-        executorsByBundle.get(bundleId).add(name);
     }
 
-    public void removeExecutors(long bundleId) {
-        if (executorsByBundle.containsKey(bundleId)) {
-            for (String s : executorsByBundle.get(bundleId)) {
-                executors.remove(s);
-            }
-            executorsByBundle.remove(bundleId);
-        }
+    public void removeExecutor(String name) {
+        executors.remove(name);
     }
 
     public Action getContextualAction(Action action, Event event) {
@@ -177,10 +163,6 @@ public class ActionExecutorDispatcher {
         return false;
     }
 
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
     public int execute(Action action, Event event) {
         String actionKey = action.getActionType().getActionExecutor();
         if (actionKey == null) {

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2105da7e/services/src/main/java/org/apache/unomi/services/services/RulesServiceImpl.java
----------------------------------------------------------------------
diff --git a/services/src/main/java/org/apache/unomi/services/services/RulesServiceImpl.java b/services/src/main/java/org/apache/unomi/services/services/RulesServiceImpl.java
index b1d4d51..e4deeb1 100644
--- a/services/src/main/java/org/apache/unomi/services/services/RulesServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/services/RulesServiceImpl.java
@@ -17,12 +17,13 @@
 
 package org.apache.unomi.services.services;
 
-import org.apache.unomi.api.*;
+import org.apache.unomi.api.Event;
+import org.apache.unomi.api.Item;
+import org.apache.unomi.api.Metadata;
+import org.apache.unomi.api.PartialList;
 import org.apache.unomi.api.actions.Action;
 import org.apache.unomi.api.actions.ActionExecutor;
-import org.apache.unomi.api.actions.ActionType;
 import org.apache.unomi.api.conditions.Condition;
-import org.apache.unomi.api.conditions.ConditionType;
 import org.apache.unomi.api.query.Query;
 import org.apache.unomi.api.rules.Rule;
 import org.apache.unomi.api.services.DefinitionsService;
@@ -77,6 +78,18 @@ public class RulesServiceImpl implements RulesService, EventListenerService, Syn
         this.actionExecutorDispatcher = actionExecutorDispatcher;
     }
 
+    public void bindExecutor(ServiceReference<ActionExecutor> actionExecutorServiceReference) {
+        ActionExecutor actionExecutor = bundleContext.getService(actionExecutorServiceReference);
+        actionExecutorDispatcher.addExecutor(actionExecutorServiceReference.getProperty("actionExecutorId").toString(), actionExecutor);
+    }
+
+    public void unbindExecutor(ServiceReference<ActionExecutor> actionExecutorServiceReference) {
+        if (actionExecutorServiceReference == null) {
+            return;
+        }
+        actionExecutorDispatcher.removeExecutor(actionExecutorServiceReference.getProperty("actionExecutorId").toString());
+    }
+
     public void postConstruct() {
         logger.debug("postConstruct {" + bundleContext.getBundle() + "}");
 
@@ -86,14 +99,6 @@ public class RulesServiceImpl implements RulesService, EventListenerService, Syn
                 loadPredefinedRules(bundle.getBundleContext());
             }
         }
-        try {
-            for (ServiceReference<ActionExecutor> reference : bundleContext.getServiceReferences(ActionExecutor.class, null)) {
-                ActionExecutor service = bundleContext.getService(reference);
-                actionExecutorDispatcher.addExecutor(reference.getProperty("actionExecutorId").toString(), reference.getBundle().getBundleId(), service);
-            }
-        } catch (Exception e) {
-            logger.error("Cannot get services",e);
-        }
 
         bundleContext.addBundleListener(this);
 
@@ -117,22 +122,12 @@ public class RulesServiceImpl implements RulesService, EventListenerService, Syn
             return;
         }
         loadPredefinedRules(bundleContext);
-
-        if (bundleContext.getBundle().getRegisteredServices() != null) {
-            for (ServiceReference<?> reference : bundleContext.getBundle().getRegisteredServices()) {
-                Object service = bundleContext.getService(reference);
-                if (service instanceof ActionExecutor) {
-                    actionExecutorDispatcher.addExecutor(reference.getProperty("actionExecutorId").toString(), bundleContext.getBundle().getBundleId(), (ActionExecutor) service);
-                }
-            }
-        }
     }
 
     private void processBundleStop(BundleContext bundleContext) {
         if (bundleContext == null) {
             return;
         }
-        actionExecutorDispatcher.removeExecutors(bundleContext.getBundle().getBundleId());
     }
 
     private void loadPredefinedRules(BundleContext bundleContext) {

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2105da7e/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index 3176639..8c0d371 100644
--- a/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -84,7 +84,6 @@
 
     <bean id="actionExecutorDispatcherImpl"
           class="org.apache.unomi.services.actions.ActionExecutorDispatcher">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
     </bean>
 
     <bean id="rulesServiceImpl" class="org.apache.unomi.services.services.RulesServiceImpl"
@@ -138,6 +137,13 @@
                 bind-method="bind" unbind-method="unbind" ref="eventServiceImpl"/>
     </reference-list>
 
+    <reference-list id="actionExecutors"
+                    interface="org.apache.unomi.api.actions.ActionExecutor"
+                    availability="optional">
+        <reference-listener
+                bind-method="bindExecutor" unbind-method="unbindExecutor" ref="rulesServiceImpl"/>
+    </reference-list>
+
     <!-- Property merge strategy executors -->
 
     <service auto-export="interfaces">