You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2021/05/21 03:55:53 UTC
[syncope] branch 2_1_X updated: [SYNCOPE-1635] Use singleton bean
for each domain for each rule with conf (#264)
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_1_X by this push:
new 3ca3354 [SYNCOPE-1635] Use singleton bean for each domain for each rule with conf (#264)
3ca3354 is described below
commit 3ca3354a89fe0fed1476c14ae747c98fb8a85aa7
Author: DmitriyBrashevets <47...@users.noreply.github.com>
AuthorDate: Fri May 21 06:55:46 2021 +0300
[SYNCOPE-1635] Use singleton bean for each domain for each rule with conf (#264)
---
.../syncope/core/spring/ImplementationManager.java | 39 +++++++++++-----------
1 file changed, 20 insertions(+), 19 deletions(-)
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/ImplementationManager.java b/core/spring/src/main/java/org/apache/syncope/core/spring/ImplementationManager.java
index f1481b3..6b637d8 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/ImplementationManager.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/ImplementationManager.java
@@ -18,11 +18,11 @@
*/
package org.apache.syncope.core.spring;
-import groovy.lang.GroovyClassLoader;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
+import groovy.lang.GroovyClassLoader;
import org.apache.syncope.common.lib.policy.AccountRuleConf;
import org.apache.syncope.common.lib.policy.PasswordRuleConf;
import org.apache.syncope.common.lib.policy.PullCorrelationRuleConf;
@@ -31,14 +31,16 @@ import org.apache.syncope.common.lib.report.ReportletConf;
import org.apache.syncope.core.persistence.api.ImplementationLookup;
import org.apache.syncope.core.persistence.api.dao.AccountRule;
import org.apache.syncope.core.persistence.api.dao.PasswordRule;
-import org.apache.syncope.core.persistence.api.dao.Reportlet;
-import org.apache.syncope.core.persistence.api.entity.Implementation;
import org.apache.syncope.core.persistence.api.dao.PullCorrelationRule;
import org.apache.syncope.core.persistence.api.dao.PushCorrelationRule;
+import org.apache.syncope.core.persistence.api.dao.Reportlet;
+import org.apache.syncope.core.persistence.api.entity.Implementation;
import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
+import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
public final class ImplementationManager {
@@ -217,27 +219,26 @@ public final class ImplementationManager {
@SuppressWarnings("unchecked")
private static <T> T buildJavaWithConf(final Class<T> clazz) {
- T bean = null;
-
if (clazz != null) {
- if (ApplicationContextProvider.getBeanFactory().containsSingleton(clazz.getName())) {
- bean = (T) ApplicationContextProvider.getBeanFactory().getSingleton(clazz.getName());
- } else {
- try {
- bean = (T) ApplicationContextProvider.getBeanFactory().
- createBean(clazz, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
- ApplicationContextProvider.getBeanFactory().registerSingleton(clazz.getName(), bean);
- } catch (IllegalStateException e) {
- LOG.debug("While attempting to register {}", clazz.getName(), e);
+ String domainableBeanNameWithConf = AuthContextUtils.getDomain() + clazz.getName();
+ DefaultListableBeanFactory beanFactory = ApplicationContextProvider.getBeanFactory();
+
+ if (beanFactory.containsSingleton(domainableBeanNameWithConf)) {
+ return (T) beanFactory.getSingleton(domainableBeanNameWithConf);
+ }
- // if this exception was raised, it means another bean for same name is already registered,
- // revert to it
- bean = (T) ApplicationContextProvider.getBeanFactory().getSingleton(clazz.getName());
+ synchronized (beanFactory.getSingletonMutex()) {
+ if (beanFactory.containsSingleton(domainableBeanNameWithConf)) {
+ return (T) beanFactory.getSingleton(domainableBeanNameWithConf);
+ } else {
+ T bean = (T) beanFactory.
+ createBean(clazz, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
+ beanFactory.registerSingleton(domainableBeanNameWithConf, bean);
+ return bean;
}
}
}
-
- return bean;
+ return null;
}
public static Class<?> purge(final String implementation) {