This is an automated email from the ASF dual-hosted git repository.
sergehuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/unomi.git
The following commit(s) were added to refs/heads/master by this push:
new ba8a4c29d UNOMI-953: Backport packaging bundle (Phase 2 PR 2) (#785)
ba8a4c29d is described below
commit ba8a4c29df2345e4a852cf2a8a967ed74aa593d9
Author: Serge Huber <[email protected]>
AuthorDate: Mon Jun 29 06:37:18 2026 +0200
UNOMI-953: Backport packaging bundle (Phase 2 PR 2) (#785)
Merge packaging bundle
---
distribution/src/main/feature/feature.xml | 52 ++++++++++++----------
.../unomi/groovy/actions/ScriptMetadata.java | 8 +++-
.../actions/services/GroovyActionsService.java | 14 ++++++
.../apache/unomi/services/UserListServiceImpl.java | 4 +-
4 files changed, 51 insertions(+), 27 deletions(-)
diff --git a/distribution/src/main/feature/feature.xml
b/distribution/src/main/feature/feature.xml
index 390ab3fd4..2b654d1df 100644
--- a/distribution/src/main/feature/feature.xml
+++ b/distribution/src/main/feature/feature.xml
@@ -29,16 +29,17 @@
<feature dependency="true"
version="${project.version}">unomi-elasticsearch-core</feature>
<feature dependency="true"
version="${project.version}">unomi-persistence-core</feature>
<feature dependency="true"
version="${project.version}">unomi-services</feature>
- <feature dependency="true"
version="${project.version}">unomi-rest-api</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-lists-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-geonames-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-elasticsearch-conditions</feature>
- <feature dependency="true"
version="${project.version}">unomi-plugins-advanced-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension-services</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-base</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-request</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-mail</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-optimization-test</feature>
+ <feature dependency="true"
version="${project.version}">unomi-rest-api</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension</feature>
+ <feature dependency="true"
version="${project.version}">unomi-elasticsearch-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-plugins-advanced-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-lists-extension</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-geonames-extension</feature>
<feature dependency="true"
version="${project.version}">unomi-shell-dev-commands</feature>
<feature dependency="true"
version="${project.version}">unomi-wab</feature>
<feature dependency="true"
version="${project.version}">unomi-web-tracker</feature>
@@ -55,16 +56,17 @@
<feature dependency="true"
version="${project.version}">unomi-elasticsearch-core</feature>
<feature dependency="true"
version="${project.version}">unomi-persistence-core</feature>
<feature dependency="true"
version="${project.version}">unomi-services</feature>
- <feature dependency="true"
version="${project.version}">unomi-rest-api</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-lists-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-geonames-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-elasticsearch-conditions</feature>
- <feature dependency="true"
version="${project.version}">unomi-plugins-advanced-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension-services</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-base</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-request</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-mail</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-optimization-test</feature>
+ <feature dependency="true"
version="${project.version}">unomi-rest-api</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension</feature>
+ <feature dependency="true"
version="${project.version}">unomi-elasticsearch-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-plugins-advanced-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-lists-extension</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-geonames-extension</feature>
<feature dependency="true"
version="${project.version}">unomi-shell-dev-commands</feature>
<feature dependency="true"
version="${project.version}">unomi-wab</feature>
<feature dependency="true"
version="${project.version}">unomi-web-tracker</feature>
@@ -82,16 +84,17 @@
<feature dependency="true"
version="${project.version}">unomi-opensearch-core</feature>
<feature dependency="true"
version="${project.version}">unomi-persistence-core</feature>
<feature dependency="true"
version="${project.version}">unomi-services</feature>
- <feature dependency="true"
version="${project.version}">unomi-rest-api</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-lists-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-geonames-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-opensearch-conditions</feature>
- <feature dependency="true"
version="${project.version}">unomi-plugins-advanced-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension-services</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-base</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-request</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-mail</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-optimization-test</feature>
+ <feature dependency="true"
version="${project.version}">unomi-rest-api</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension</feature>
+ <feature dependency="true"
version="${project.version}">unomi-opensearch-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-plugins-advanced-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-lists-extension</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-geonames-extension</feature>
<feature dependency="true"
version="${project.version}">unomi-shell-dev-commands</feature>
<feature dependency="true"
version="${project.version}">unomi-wab</feature>
<feature dependency="true"
version="${project.version}">unomi-web-tracker</feature>
@@ -108,16 +111,17 @@
<feature dependency="true"
version="${project.version}">unomi-opensearch-core</feature>
<feature dependency="true"
version="${project.version}">unomi-persistence-core</feature>
<feature dependency="true"
version="${project.version}">unomi-services</feature>
- <feature dependency="true"
version="${project.version}">unomi-rest-api</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-lists-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-geonames-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension</feature>
- <feature dependency="true"
version="${project.version}">unomi-opensearch-conditions</feature>
- <feature dependency="true"
version="${project.version}">unomi-plugins-advanced-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension-services</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-base</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-request</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-mail</feature>
<feature dependency="true"
version="${project.version}">unomi-plugins-optimization-test</feature>
+ <feature dependency="true"
version="${project.version}">unomi-rest-api</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-privacy-extension</feature>
+ <feature dependency="true"
version="${project.version}">unomi-opensearch-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-plugins-advanced-conditions</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-lists-extension</feature>
+ <feature dependency="true"
version="${project.version}">unomi-cxs-geonames-extension</feature>
<feature dependency="true"
version="${project.version}">unomi-shell-dev-commands</feature>
<feature dependency="true"
version="${project.version}">unomi-wab</feature>
<feature dependency="true"
version="${project.version}">unomi-web-tracker</feature>
diff --git
a/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/ScriptMetadata.java
b/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/ScriptMetadata.java
index f8f3803b0..4b8535d27 100644
---
a/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/ScriptMetadata.java
+++
b/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/ScriptMetadata.java
@@ -17,7 +17,6 @@
package org.apache.unomi.groovy.actions;
import groovy.lang.Script;
-
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.nio.charset.StandardCharsets;
@@ -29,9 +28,12 @@ import java.util.Base64;
* This class encapsulates all metadata associated with a compiled Groovy
script,
* including content hash for efficient change detection and the compiled class
* for direct execution without recompilation.
+ * </p>
+ *
* <p>
* Thread Safety: This class is immutable and thread-safe. All fields are final
* and the class provides no methods to modify its state after construction.
+ * </p>
*
* @since 2.7.0
*/
@@ -90,6 +92,7 @@ public final class ScriptMetadata {
* <p>
* This method uses SHA-256 hash comparison for efficient change detection
* without storing or comparing the full script content.
+ * </p>
*
* @param newContent the new script content to compare against
* @return {@code true} if content has changed, {@code false} if unchanged
@@ -143,10 +146,11 @@ public final class ScriptMetadata {
* <p>
* This class can be used to create new script instances for execution
* without requiring recompilation.
+ * </p>
*
* @return the compiled script class, never null
*/
public Class<? extends Script> getCompiledClass() {
return compiledClass;
}
-}
\ No newline at end of file
+}
diff --git
a/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/services/GroovyActionsService.java
b/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/services/GroovyActionsService.java
index 4f74528bb..ab15fbc47 100644
---
a/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/services/GroovyActionsService.java
+++
b/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/services/GroovyActionsService.java
@@ -27,17 +27,23 @@ import org.apache.unomi.groovy.actions.ScriptMetadata;
* This service provides functionality to load, compile, cache, and execute
* Groovy scripts as actions within the Apache Unomi framework. It implements
* optimized compilation and caching strategies to achieve high performance.
+ * </p>
+ *
* <p>
* Key features:
+ * </p>
* <ul>
* <li>Pre-compilation of scripts at startup</li>
* <li>Hash-based change detection for selective recompilation</li>
* <li>Thread-safe compilation and execution</li>
* <li>Unified caching architecture for compiled scripts</li>
* </ul>
+ *
* <p>
* Thread Safety: Implementations must be thread-safe as this service
* is accessed concurrently during script execution.
+ * </p>
+ *
* @see GroovyAction
* @see ScriptMetadata
* @since 2.7.0
@@ -50,6 +56,8 @@ public interface GroovyActionsService {
* This method compiles the script, validates it has the required
* annotations, persists it, and updates the internal cache.
* If the script content hasn't changed, recompilation is skipped.
+ * </p>
+ *
* @param actionName the unique identifier for the action
* @param groovyScript the Groovy script source code
* @throws IllegalArgumentException if actionName or groovyScript is null
@@ -62,6 +70,8 @@ public interface GroovyActionsService {
* <p>
* This method removes the action from both the cache and persistent
storage,
* and cleans up any registered action types in the definitions service.
+ * </p>
+ *
* @param actionName the unique identifier of the action to remove
* @throws IllegalArgumentException if id is null
*/
@@ -73,6 +83,8 @@ public interface GroovyActionsService {
* This is the preferred method for script execution as it returns
* pre-compiled classes without any compilation overhead. Returns
* {@code null} if the script is not found in the cache.
+ * </p>
+ *
* @param actionName the unique identifier of the action
* @return the compiled script class, or {@code null} if not found in cache
* @throws IllegalArgumentException if id is null
@@ -85,6 +97,8 @@ public interface GroovyActionsService {
* The returned metadata includes content hash, compilation timestamp,
* and the compiled class reference. This is useful for monitoring
* tools and debugging.
+ * </p>
+ *
* @param actionName the unique identifier of the action
* @return the script metadata, or {@code null} if not found
* @throws IllegalArgumentException if actionName is null
diff --git
a/extensions/lists-extension/services/src/main/java/org/apache/unomi/services/UserListServiceImpl.java
b/extensions/lists-extension/services/src/main/java/org/apache/unomi/services/UserListServiceImpl.java
index 1c656d1de..122488c03 100644
---
a/extensions/lists-extension/services/src/main/java/org/apache/unomi/services/UserListServiceImpl.java
+++
b/extensions/lists-extension/services/src/main/java/org/apache/unomi/services/UserListServiceImpl.java
@@ -59,7 +59,9 @@ public class UserListServiceImpl implements UserListService {
if (query.isForceRefresh()) {
persistenceService.refreshIndex(UserList.class);
}
- definitionsService.resolveConditionType(query.getCondition());
+ if (query.getCondition() != null) {
+
definitionsService.getConditionValidationService().validate(query.getCondition());
+ }
PartialList<UserList> userLists =
persistenceService.query(query.getCondition(), query.getSortby(),
UserList.class, query.getOffset(), query.getLimit());
List<Metadata> metadata = new LinkedList<>();
for (UserList definition : userLists.getList()) {