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)

Reply via email to