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">