From 147083d6b450947d0b1ea3def063a42cf07e5a9c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 6 May 2026 15:32:22 +0000 Subject: [PATCH 1/2] Initial plan From 75d80977b3b6232d7bbe61a2d241bfaec598d638 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 6 May 2026 15:34:07 +0000 Subject: [PATCH 2/2] Fix SecurityManager startup deadlock: change repoService to DYNAMIC reference With ReferencePolicy.DYNAMIC, Felix SCR does not hold the component state lock when binding/unbinding the service, eliminating the lock contention that caused "Service factory exception: Could not obtain lock" SEVERE log entries during startup. The volatile keyword is required by the OSGi spec for dynamic references to ensure JMM visibility. Agent-Logs-Url: https://github.com/OpenIdentityPlatform/OpenIDM/sessions/16cad345-7cd4-4aa4-8648-2dcad4f8c0d8 Co-authored-by: vharseko <6818498+vharseko@users.noreply.github.com> --- .../java/org/forgerock/openidm/security/SecurityManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openidm-security/src/main/java/org/forgerock/openidm/security/SecurityManager.java b/openidm-security/src/main/java/org/forgerock/openidm/security/SecurityManager.java index cfc018d277..9cb24f12b4 100644 --- a/openidm-security/src/main/java/org/forgerock/openidm/security/SecurityManager.java +++ b/openidm-security/src/main/java/org/forgerock/openidm/security/SecurityManager.java @@ -54,6 +54,7 @@ import org.osgi.service.component.annotations.ConfigurationPolicy; import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Reference; +import org.osgi.service.component.annotations.ReferencePolicy; import org.osgi.service.component.propertytypes.ServiceDescription; import org.osgi.service.component.propertytypes.ServiceVendor; import org.slf4j.Logger; @@ -82,8 +83,8 @@ public class SecurityManager implements RequestHandler { */ private final static Logger logger = LoggerFactory.getLogger(SecurityManager.class); - @Reference - protected RepositoryService repoService; + @Reference(policy = ReferencePolicy.DYNAMIC) + protected volatile RepositoryService repoService; @Reference private CryptoService cryptoService;