You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2022/01/29 19:59:43 UTC
[logging-log4j2] branch master updated: Revert TypeConverterRegistry usage of BeanManager
This is an automated email from the ASF dual-hosted git repository.
mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/master by this push:
new 9c127e0 Revert TypeConverterRegistry usage of BeanManager
9c127e0 is described below
commit 9c127e097de8d12e66a016b485e82c2c787c8a2b
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Sat Jan 29 13:59:19 2022 -0600
Revert TypeConverterRegistry usage of BeanManager
This seems to be causing a race condition which causes a test failure.
Signed-off-by: Matt Sicker <ma...@apache.org>
---
.../plugins/convert/TypeConverterRegistry.java | 52 +++++++---------------
1 file changed, 16 insertions(+), 36 deletions(-)
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistry.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistry.java
index c2ecd8e..d246727 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistry.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistry.java
@@ -17,26 +17,22 @@
package org.apache.logging.log4j.plugins.convert;
import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.plugins.di.model.PluginSource;
-import org.apache.logging.log4j.plugins.spi.Bean;
-import org.apache.logging.log4j.plugins.spi.BeanManager;
import org.apache.logging.log4j.plugins.util.LazyValue;
-import org.apache.logging.log4j.plugins.util.PluginLoader;
+import org.apache.logging.log4j.plugins.util.PluginManager;
+import org.apache.logging.log4j.plugins.util.PluginType;
import org.apache.logging.log4j.plugins.util.TypeUtil;
import org.apache.logging.log4j.plugins.util.Value;
import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.util.LoaderUtil;
+import org.apache.logging.log4j.util.ReflectionUtil;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;
-import java.util.Set;
import java.util.UnknownFormatConversionException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import java.util.stream.Collectors;
/**
* Registry for {@link TypeConverter} plugins.
@@ -46,7 +42,6 @@ import java.util.stream.Collectors;
public class TypeConverterRegistry {
private static final Logger LOGGER = StatusLogger.getLogger();
- private static final String DEFAULT_CONVERTERS_PACKAGE = "org.apache.logging.log4j.core.config.plugins.convert";
private static final Value<TypeConverterRegistry> INSTANCE = LazyValue.forSupplier(TypeConverterRegistry::new);
private static final Object INSTANCE_LOCK = new Object();
@@ -105,37 +100,22 @@ public class TypeConverterRegistry {
private TypeConverterRegistry() {
LOGGER.trace("TypeConverterRegistry initializing.");
- // TODO: this should eventually be refactored to load TypeConverter instances on demand via BeanManager
- // (can be done after AbstractConfigurationBinder is removed; can then combine TypeConverters with rest of beans)
- loadKnownTypeConverters();
+ final PluginManager manager = new PluginManager(TypeConverters.CATEGORY);
+ manager.collectPlugins();
+ loadKnownTypeConverters(manager.getPlugins().values());
registerPrimitiveTypes();
}
- private void loadKnownTypeConverters() {
- final BeanManager beanManager = BeanManager.getInstance();
- final Set<PluginSource> typeConverterPlugins = PluginLoader.loadPluginSourcesFromMainClassLoader()
- .stream()
- .filter(pluginSource -> pluginSource.getImplementedInterfaces().contains(TypeConverter.class))
- .collect(Collectors.toSet());
- final Collection<Bean<?>> typeConverterBeans;
- if (typeConverterPlugins.isEmpty()) {
- // retry with a classpath scan
- LOGGER.warn("Unable to load PluginModule metadata; falling back to scan of classpath");
- typeConverterBeans = beanManager.scanAndLoadBeans(LoaderUtil.getClassLoader(), DEFAULT_CONVERTERS_PACKAGE)
- .stream()
- .filter(bean -> bean.hasMatchingType(TypeConverter.class))
- .collect(Collectors.toSet());
- } else {
- typeConverterBeans = beanManager.loadBeansFromPluginSources(typeConverterPlugins);
- }
- beanManager.validateBeans(typeConverterBeans);
- final var initializationContext = beanManager.createInitializationContext(null);
- for (final Bean<?> typeConverterBean : typeConverterBeans) {
- final Bean<TypeConverter<?>> bean = TypeUtil.cast(typeConverterBean);
- final Class<? extends TypeConverter<?>> pluginClass = TypeUtil.cast(bean.getDeclaringClass());
- final Type conversionType = getTypeConverterSupportedType(pluginClass);
- final TypeConverter<?> converter = beanManager.getValue(bean, initializationContext);
- registerConverter(conversionType, converter);
+ private void loadKnownTypeConverters(final Collection<PluginType<?>> knownTypes) {
+ for (final PluginType<?> knownType : knownTypes) {
+ final Class<?> clazz = knownType.getPluginClass();
+ if (TypeConverter.class.isAssignableFrom(clazz)) {
+ @SuppressWarnings("rawtypes") final Class<? extends TypeConverter> pluginClass =
+ clazz.asSubclass(TypeConverter.class);
+ final Type conversionType = getTypeConverterSupportedType(pluginClass);
+ final TypeConverter<?> converter = ReflectionUtil.instantiate(pluginClass);
+ registerConverter(conversionType, converter);
+ }
}
}