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

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


The following commit(s) were added to refs/heads/main by this push:
     new 22f133e4b4 ARTEMIS-5253 improve referencability of RA ConnectionFactory
22f133e4b4 is described below

commit 22f133e4b4e3080a47f05e2120485e978d1b99f4
Author: Justin Bertram <[email protected]>
AuthorDate: Thu Mar 20 10:25:06 2025 -0500

    ARTEMIS-5253 improve referencability of RA ConnectionFactory
---
 .../artemis/ra/ActiveMQRAConnectionManager.java       | 13 ++++++++++++-
 .../activemq/artemis/ra/ActiveMQResourceAdapter.java  |  6 +++---
 .../activemq/artemis/ra/recovery/RecoveryManager.java | 19 ++++++++++++++++---
 .../ra/referenceable/SerializableObjectRefAddr.java   |  4 +++-
 .../extensions/xa/recovery/ActiveMQRegistry.java      |  4 +++-
 .../extensions/xa/recovery/ActiveMQRegistryImpl.java  |  2 ++
 .../tests/integration/ra/OutgoingConnectionTest.java  |  5 +++++
 7 files changed, 44 insertions(+), 9 deletions(-)

diff --git 
a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAConnectionManager.java
 
b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAConnectionManager.java
index 456cd42a55..9519ab9791 100644
--- 
a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAConnectionManager.java
+++ 
b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAConnectionManager.java
@@ -25,6 +25,9 @@ import javax.resource.spi.ManagedConnectionFactory;
 import org.apache.activemq.artemis.utils.collections.ConcurrentHashSet;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
 import java.lang.invoke.MethodHandles;
 
 /**
@@ -39,7 +42,7 @@ public class ActiveMQRAConnectionManager implements 
ConnectionManager {
       logger.trace("constructor()");
    }
 
-   ConcurrentHashSet<ManagedConnection> connections = new 
ConcurrentHashSet<>();
+   transient ConcurrentHashSet<ManagedConnection> connections = new 
ConcurrentHashSet<>();
 
    /**
     * Allocates a connection
@@ -72,4 +75,12 @@ public class ActiveMQRAConnectionManager implements 
ConnectionManager {
          }
       }
    }
+
+   /*
+    * Java serialization needs this in order to intialize transient fields
+    */
+   private void readObject(ObjectInputStream in) throws IOException, 
ClassNotFoundException {
+      in.defaultReadObject();
+      connections = new ConcurrentHashSet<>();
+   }
 }
diff --git 
a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQResourceAdapter.java
 
b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQResourceAdapter.java
index 9535977e35..1ac9ac71a2 100644
--- 
a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQResourceAdapter.java
+++ 
b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQResourceAdapter.java
@@ -27,6 +27,7 @@ import javax.resource.spi.work.WorkManager;
 import javax.transaction.TransactionSynchronizationRegistry;
 import javax.transaction.xa.XAResource;
 import java.io.Serializable;
+import java.lang.invoke.MethodHandles;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -58,10 +59,9 @@ import 
org.apache.activemq.artemis.ra.inflow.ActiveMQActivation;
 import org.apache.activemq.artemis.ra.inflow.ActiveMQActivationSpec;
 import org.apache.activemq.artemis.ra.recovery.RecoveryManager;
 import 
org.apache.activemq.artemis.service.extensions.xa.recovery.XARecoveryConfig;
+import org.jgroups.JChannel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import java.lang.invoke.MethodHandles;
-import org.jgroups.JChannel;
 
 /**
  * The resource adapter for ActiveMQ
@@ -74,7 +74,7 @@ public class ActiveMQResourceAdapter implements 
ResourceAdapter, Serializable {
 
    public static final String PRODUCT_NAME = "ActiveMQ Artemis";
 
-   private BootstrapContext ctx;
+   private transient BootstrapContext ctx;
 
    private final ActiveMQRAProperties raProperties;
 
diff --git 
a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/recovery/RecoveryManager.java
 
b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/recovery/RecoveryManager.java
index 9548d82670..8bb19f9d08 100644
--- 
a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/recovery/RecoveryManager.java
+++ 
b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/recovery/RecoveryManager.java
@@ -16,6 +16,10 @@
  */
 package org.apache.activemq.artemis.ra.recovery;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.lang.invoke.MethodHandles;
 import java.util.Map;
 import java.util.ServiceLoader;
 import java.util.Set;
@@ -27,17 +31,18 @@ import 
org.apache.activemq.artemis.service.extensions.xa.recovery.XARecoveryConf
 import org.apache.activemq.artemis.utils.collections.ConcurrentHashSet;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import java.lang.invoke.MethodHandles;
 
-public final class RecoveryManager {
+public final class RecoveryManager implements Serializable {
 
    private static final Logger logger = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
+   private static final long serialVersionUID = 8959429342056727955L;
+
    private ActiveMQRegistry registry;
 
    private static final String RESOURCE_RECOVERY_CLASS_NAMES = 
"org.jboss.as.messaging.jms.AS7RecoveryRegistry;" + 
"org.jboss.as.integration.activemq.recovery.AS5RecoveryRegistry";
 
-   private final Set<XARecoveryConfig> resources = new ConcurrentHashSet<>();
+   private transient Set<XARecoveryConfig> resources = new 
ConcurrentHashSet<>();
 
    public void start(final boolean useAutoRecovery) {
       if (useAutoRecovery) {
@@ -105,4 +110,12 @@ public final class RecoveryManager {
    public Set<XARecoveryConfig> getResources() {
       return resources;
    }
+
+   /*
+    * Java serialization needs this in order to intialize transient fields
+    */
+   private void readObject(ObjectInputStream in) throws IOException, 
ClassNotFoundException {
+      in.defaultReadObject();
+      resources = new ConcurrentHashSet<>();
+   }
 }
diff --git 
a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/referenceable/SerializableObjectRefAddr.java
 
b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/referenceable/SerializableObjectRefAddr.java
index 539b7b22f6..a1cbe4250f 100644
--- 
a/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/referenceable/SerializableObjectRefAddr.java
+++ 
b/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/referenceable/SerializableObjectRefAddr.java
@@ -52,7 +52,9 @@ public class SerializableObjectRefAddr extends RefAddr {
 
          bytes = bos.toByteArray();
       } catch (IOException e) {
-         throw new NamingException("Failed to serialize object:" + content + 
", " + e.getMessage());
+         NamingException ne = new NamingException("Failed to serialize object: 
" + content);
+         ne.initCause(e);
+         throw ne;
       }
    }
 
diff --git 
a/artemis-service-extensions/src/main/java/org/apache/activemq/artemis/service/extensions/xa/recovery/ActiveMQRegistry.java
 
b/artemis-service-extensions/src/main/java/org/apache/activemq/artemis/service/extensions/xa/recovery/ActiveMQRegistry.java
index 7a86ae0f54..3441ff3b7d 100644
--- 
a/artemis-service-extensions/src/main/java/org/apache/activemq/artemis/service/extensions/xa/recovery/ActiveMQRegistry.java
+++ 
b/artemis-service-extensions/src/main/java/org/apache/activemq/artemis/service/extensions/xa/recovery/ActiveMQRegistry.java
@@ -17,7 +17,9 @@
 
 package org.apache.activemq.artemis.service.extensions.xa.recovery;
 
-public interface ActiveMQRegistry {
+import java.io.Serializable;
+
+public interface ActiveMQRegistry extends Serializable {
 
    void register(XARecoveryConfig resourceConfig);
 
diff --git 
a/artemis-service-extensions/src/main/java/org/apache/activemq/artemis/service/extensions/xa/recovery/ActiveMQRegistryImpl.java
 
b/artemis-service-extensions/src/main/java/org/apache/activemq/artemis/service/extensions/xa/recovery/ActiveMQRegistryImpl.java
index 83c693a954..56ff11f3c0 100644
--- 
a/artemis-service-extensions/src/main/java/org/apache/activemq/artemis/service/extensions/xa/recovery/ActiveMQRegistryImpl.java
+++ 
b/artemis-service-extensions/src/main/java/org/apache/activemq/artemis/service/extensions/xa/recovery/ActiveMQRegistryImpl.java
@@ -19,6 +19,8 @@ package 
org.apache.activemq.artemis.service.extensions.xa.recovery;
 
 public class ActiveMQRegistryImpl implements ActiveMQRegistry {
 
+   private static final long serialVersionUID = 1287755577474193967L;
+
    private static ActiveMQRegistryImpl instance;
 
    public static ActiveMQRegistry getInstance() {
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/OutgoingConnectionTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/OutgoingConnectionTest.java
index 697bbbc395..f6d6c69bfa 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/OutgoingConnectionTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/OutgoingConnectionTest.java
@@ -116,6 +116,11 @@ public class OutgoingConnectionTest extends 
ActiveMQRATestBase {
       super.tearDown();
    }
 
+   @Test
+   public void testReference() throws Exception {
+      assertNotNull(qraConnectionFactory.getReference());
+   }
+
    @Test
    public void testSimpleMessageSendAndReceiveXA() throws Exception {
       Xid xid = new XidImpl("xa1".getBytes(), 1, 
UUIDGenerator.getInstance().generateStringUUID().getBytes());


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to