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