This is an automated email from the ASF dual-hosted git repository. struberg pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/deltaspike.git
commit 422a78a3c1c25b8040fa4516dfa080da0baa7ed8 Author: Mark Struberg <[email protected]> AuthorDate: Wed Dec 8 17:48:43 2021 +0100 DELTASPIKE-1444 make BeanConverter a non-static factory otherwise we might create mem leaks, as rightfully noted by rmannibucau --- .../org/apache/deltaspike/core/impl/config/ConfigImpl.java | 9 +++++++++ .../deltaspike/core/impl/config/TypedResolverImpl.java | 3 +-- .../{BeanConverter.java => BeanConverterFactory.java} | 13 ++++--------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigImpl.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigImpl.java index 93729d3..9b883d1 100644 --- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigImpl.java +++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigImpl.java @@ -21,6 +21,7 @@ package org.apache.deltaspike.core.impl.config; import org.apache.deltaspike.core.api.config.Config; import org.apache.deltaspike.core.api.config.ConfigResolver; import org.apache.deltaspike.core.api.config.ConfigSnapshot; +import org.apache.deltaspike.core.impl.config.converter.BeanConverterFactory; import org.apache.deltaspike.core.spi.config.ConfigFilter; import org.apache.deltaspike.core.spi.config.ConfigSource; import org.apache.deltaspike.core.spi.config.ConfigSourceProvider; @@ -58,9 +59,12 @@ public class ConfigImpl implements Config // volatile to a.) make the read/write behave atomic and b.) guarantee multi-thread safety private volatile long lastChanged = 0; + private BeanConverterFactory beanConverter; + public ConfigImpl(ClassLoader classLoader) { this.classLoader = classLoader; + this.beanConverter = new BeanConverterFactory(); } /** @@ -135,6 +139,11 @@ public class ConfigImpl implements Config return configSources; } + public BeanConverterFactory getBeanConverter() + { + return beanConverter; + } + @Override public ConfigSnapshot snapshotFor(ConfigResolver.TypedResolver<?>... typedResolvers) { diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/TypedResolverImpl.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/TypedResolverImpl.java index c4642b9..3f7441e 100644 --- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/TypedResolverImpl.java +++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/TypedResolverImpl.java @@ -22,7 +22,6 @@ import org.apache.deltaspike.core.api.config.Config; import org.apache.deltaspike.core.api.config.ConfigResolver; import org.apache.deltaspike.core.api.config.ConfigSnapshot; import org.apache.deltaspike.core.api.projectstage.ProjectStage; -import org.apache.deltaspike.core.impl.config.converter.BeanConverter; import org.apache.deltaspike.core.spi.config.ConfigSource; import org.apache.deltaspike.core.util.ClassUtils; import org.apache.deltaspike.core.util.ExceptionUtils; @@ -132,7 +131,7 @@ public class TypedResolverImpl<T> implements ConfigResolver.UntypedResolver<T> @Override public <N> ConfigResolver.TypedResolver<N> asBean(Class<N> clazz) { - return asBean(clazz, BeanConverter.detectConverter(clazz)); + return asBean(clazz, config.getBeanConverter().detectConverter(clazz)); } @Override diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/converter/BeanConverter.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/converter/BeanConverterFactory.java similarity index 86% rename from deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/converter/BeanConverter.java rename to deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/converter/BeanConverterFactory.java index 6efb3d1..de501f0 100644 --- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/converter/BeanConverter.java +++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/converter/BeanConverterFactory.java @@ -29,22 +29,17 @@ import java.util.stream.Collectors; import org.apache.deltaspike.core.api.config.Config; /** - * @author <a href="mailto:[email protected]">Mark Struberg</a> + * A factory for bean converters. */ -public final class BeanConverter +public final class BeanConverterFactory { - private static final ConcurrentMap<Class<?>, BiFunction<Config, String, ?>> BEAN_CONVERTER = new ConcurrentHashMap<>(); - - private BeanConverter() - { - // private utility class ct - } + private final ConcurrentMap<Class<?>, BiFunction<Config, String, ?>> BEAN_CONVERTER = new ConcurrentHashMap<>(); /** * Determine the bean converter function to be used according to the rules defined in * {@link org.apache.deltaspike.core.api.config.ConfigResolver.UntypedResolver#asBean(Class)} */ - public static <N> BiFunction<Config, String, N> detectConverter(Class<N> clazz) + public <N> BiFunction<Config, String, N> detectConverter(Class<N> clazz) { BiFunction<Config, String, N> beanConverter = (BiFunction<Config, String, N>) BEAN_CONVERTER.get(clazz); if (beanConverter == null)
