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

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


The following commit(s) were added to refs/heads/main by this push:
     new 006d09c450 ARTEMIS-6067 eliminate reflection on Federation policy
006d09c450 is described below

commit 006d09c45090f4ca5a83fa63486bf714afb1a4b0
Author: Clebert Suconic <[email protected]>
AuthorDate: Mon May 18 17:56:10 2026 -0400

    ARTEMIS-6067 eliminate reflection on Federation policy
---
 .../core/config/federation/FederationPolicy.java        | 17 +++++++++++++++++
 .../impl/wireformat/FederationStreamConnectMessage.java | 16 ++++------------
 .../federation/FederationDownstreamDirectTest.java      |  2 +-
 3 files changed, 22 insertions(+), 13 deletions(-)

diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/config/federation/FederationPolicy.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/config/federation/FederationPolicy.java
index d8d9d5eebb..869d93c4a9 100644
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/config/federation/FederationPolicy.java
+++ 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/config/federation/FederationPolicy.java
@@ -20,6 +20,23 @@ import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
 
 public interface FederationPolicy<T> {
 
+   static FederationPolicy<?> getFederationPolicy(String clazz) {
+      switch (clazz) {
+         case 
"org.apache.activemq.artemis.core.config.federation.FederationAddressPolicyConfiguration":
+            return new FederationAddressPolicyConfiguration();
+
+         case 
"org.apache.activemq.artemis.core.config.federation.FederationPolicySet":
+            return new FederationPolicySet();
+
+         case 
"org.apache.activemq.artemis.core.config.federation.FederationQueuePolicyConfiguration":
+            return new FederationQueuePolicyConfiguration();
+
+         default:
+            throw new IllegalArgumentException("unknown " + clazz);
+      }
+   }
+
+
    String getName();
 
    T setName(String name);
diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/FederationStreamConnectMessage.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/FederationStreamConnectMessage.java
index e92968187a..226f9a09ba 100644
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/FederationStreamConnectMessage.java
+++ 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/FederationStreamConnectMessage.java
@@ -26,13 +26,12 @@ import 
org.apache.activemq.artemis.core.config.federation.FederationPolicy;
 import 
org.apache.activemq.artemis.core.config.federation.FederationStreamConfiguration;
 import 
org.apache.activemq.artemis.core.config.federation.FederationTransformerConfiguration;
 import org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl;
-import org.apache.activemq.artemis.utils.ClassloadingUtil;
 
 public abstract class FederationStreamConnectMessage<T extends 
FederationStreamConfiguration> extends PacketImpl {
 
    private String name;
    private Credentials credentials;
-   private Map<String, FederationPolicy> federationPolicyMap = new HashMap<>();
+   private Map<String, FederationPolicy<?>> federationPolicyMap = new 
HashMap<>();
    private Map<String, FederationTransformerConfiguration> 
transformerConfigurationMap = new HashMap<>();
    private T streamConfiguration;
 
@@ -65,12 +64,12 @@ public abstract class FederationStreamConnectMessage<T 
extends FederationStreamC
       this.streamConfiguration = streamConfiguration;
    }
 
-   public Map<String, FederationPolicy> getFederationPolicyMap() {
+   public Map<String, FederationPolicy<?>> getFederationPolicyMap() {
       return federationPolicyMap;
    }
 
    public void setFederationPolicyMap(
-      Map<String, FederationPolicy> federationPolicyMap) {
+      Map<String, FederationPolicy<?>> federationPolicyMap) {
       this.federationPolicyMap = federationPolicyMap;
    }
 
@@ -129,7 +128,7 @@ public abstract class FederationStreamConnectMessage<T 
extends FederationStreamC
       int policySize = buffer.readInt();
       for (int i = 0; i < policySize; i++) {
          String clazz = buffer.readString();
-         FederationPolicy policy = getFederationPolicy(clazz);
+         FederationPolicy<?> policy = 
FederationPolicy.getFederationPolicy(clazz);
          policy.decode(buffer);
          federationPolicyMap.put(policy.getName(), policy);
       }
@@ -147,11 +146,4 @@ public abstract class FederationStreamConnectMessage<T 
extends FederationStreamC
 
    protected abstract T decodeStreamConfiguration(ActiveMQBuffer buffer);
 
-   private FederationPolicy getFederationPolicy(String clazz) {
-      try {
-         return (FederationPolicy) 
ClassloadingUtil.getInstanceWithTypeCheck(clazz, FederationPolicy.class, 
this.getClass().getClassLoader());
-      } catch (Exception e) {
-         throw new IllegalStateException("Error. Unable to instantiate 
FederationPolicy: " + e.getMessage(), e);
-      }
-   }
 }
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/federation/FederationDownstreamDirectTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/federation/FederationDownstreamDirectTest.java
index 32c1cb47a4..288c60e1c2 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/federation/FederationDownstreamDirectTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/federation/FederationDownstreamDirectTest.java
@@ -153,7 +153,7 @@ public class FederationDownstreamDirectTest extends 
ActiveMQTestBase {
       FederationDownstreamConnectMessage msg = new 
FederationDownstreamConnectMessage();
       msg.setName(name);
 
-      Map<String, FederationPolicy> policyMap = new HashMap<>();
+      Map<String, FederationPolicy<?>> policyMap = new HashMap<>();
       policyMap.put(policyConfigName, new 
FederationQueuePolicyConfiguration().setName(policyConfigName).addInclude(new 
FederationQueuePolicyConfiguration.Matcher().setQueueMatch("#").setAddressMatch("#")));
       policyMap.put(policySetName, new 
FederationPolicySet().setName(policySetName).addPolicyRef(policyConfigName));
       msg.setFederationPolicyMap(policyMap);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to