This is an automated email from the ASF dual-hosted git repository.

jsinovassinnaik pushed a commit to branch tmp-b
in repository https://gitbox.apache.org/repos/asf/unomi.git

commit 0b988ef9bb2951d4fd522168f1cdb4aaf9b4c2a2
Author: jsinovassin <jsinovassinn...@jahia.com>
AuthorDate: Mon Sep 15 18:50:11 2025 +0200

    try to fix reference issue on stop
---
 persistence-spi/pom.xml                            |  7 +++-
 .../{ => evaluator}/ConditionEvaluator.java        |  2 +-
 .../ConditionEvaluatorDispatcher.java              |  6 +---
 .../impl}/ConditionEvaluatorDispatcherImpl.java    | 37 ++++++++++++-------
 .../resources/OSGI-INF/blueprint/blueprint.xml     | 41 ----------------------
 5 files changed, 32 insertions(+), 61 deletions(-)

diff --git a/persistence-spi/pom.xml b/persistence-spi/pom.xml
index f33e06665..7ec747761 100644
--- a/persistence-spi/pom.xml
+++ b/persistence-spi/pom.xml
@@ -57,6 +57,11 @@
             <artifactId>unomi-metrics</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.component.annotations</artifactId>
+            <scope>provided</scope>
+        </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-core</artifactId>
@@ -121,9 +126,9 @@
                 <extensions>true</extensions>
                 <configuration>
                     <instructions>
+                        <_dsannotations>*</_dsannotations>
                         
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
                         <Import-Package>
-
                             *
                         </Import-Package>
                     </instructions>
diff --git 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/ConditionEvaluator.java
 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/evaluator/ConditionEvaluator.java
similarity index 94%
rename from 
persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/ConditionEvaluator.java
rename to 
persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/evaluator/ConditionEvaluator.java
index 97af4ed97..fe2cf0451 100644
--- 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/ConditionEvaluator.java
+++ 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/evaluator/ConditionEvaluator.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.persistence.spi.conditions;
+package org.apache.unomi.persistence.spi.conditions.evaluator;
 
 import org.apache.unomi.api.Item;
 import org.apache.unomi.api.conditions.Condition;
diff --git 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/ConditionEvaluatorDispatcher.java
 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/evaluator/ConditionEvaluatorDispatcher.java
similarity index 87%
rename from 
persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/ConditionEvaluatorDispatcher.java
rename to 
persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/evaluator/ConditionEvaluatorDispatcher.java
index 0c6f438b4..458a06c96 100644
--- 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/ConditionEvaluatorDispatcher.java
+++ 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/evaluator/ConditionEvaluatorDispatcher.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.unomi.persistence.spi.conditions;
+package org.apache.unomi.persistence.spi.conditions.evaluator;
 
 import org.apache.unomi.api.Item;
 import org.apache.unomi.api.conditions.Condition;
@@ -23,10 +23,6 @@ import java.util.Map;
 
 public interface ConditionEvaluatorDispatcher {
 
-    void addEvaluator(String name, ConditionEvaluator evaluator);
-
-    void removeEvaluator(String name);
-
     boolean eval(Condition condition, Item item);
 
     boolean eval(Condition condition, Item item, Map<String, Object> context);
diff --git 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/ConditionEvaluatorDispatcherImpl.java
 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/evaluator/impl/ConditionEvaluatorDispatcherImpl.java
similarity index 71%
rename from 
persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/ConditionEvaluatorDispatcherImpl.java
rename to 
persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/evaluator/impl/ConditionEvaluatorDispatcherImpl.java
index 5a7f4cfc3..caacbac67 100644
--- 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/ConditionEvaluatorDispatcherImpl.java
+++ 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/conditions/evaluator/impl/ConditionEvaluatorDispatcherImpl.java
@@ -15,13 +15,21 @@
  * limitations under the License.
  */
 
-package org.apache.unomi.persistence.spi.conditions;
+package org.apache.unomi.persistence.spi.conditions.evaluator.impl;
 
 import org.apache.unomi.api.Item;
 import org.apache.unomi.api.conditions.Condition;
 import org.apache.unomi.metrics.MetricAdapter;
 import org.apache.unomi.metrics.MetricsService;
+import org.apache.unomi.persistence.spi.conditions.ConditionContextHelper;
+import 
org.apache.unomi.persistence.spi.conditions.evaluator.ConditionEvaluator;
+import 
org.apache.unomi.persistence.spi.conditions.evaluator.ConditionEvaluatorDispatcher;
 import org.apache.unomi.scripting.ScriptExecutor;
+import org.osgi.annotation.bundle.Requirement;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -32,33 +40,37 @@ import java.util.concurrent.ConcurrentHashMap;
 /**
  * Entry point for condition evaluation. Will dispatch to all evaluators.
  */
-//TODO change to delarative services remove blueprint
-public class ConditionEvaluatorDispatcherImpl implements 
ConditionEvaluatorDispatcher {
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(ConditionEvaluatorDispatcher.class.getName());
+
+@Component(service = ConditionEvaluatorDispatcher.class)
+public class ConditionEvaluatorDispatcherImpl
+        implements ConditionEvaluatorDispatcher {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(ConditionEvaluatorDispatcherImpl.class.getName());
 
     private Map<String, ConditionEvaluator> evaluators = new 
ConcurrentHashMap<>();
 
     private MetricsService metricsService;
     private ScriptExecutor scriptExecutor;
 
-    public ConditionEvaluatorDispatcherImpl() {}
+    public ConditionEvaluatorDispatcherImpl() {
+    }
 
+    @Reference
     public void setMetricsService(MetricsService metricsService) {
         this.metricsService = metricsService;
     }
 
+    @Reference
     public void setScriptExecutor(ScriptExecutor scriptExecutor) {
         this.scriptExecutor = scriptExecutor;
     }
 
-    @Override
-    public void addEvaluator(String name, ConditionEvaluator evaluator) {
-        evaluators.put(name, evaluator);
+    @Reference(service = ConditionEvaluator.class, cardinality = 
ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
+    public void bindEvaluator(ConditionEvaluator evaluator, Map<String, 
Object> props) {
+        evaluators.put((String) props.get("conditionEvaluatorId"), evaluator);
     }
 
-    @Override
-    public void removeEvaluator(String name) {
-        evaluators.remove(name);
+    public void unbindEvaluator(ConditionEvaluator evaluator, Map<String, 
Object> props) {
+        evaluators.remove((String) props.get("conditionEvaluatorId"));
     }
 
     @Override
@@ -83,8 +95,7 @@ public class ConditionEvaluatorDispatcherImpl implements 
ConditionEvaluatorDispa
             final ConditionEvaluatorDispatcher dispatcher = this;
             try {
                 return new MetricAdapter<Boolean>(metricsService, 
this.getClass().getName() + ".conditions." + conditionEvaluatorKey) {
-                    @Override
-                    public Boolean execute(Object... args) throws Exception {
+                    @Override public Boolean execute(Object... args) throws 
Exception {
                         Condition contextualCondition = 
ConditionContextHelper.getContextualCondition(condition, context, 
scriptExecutor);
                         if (contextualCondition != null) {
                             return evaluator.eval(contextualCondition, item, 
context, dispatcher);
diff --git 
a/persistence-spi/src/main/resources/OSGI-INF/blueprint/blueprint.xml 
b/persistence-spi/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index 7da5a271f..000000000
--- a/persistence-spi/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<blueprint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-           
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0";
-           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
-           xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
-  http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 
http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd";>
-
-
-    <reference id="metricsService" 
interface="org.apache.unomi.metrics.MetricsService" />
-    <reference id="scriptExecutor" 
interface="org.apache.unomi.scripting.ScriptExecutor" />
-
-    <bean id="conditionEvaluatorDispatcherImpl"
-          
class="org.apache.unomi.persistence.spi.conditions.ConditionEvaluatorDispatcherImpl">
-        <property name="metricsService" ref="metricsService" />
-        <property name="scriptExecutor" ref="scriptExecutor" />
-    </bean>
-
-    <service id="conditionEvaluatorDispatcherService" 
ref="conditionEvaluatorDispatcherImpl">
-        <interfaces>
-            
<value>org.apache.unomi.persistence.spi.conditions.ConditionEvaluatorDispatcher</value>
-        </interfaces>
-    </service>
-
-</blueprint>
\ No newline at end of file

Reply via email to