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