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