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>