This is an automated email from the ASF dual-hosted git repository.

gtully pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git

commit 2f77ca2abb65f958eac24f309e6f733bf8c6a363
Author: Gary Tully <gary.tu...@gmail.com>
AuthorDate: Tue May 7 15:21:15 2024 +0100

    ARTEMIS-4763 support .class values for non string attributes, properties 
config of metrics plugins
---
 .../core/config/impl/ConfigurationImpl.java        | 32 ++++++++++++----------
 .../core/server/metrics/ActiveMQMetricsPlugin.java |  4 +++
 .../core/config/impl/ConfigurationImplTest.java    | 31 ++++++++++++++++++++-
 3 files changed, 52 insertions(+), 15 deletions(-)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
index b99e7a53ac..a8a0bc212c 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
@@ -75,7 +75,6 @@ import 
org.apache.activemq.artemis.core.config.FederationConfiguration;
 import org.apache.activemq.artemis.core.config.HAPolicyConfiguration;
 import org.apache.activemq.artemis.core.config.MetricsConfiguration;
 import org.apache.activemq.artemis.core.config.StoreConfiguration;
-import org.apache.activemq.artemis.core.config.TransformerConfiguration;
 import org.apache.activemq.artemis.core.config.WildcardConfiguration;
 import 
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectConfiguration;
 import 
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederationBrokerPlugin;
@@ -797,7 +796,18 @@ public class ConfigurationImpl implements Configuration, 
Serializable {
                   }
                } else {                             // Value into scalar
                   if (value instanceof String) {
-                     newValue = getConvertUtils().convert((String) value, 
type);
+                     String possibleDotClassValue = (String)value;
+                     if (type != String.class && 
possibleDotClassValue.endsWith(DOT_CLASS)) {
+                        final String clazzName = 
possibleDotClassValue.substring(0, possibleDotClassValue.length() - 
DOT_CLASS.length());
+                        try {
+                           Class clazzType = 
this.getClass().getClassLoader().loadClass(clazzName);
+                           newValue = 
clazzType.getDeclaredConstructor().newInstance();
+                        } catch (Exception e) {
+                           throw new InvocationTargetException(e, " for dot 
class value: " + possibleDotClassValue + ", on: " + bean);
+                        }
+                     } else {
+                        newValue = 
getConvertUtils().convert(possibleDotClassValue, type);
+                     }
                   } else if (value instanceof String[]) {
                      newValue = getConvertUtils().convert(((String[]) 
value)[0], type);
                   } else {
@@ -834,14 +844,6 @@ public class ConfigurationImpl implements Configuration, 
Serializable {
          }
       }, NamedPropertyConfiguration.class);
 
-      beanUtils.getConvertUtils().register(new Converter() {
-         @Override
-         public <T> T convert(Class<T> type, Object value) {
-            TransformerConfiguration instance = new 
TransformerConfiguration(value.toString());
-            return (T) instance;
-         }
-      }, TransformerConfiguration.class);
-
       beanUtils.getConvertUtils().register(new Converter() {
          @Override
          public <T> T convert(Class<T> type, Object value) {
@@ -880,11 +882,13 @@ public class ConfigurationImpl implements Configuration, 
Serializable {
          public <T> T convert(Class<T> type, Object value) {
             Map convertedValue = new HashMap();
             for (String entry : value.toString().split(",")) {
-               String[] kv = entry.split("=");
-               if (2 != kv.length) {
-                  throw new IllegalArgumentException("map value " + value + " 
not in k=v format");
+               if (!entry.isBlank()) {
+                  String[] kv = entry.split("=");
+                  if (2 != kv.length) {
+                     throw new IllegalArgumentException("map value " + value + 
" not in k=v format");
+                  }
+                  convertedValue.put(kv[0], kv[1]);
                }
-               convertedValue.put(kv[0], kv[1]);
             }
             return (T) convertedValue;
          }
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/metrics/ActiveMQMetricsPlugin.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/metrics/ActiveMQMetricsPlugin.java
index 9497f127d7..f8fcacc20e 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/metrics/ActiveMQMetricsPlugin.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/metrics/ActiveMQMetricsPlugin.java
@@ -35,4 +35,8 @@ public interface ActiveMQMetricsPlugin extends Serializable {
     */
    default void registered(ActiveMQServer server) {
    }
+
+   default void setInit(Map<String, String> options) {
+      init(options);
+   }
 }
diff --git 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
index 9a4bb9b8b0..8280afacae 100644
--- 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
+++ 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
@@ -2078,12 +2078,14 @@ public class ConfigurationImplTest extends 
ServerTestBase {
       properties.put("divertConfigurations.divert1.routingName", routingName);
       properties.put("divertConfigurations.divert1.address", address);
       properties.put("divertConfigurations.divert1.forwardingAddress", 
forwardAddress);
-      properties.put("divertConfigurations.divert1.transformerConfiguration", 
className);
+      
properties.put("divertConfigurations.divert1.transformerConfiguration.className",
 className);
       
properties.put("divertConfigurations.divert1.transformerConfiguration.properties.a",
 "va");
       
properties.put("divertConfigurations.divert1.transformerConfiguration.properties.b",
 "vb");
 
       configuration.parsePrefixedProperties(properties, null);
 
+      Assert.assertTrue(configuration.getStatus(), 
configuration.getStatus().contains("\"errors\":[]"));
+
       Assert.assertEquals(1, configuration.getDivertConfigurations().size());
       Assert.assertEquals(routingName, 
configuration.getDivertConfigurations().get(0).getRoutingName());
       Assert.assertEquals(address, 
configuration.getDivertConfigurations().get(0).getAddress());
@@ -2590,6 +2592,33 @@ public class ConfigurationImplTest extends 
ServerTestBase {
       Assert.assertEquals("netty-.*", 
((ConnectionPeriodicExpiryPlugin)(configuration.getBrokerPlugins().get(0))).getAcceptorMatchRegex());
    }
 
+   @Test
+   public void testMetricsPluginInit() throws Exception {
+
+      final ConfigurationImpl configuration = new ConfigurationImpl();
+
+      Properties insertionOrderedProperties = new 
ConfigurationImpl.InsertionOrderedProperties();
+      
insertionOrderedProperties.put("metricsConfiguration.plugin","org.apache.activemq.artemis.core.config.impl.FileConfigurationTest.FakeMetricPlugin.class");
+
+      configuration.parsePrefixedProperties(insertionOrderedProperties, null);
+      Assert.assertFalse(configuration.getStatus(), 
configuration.getStatus().contains("\"errors\":[]"));
+      Assert.assertTrue(configuration.getStatus().contains("NotFound"));
+      
Assert.assertTrue(configuration.getStatus().contains("FakeMetricPlugin"));
+
+      // fix the typo error
+      
insertionOrderedProperties.put("metricsConfiguration.plugin","org.apache.activemq.artemis.core.config.impl.FileConfigurationTest$FakeMetricPlugin.class");
+      insertionOrderedProperties.put("metricsConfiguration.plugin.init","");
+      insertionOrderedProperties.put("metricsConfiguration.jvmMemory", 
"false");
+
+      configuration.parsePrefixedProperties(insertionOrderedProperties, null);
+
+      Assert.assertTrue(configuration.getStatus(), 
configuration.getStatus().contains("\"errors\":[]"));
+
+      Assert.assertNotNull(configuration.getMetricsConfiguration());
+      
Assert.assertNotNull(configuration.getMetricsConfiguration().getPlugin());
+      
Assert.assertNull(configuration.getMetricsConfiguration().getPlugin().getRegistry());
+   }
+
    @Test
    public void testSecuritySettingPluginFromBrokerProperties() throws 
Exception {
 

Reply via email to