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

ilgrosso pushed a commit to branch 4_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/4_0_X by this push:
     new def484ee6c [SYNCOPE-1998] Fixing PropagationTaskCallable generation
def484ee6c is described below

commit def484ee6cec8dd6920826c2439695bf5bc9efdd
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Tue Sep 22 15:32:45 2026 +0200

    [SYNCOPE-1998] Fixing PropagationTaskCallable generation
---
 .../implementations/MyPropagationActions.groovy    |  2 +-
 .../syncope/core/logic/IdMLogicTestContext.java    |  6 +++
 .../syncope/core/logic/IdRepoLogicTestContext.java |  6 +++
 ...nstrumentedPriorityPropagationTaskExecutor.java |  4 +-
 .../syncope/core/starter/MetricsContext.java       |  2 +
 .../java/DefaultUserProvisioningManager.java       |  8 +--
 .../provisioning/java/ProvisioningContext.java     |  3 ++
 .../PriorityPropagationTaskExecutor.java           | 61 +++++++++++++++++-----
 .../provisioning/java/ProvisioningTestContext.java |  6 +++
 .../getting-started/systemRequirements.adoc        |  2 +-
 .../reference-guide/configuration/deployment.adoc  |  4 +-
 11 files changed, 81 insertions(+), 23 deletions(-)

diff --git 
a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy
 
b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy
index fe7d287c95..845b1cd371 100644
--- 
a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy
+++ 
b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy
@@ -22,7 +22,7 @@ import org.apache.syncope.common.lib.to.OrgUnit
 import org.apache.syncope.common.lib.to.Provision
 import org.apache.syncope.core.persistence.api.entity.task.TaskExec
 import org.apache.syncope.core.provisioning.api.propagation.PropagationActions
-import 
org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo
 import org.identityconnectors.framework.common.objects.ConnectorObject
 
 class MyPropagationActions implements PropagationActions {
diff --git 
a/core/idm/logic/src/test/java/org/apache/syncope/core/logic/IdMLogicTestContext.java
 
b/core/idm/logic/src/test/java/org/apache/syncope/core/logic/IdMLogicTestContext.java
index cffd6e7613..b8a0e8d7ed 100644
--- 
a/core/idm/logic/src/test/java/org/apache/syncope/core/logic/IdMLogicTestContext.java
+++ 
b/core/idm/logic/src/test/java/org/apache/syncope/core/logic/IdMLogicTestContext.java
@@ -36,6 +36,7 @@ import 
org.apache.syncope.core.persistence.jpa.PersistenceContext;
 import org.apache.syncope.core.persistence.jpa.StartupDomainLoader;
 import org.apache.syncope.core.provisioning.api.ImplementationLookup;
 import org.apache.syncope.core.provisioning.java.ProvisioningContext;
+import org.apache.syncope.core.spring.security.AuthDataAccessor;
 import org.apache.syncope.core.spring.security.SecurityContext;
 import org.apache.syncope.core.workflow.java.WorkflowContext;
 import org.springframework.boot.logging.LoggingSystem;
@@ -105,4 +106,9 @@ public class IdMLogicTestContext {
     public CacheManager cacheManager() {
         return Caching.getCachingProvider().getCacheManager();
     }
+
+    @Bean
+    public AuthDataAccessor authDataAccessor() {
+        return mock(AuthDataAccessor.class);
+    }
 }
diff --git 
a/core/idrepo/logic/src/test/java/org/apache/syncope/core/logic/IdRepoLogicTestContext.java
 
b/core/idrepo/logic/src/test/java/org/apache/syncope/core/logic/IdRepoLogicTestContext.java
index 8217a10ceb..cd2fb38ef5 100644
--- 
a/core/idrepo/logic/src/test/java/org/apache/syncope/core/logic/IdRepoLogicTestContext.java
+++ 
b/core/idrepo/logic/src/test/java/org/apache/syncope/core/logic/IdRepoLogicTestContext.java
@@ -36,6 +36,7 @@ import 
org.apache.syncope.core.persistence.jpa.PersistenceContext;
 import org.apache.syncope.core.persistence.jpa.StartupDomainLoader;
 import org.apache.syncope.core.provisioning.api.ImplementationLookup;
 import org.apache.syncope.core.provisioning.java.ProvisioningContext;
+import org.apache.syncope.core.spring.security.AuthDataAccessor;
 import org.apache.syncope.core.spring.security.SecurityContext;
 import org.apache.syncope.core.workflow.java.WorkflowContext;
 import org.springframework.boot.logging.LoggingSystem;
@@ -104,4 +105,9 @@ public class IdRepoLogicTestContext {
     public CacheManager cacheManager() {
         return Caching.getCachingProvider().getCacheManager();
     }
+
+    @Bean
+    public AuthDataAccessor authDataAccessor() {
+        return mock(AuthDataAccessor.class);
+    }
 }
diff --git 
a/core/metrics-starter/src/main/java/org/apache/syncope/core/provisioning/java/propagation/InstrumentedPriorityPropagationTaskExecutor.java
 
b/core/metrics-starter/src/main/java/org/apache/syncope/core/provisioning/java/propagation/InstrumentedPriorityPropagationTaskExecutor.java
index 0ba8fba38f..bb9d1344c9 100644
--- 
a/core/metrics-starter/src/main/java/org/apache/syncope/core/provisioning/java/propagation/InstrumentedPriorityPropagationTaskExecutor.java
+++ 
b/core/metrics-starter/src/main/java/org/apache/syncope/core/provisioning/java/propagation/InstrumentedPriorityPropagationTaskExecutor.java
@@ -35,6 +35,7 @@ import 
org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
 import 
org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
 import org.apache.syncope.core.provisioning.java.pushpull.OutboundMatcher;
 import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
+import org.apache.syncope.core.spring.security.AuthDataAccessor;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.core.task.AsyncTaskExecutor;
 
@@ -56,12 +57,13 @@ public class InstrumentedPriorityPropagationTaskExecutor 
extends PriorityPropaga
             final OutboundMatcher outboundMatcher,
             final PlainAttrValidationManager validator,
             final ApplicationEventPublisher publisher,
+            final AuthDataAccessor authDataAccessor,
             final AsyncTaskExecutor taskExecutor,
             final MeterRegistry meterRegistry) {
 
         super(connectorManager, connObjectUtils, taskDAO, resourceDAO, 
plainSchemaDAO, notificationManager,
                 auditManager, taskDataBinder, anyUtilsFactory, 
taskUtilsFactory, outboundMatcher, validator, publisher,
-                taskExecutor);
+                authDataAccessor, taskExecutor);
         this.meterRegistry = meterRegistry;
     }
 
diff --git 
a/core/metrics-starter/src/main/java/org/apache/syncope/core/starter/MetricsContext.java
 
b/core/metrics-starter/src/main/java/org/apache/syncope/core/starter/MetricsContext.java
index 5d8165f40c..52d1923285 100644
--- 
a/core/metrics-starter/src/main/java/org/apache/syncope/core/starter/MetricsContext.java
+++ 
b/core/metrics-starter/src/main/java/org/apache/syncope/core/starter/MetricsContext.java
@@ -138,6 +138,7 @@ public class MetricsContext {
             final OutboundMatcher outboundMatcher,
             final PlainAttrValidationManager validator,
             final ApplicationEventPublisher publisher,
+            final AuthDataAccessor authDataAccessor,            
             final MeterRegistry meterRegistry) {
 
         return new InstrumentedPriorityPropagationTaskExecutor(
@@ -154,6 +155,7 @@ public class MetricsContext {
                 outboundMatcher,
                 validator,
                 publisher,
+                authDataAccessor,
                 propagationTaskExecutorAsyncExecutor,
                 meterRegistry);
     }
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
index 7b2dacb494..70f1c39c5c 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
@@ -115,7 +115,7 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
                 AnyTypeKind.USER,
                 userUR.getKey(),
                 
Optional.ofNullable(userUR.getPassword()).map(PasswordPatch::getValue).orElse(null),
-                userUR.getPassword() == null ? List.of() : 
userUR.getPassword().getResources(),
+                
Optional.ofNullable(userUR.getPassword()).map(PasswordPatch::getResources).orElseGet(()
 -> List.of()),
                 null,
                 Set.of());
 
@@ -155,7 +155,7 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
                 AnyTypeKind.USER,
                 userUR.getKey(),
                 
Optional.ofNullable(userUR.getPassword()).map(PasswordPatch::getValue).orElse(null),
-                userUR.getPassword() == null ? List.of() : 
userUR.getPassword().getResources(),
+                
Optional.ofNullable(userUR.getPassword()).map(PasswordPatch::getResources).orElseGet(()
 -> List.of()),
                 enabled,
                 excludedResources);
 
@@ -364,8 +364,8 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
         userDAO.findLinkedAccounts(key).stream().
                 filter(account -> 
resources.contains(account.getResource().getKey())).
                 forEach(account -> propByLinkedAccount.add(
-                ResourceOperation.DELETE,
-                Pair.of(account.getResource().getKey(), 
account.getConnObjectKeyValue())));
+                        ResourceOperation.DELETE,
+                        Pair.of(account.getResource().getKey(), 
account.getConnObjectKeyValue())));
 
         List<PropagationTaskInfo> taskInfos = 
propagationManager.getDeleteTasks(
                 AnyTypeKind.USER,
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
index cef5714357..9e79f7a56f 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
@@ -161,6 +161,7 @@ import 
org.apache.syncope.core.provisioning.java.pushpull.InboundMatcher;
 import org.apache.syncope.core.provisioning.java.pushpull.LiveSyncTaskSaver;
 import org.apache.syncope.core.provisioning.java.pushpull.OutboundMatcher;
 import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
+import org.apache.syncope.core.spring.security.AuthDataAccessor;
 import org.apache.syncope.core.spring.security.DefaultCredentialChecker;
 import org.apache.syncope.core.spring.security.PasswordGenerator;
 import org.apache.syncope.core.spring.security.SecurityProperties;
@@ -497,6 +498,7 @@ public class ProvisioningContext {
             final TaskDataBinder taskDataBinder,
             final OutboundMatcher outboundMatcher,
             final PlainAttrValidationManager validator,
+            final AuthDataAccessor authDataAccessor,
             final ApplicationEventPublisher publisher) {
 
         return new PriorityPropagationTaskExecutor(
@@ -513,6 +515,7 @@ public class ProvisioningContext {
                 outboundMatcher,
                 validator,
                 publisher,
+                authDataAccessor,
                 propagationTaskExecutorAsyncExecutor);
     }
 
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
index a938611aa4..50efacd963 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CompletionService;
 import java.util.concurrent.ExecutorCompletionService;
@@ -47,6 +48,8 @@ import 
org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
 import org.apache.syncope.core.provisioning.java.pushpull.OutboundMatcher;
 import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
 import org.apache.syncope.core.spring.security.AuthContextUtils;
+import org.apache.syncope.core.spring.security.AuthDataAccessor;
+import org.apache.syncope.core.spring.security.SyncopeGrantedAuthority;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.core.task.AsyncTaskExecutor;
 
@@ -59,6 +62,8 @@ import org.springframework.core.task.AsyncTaskExecutor;
  */
 public class PriorityPropagationTaskExecutor extends 
AbstractPropagationTaskExecutor {
 
+    protected final AuthDataAccessor authDataAccessor;
+
     protected final AsyncTaskExecutor taskExecutor;
 
     public PriorityPropagationTaskExecutor(
@@ -75,6 +80,7 @@ public class PriorityPropagationTaskExecutor extends 
AbstractPropagationTaskExec
             final OutboundMatcher outboundMatcher,
             final PlainAttrValidationManager validator,
             final ApplicationEventPublisher publisher,
+            final AuthDataAccessor authDataAccessor,
             final AsyncTaskExecutor taskExecutor) {
 
         super(connectorManager,
@@ -90,33 +96,56 @@ public class PriorityPropagationTaskExecutor extends 
AbstractPropagationTaskExec
                 outboundMatcher,
                 validator,
                 publisher);
+        this.authDataAccessor = authDataAccessor;
         this.taskExecutor = taskExecutor;
     }
 
     /**
-     * Creates new instances of {@link Callable} for usage with{@link 
java.util.concurrent.CompletionService}.
+     * Creates new instances of {@link Callable} for synchronous invocation.
      *
      * @param taskInfo to be executed
      * @param reporter to report propagation execution status
      * @param executor user that triggered the propagation execution
-     * @return new {@link Callable} instance for usage with {@link 
java.util.concurrent.CompletionService}
+     * @return new {@link Callable} instance for synchronous invocation
      */
     protected Callable<TaskExec<PropagationTask>> newPropagationTaskCallable(
-            final PropagationTaskInfo taskInfo, final PropagationReporter 
reporter, final String executor) {
+            final PropagationTaskInfo taskInfo,
+            final PropagationReporter reporter,
+            final String executor) {
 
-        return () -> AuthContextUtils.callAs(
-                AuthContextUtils.getDomain(),
-                executor,
-                AuthContextUtils.getAuthorities(),
-                () -> {
-                    LOG.debug("Execution started for {}", taskInfo);
+        return () -> {
+            LOG.debug("Execution started for {}", taskInfo);
 
-                    TaskExec<PropagationTask> execution = 
this.execute(taskInfo, reporter, executor);
+            TaskExec<PropagationTask> execution = this.execute(taskInfo, 
reporter, executor);
 
-                    LOG.debug("Execution completed for {} with results {}", 
taskInfo, execution);
+            LOG.debug("Execution completed for {} with results {}", taskInfo, 
execution);
 
-                    return execution;
-                });
+            return execution;
+        };
+    }
+
+    /**
+     * Creates new instances of {@link Callable} for usage with{@link 
CompletionService}.
+     *
+     * @param taskInfo to be executed
+     * @param reporter to report propagation execution status
+     * @param domain executor's domain
+     * @param executor user that triggered the propagation execution
+     * @param authorities executor's authorities
+     * @return new {@link Callable} instance for usage with {@link 
CompletionService}
+     */
+    protected Callable<TaskExec<PropagationTask>> newPropagationTaskCallable(
+            final PropagationTaskInfo taskInfo,
+            final PropagationReporter reporter,
+            final String domain,
+            final String executor,
+            final Set<SyncopeGrantedAuthority> authorities) {
+
+        return () -> AuthContextUtils.callAs(
+                domain,
+                executor,
+                authorities,
+                newPropagationTaskCallable(taskInfo, reporter, executor));
     }
 
     protected boolean failed(
@@ -173,8 +202,12 @@ public class PriorityPropagationTaskExecutor extends 
AbstractPropagationTaskExec
                 List<Future<TaskExec<PropagationTask>>> futures = new 
ArrayList<>();
 
                 concurrentTasks.forEach(taskInfo -> {
+                    String domain = AuthContextUtils.getDomain();
+                    Set<SyncopeGrantedAuthority> authorities = 
authDataAccessor.getAuthorities(executor, null);
+
                     try {
-                        
futures.add(completionService.submit(newPropagationTaskCallable(taskInfo, 
reporter, executor)));
+                        futures.add(completionService.submit(
+                                newPropagationTaskCallable(taskInfo, reporter, 
domain, executor, authorities)));
 
                         if (nullPriorityAsync) {
                             reporter.onSuccessOrNonPriorityResourceFailures(
diff --git 
a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ProvisioningTestContext.java
 
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ProvisioningTestContext.java
index 1d26751024..8e5c43c9c5 100644
--- 
a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ProvisioningTestContext.java
+++ 
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ProvisioningTestContext.java
@@ -34,6 +34,7 @@ import 
org.apache.syncope.core.persistence.jpa.PGPersistenceContext;
 import org.apache.syncope.core.persistence.jpa.PersistenceContext;
 import org.apache.syncope.core.persistence.jpa.StartupDomainLoader;
 import org.apache.syncope.core.provisioning.api.ImplementationLookup;
+import org.apache.syncope.core.spring.security.AuthDataAccessor;
 import org.apache.syncope.core.spring.security.SecurityContext;
 import org.apache.syncope.core.workflow.java.WorkflowContext;
 import org.springframework.context.ConfigurableApplicationContext;
@@ -90,4 +91,9 @@ public class ProvisioningTestContext {
     public DomainOps domainOps(final DomainRegistry<JPADomain> domainRegistry) 
{
         return new DummyDomainOps(domainRegistry);
     }
+
+    @Bean
+    public AuthDataAccessor authDataAccessor() {
+        return mock(AuthDataAccessor.class);
+    }
 }
diff --git a/src/main/asciidoc/getting-started/systemRequirements.adoc 
b/src/main/asciidoc/getting-started/systemRequirements.adoc
index 00c7e7f33a..9951d32c4a 100644
--- a/src/main/asciidoc/getting-started/systemRequirements.adoc
+++ b/src/main/asciidoc/getting-started/systemRequirements.adoc
@@ -38,7 +38,7 @@ Apache Syncope {docVersion} is verified with the following 
Jakarta EE containers
 
  . https://tomcat.apache.org/download-10.cgi[Apache Tomcat 10^]
  . https://www.payara.fish/[Payara Server 6^]
- . https://www.wildfly.org/[Wildfly 40^]
+ . https://www.wildfly.org/[Wildfly 41^]
 
 === Internal Storage
 
diff --git a/src/main/asciidoc/reference-guide/configuration/deployment.adoc 
b/src/main/asciidoc/reference-guide/configuration/deployment.adoc
index 3159e4c0cd..49386f8bb5 100644
--- a/src/main/asciidoc/reference-guide/configuration/deployment.adoc
+++ b/src/main/asciidoc/reference-guide/configuration/deployment.adoc
@@ -106,7 +106,7 @@ for the Master domain.
 Each JavaEE Container provides its own way to accomplish this task:
   * https://tomcat.apache.org/tomcat-10.0-doc/jdbc-pool.html[Apache Tomcat 10^]
   * 
https://docs.payara.fish/community/docs/Technical%20Documentation/Payara%20Server%20Documentation/Server%20Configuration%20And%20Management/JDBC%20Resource%20Management/JDBC.html[Payara
 Server 6^]
-  * https://docs.wildfly.org/40/Admin_Guide.html#DataSource[Wildfly 40^]
+  * https://docs.wildfly.org/41/Admin_Guide.html#DataSource[Wildfly 41^]
 ****
 
 ==== Apache Tomcat 10
@@ -213,7 +213,7 @@ For better performance under GNU / Linux, do not forget to 
include the system pr
 ....
 ====
 
-==== Wildfly 40
+==== Wildfly 41
 
 Add
 

Reply via email to