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 0277c6498e ARTEMIS-4914 clarify docs on core + client ID
0277c6498e is described below
commit 0277c6498ee848ab5a4cb0f3bd4fbcbe4f410785
Author: Justin Bertram <[email protected]>
AuthorDate: Tue Jul 9 10:33:53 2024 -0500
ARTEMIS-4914 clarify docs on core + client ID
This commit also adds a couple of tests to verify the documented
behavior works.
---
.../view/predicate/ActiveMQFilterPredicate.java | 2 +-
docs/user-manual/core.adoc | 15 ++-
.../management/ActiveMQServerControlTest.java | 103 ++++++++++++++++++---
3 files changed, 99 insertions(+), 21 deletions(-)
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ActiveMQFilterPredicate.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ActiveMQFilterPredicate.java
index 3b1bcfae3e..80a373fb44 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ActiveMQFilterPredicate.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ActiveMQFilterPredicate.java
@@ -22,7 +22,7 @@ import java.util.function.Predicate;
public class ActiveMQFilterPredicate<T> implements Predicate<T> {
- enum Operation {
+ public enum Operation {
CONTAINS, NOT_CONTAINS, EQUALS, GREATER_THAN, LESS_THAN;
}
diff --git a/docs/user-manual/core.adoc b/docs/user-manual/core.adoc
index b0ff048e14..598b29819c 100644
--- a/docs/user-manual/core.adoc
+++ b/docs/user-manual/core.adoc
@@ -74,21 +74,20 @@ Blocking on each messages sent is costly since it requires
a network round trip
By not blocking and receiving send acknowledgements asynchronously you can
create true end to end asynchronous systems which is not possible using the
standard JMS API.
For more information on this advanced feature please see the section
xref:send-guarantees.adoc#guarantees-of-sends-and-commits[Guarantees of sends
and commits].
-==== Identifying your session for management and debugging
+==== Identifying your client application for management and debugging
-Assigning IDs to your core sessions can help you with monitoring and debugging
the cluster using the
xref:management-console.adoc#management-console[management console].
+Assigning IDs to your core session can help you with monitoring and debugging
using the xref:management-console.adoc#management-console[management console],
e.g.:
[,java]
----
- ClientSession session;
- // ...
- session.addMetaData(ClientSession.JMS_SESSION_IDENTIFIER_PROPERTY,
"jms-client-id");
- session.addMetaData("jms-client-id", "my-session");
+ServerLocator locator = ...
+ClientSessionFactory csf = createSessionFactory(locator);
+ClientSession session = csf.createSession(null, null, false, true, true,
locator.isPreAcknowledge(), locator.getAckBatchSize(), "my-client-id");
----
-Such ID will then appear in the *Client ID* column under the *Connections*,
*Consumers* and *Producers* tabs.
+The value `my-client-id` will then appear in the *Client ID* column under the
*Connections*, *Consumers*, and *Producers* tabs.
-If you are using the JMS API, the `setClientID` would give you the same effect.
+If you are using the JMS API then `setClientID` would give you the same effect.
=== ClientConsumer
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
index a37e613335..62b6e67a19 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
@@ -16,16 +16,6 @@
*/
package org.apache.activemq.artemis.tests.integration.management;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertSame;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-import static org.junit.jupiter.api.Assumptions.assumeFalse;
-
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageConsumer;
@@ -36,6 +26,7 @@ import javax.jms.Topic;
import javax.jms.TopicSubscriber;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
+import java.lang.invoke.MethodHandles;
import java.lang.reflect.Field;
import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;
@@ -95,6 +86,7 @@ import
org.apache.activemq.artemis.core.management.impl.view.ConnectionField;
import org.apache.activemq.artemis.core.management.impl.view.ConsumerField;
import org.apache.activemq.artemis.core.management.impl.view.ProducerField;
import org.apache.activemq.artemis.core.management.impl.view.SessionField;
+import
org.apache.activemq.artemis.core.management.impl.view.predicate.ActiveMQFilterPredicate;
import
org.apache.activemq.artemis.core.messagecounter.impl.MessageCounterManagerImpl;
import org.apache.activemq.artemis.core.persistence.OperationContext;
import
org.apache.activemq.artemis.core.persistence.config.PersistedDivertConfiguration;
@@ -144,7 +136,16 @@ import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.lang.invoke.MethodHandles;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
@ExtendWith(ParameterizedTestExtension.class)
public class ActiveMQServerControlTest extends ManagementTestBase {
@@ -4541,6 +4542,84 @@ public class ActiveMQServerControlTest extends
ManagementTestBase {
}
}
+ @TestTemplate
+ public void testListConnectionsCoreClientID() throws Exception {
+ final String clientId = RandomUtil.randomString();
+ SimpleString queueName1 = SimpleString.of("my_queue_one");
+ SimpleString addressName1 = SimpleString.of("my_address_one");
+
+ ActiveMQServerControl serverControl = createManagementControl();
+
+ server.addAddressInfo(new AddressInfo(addressName1,
RoutingType.ANYCAST));
+ if (legacyCreateQueue) {
+ server.createQueue(addressName1, RoutingType.ANYCAST, queueName1,
null, false, false);
+ } else {
+
server.createQueue(QueueConfiguration.of(queueName1).setAddress(addressName1).setRoutingType(RoutingType.ANYCAST).setDurable(false));
+ }
+
+ ClientSessionFactoryImpl csf = null;
+
+ try (ServerLocator locator = createInVMNonHALocator()) {
+ csf = (ClientSessionFactoryImpl) createSessionFactory(locator);
+ csf.createSession(null, null, false, true, true,
locator.isPreAcknowledge(), locator.getAckBatchSize(), clientId);
+
+ String filterString =
createJsonFilter(ConnectionField.CLIENT_ID.getName(),
ActiveMQFilterPredicate.Operation.EQUALS.toString(), clientId);
+
+ String connectionsAsJsonString =
serverControl.listConnections(filterString, 1, 50);
+ JsonObject connectionsAsJsonObject =
JsonUtil.readJsonObject(connectionsAsJsonString);
+ JsonArray array = (JsonArray) connectionsAsJsonObject.get("data");
+
+ assertEquals(1, array.size(), "number of connections returned from
query");
+ JsonObject jsonConnection = array.getJsonObject(0);
+
+ assertEquals(clientId,
jsonConnection.getString(ConnectionField.CLIENT_ID.getName()));
+ } finally {
+ if (csf != null) {
+ csf.close();
+ }
+ }
+ }
+
+ @TestTemplate
+ public void testListConnectionsCoreClientIDLegacy() throws Exception {
+ final String clientId = RandomUtil.randomString();
+ SimpleString queueName1 = SimpleString.of("my_queue_one");
+ SimpleString addressName1 = SimpleString.of("my_address_one");
+
+ ActiveMQServerControl serverControl = createManagementControl();
+
+ server.addAddressInfo(new AddressInfo(addressName1,
RoutingType.ANYCAST));
+ if (legacyCreateQueue) {
+ server.createQueue(addressName1, RoutingType.ANYCAST, queueName1,
null, false, false);
+ } else {
+
server.createQueue(QueueConfiguration.of(queueName1).setAddress(addressName1).setRoutingType(RoutingType.ANYCAST).setDurable(false));
+ }
+
+ ClientSessionFactoryImpl csf = null;
+
+ try (ServerLocator locator = createInVMNonHALocator()) {
+ csf = (ClientSessionFactoryImpl) createSessionFactory(locator);
+ ClientSession session = csf.createSession();
+
session.addUniqueMetaData(ClientSession.JMS_SESSION_IDENTIFIER_PROPERTY, "");
+
session.addUniqueMetaData(ClientSession.JMS_SESSION_CLIENT_ID_PROPERTY,
clientId);
+
+ String filterString =
createJsonFilter(ConnectionField.CLIENT_ID.getName(),
ActiveMQFilterPredicate.Operation.EQUALS.toString(), clientId);
+
+ String connectionsAsJsonString =
serverControl.listConnections(filterString, 1, 50);
+ JsonObject connectionsAsJsonObject =
JsonUtil.readJsonObject(connectionsAsJsonString);
+ JsonArray array = (JsonArray) connectionsAsJsonObject.get("data");
+
+ assertEquals(1, array.size(), "number of connections returned from
query");
+ JsonObject jsonConnection = array.getJsonObject(0);
+
+ assertEquals(clientId,
jsonConnection.getString(ConnectionField.CLIENT_ID.getName()));
+ } finally {
+ if (csf != null) {
+ csf.close();
+ }
+ }
+ }
+
@TestTemplate
public void testListConnectionsJmsClientID() throws Exception {
final String clientId = RandomUtil.randomString();
@@ -4550,7 +4629,7 @@ public class ActiveMQServerControlTest extends
ManagementTestBase {
ConnectionFactory cf = new ActiveMQConnectionFactory("vm://0");
try (Connection c = cf.createConnection()) {
c.setClientID(clientId);
- String filterString =
createJsonFilter(ConnectionField.CLIENT_ID.getName(), "EQUALS", clientId);
+ String filterString =
createJsonFilter(ConnectionField.CLIENT_ID.getName(),
ActiveMQFilterPredicate.Operation.EQUALS.toString(), clientId);
String connectionsAsJsonString =
serverControl.listConnections(filterString, 1, 50);
JsonObject connectionsAsJsonObject =
JsonUtil.readJsonObject(connectionsAsJsonString);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact