org.slf4j
- slf4j-log4j12
- ${slfj.version}
+ slf4j-api
+ ${slf4j-api.version}
+
+ org.apache.logging.log4j
+ log4j-slf4j2-impl
+ ${log4j-slf4j2-impl.version}
+
+
+ org.apache.logging.log4j
+ log4j-core
+ ${log4j-slf4j2-impl.version}
+
+
net.sf.jopt-simple
jopt-simple
diff --git a/broker/src/test/java/util/Broker.java b/broker/src/test/java/util/Broker.java
index f0fbbb33..ad20e8d0 100644
--- a/broker/src/test/java/util/Broker.java
+++ b/broker/src/test/java/util/Broker.java
@@ -20,18 +20,21 @@
package util;
import org.apache.activemq.artemis.api.core.SimpleString;
+import org.apache.activemq.artemis.api.core.management.AddressControl;
+import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.config.ConfigurationUtils;
import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ;
import org.apache.activemq.artemis.spi.core.remoting.Acceptor;
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.SimpleLayout;
import org.junit.jupiter.api.extension.ExtensionContext;
+import javax.management.MBeanServer;
+import javax.management.MBeanServerInvocationHandler;
+import javax.management.ObjectName;
import java.io.IOException;
import java.io.InputStream;
+import java.lang.management.ManagementFactory;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.file.Files;
@@ -41,6 +44,8 @@
// https://activemq.apache.org/artemis/docs/latest/embedding-activemq.html
public class Broker implements AutoCloseable, ExtensionContext.Store.CloseableResource {
+ // Use same MBeanServer instance that broker is using (don't create new)
+ private final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
public Path tempDir;
public EmbeddedActiveMQ embeddedBroker = new EmbeddedActiveMQ();
public Configuration configuration = new ConfigurationImpl();
@@ -89,11 +94,7 @@ public void close() {
* Configures a log4j appender if there isn't any, so that log messages flood the stdout
*/
public static void configureLogging() {
- if (LogManager.getRootLogger().getAllAppenders().hasMoreElements()) {
- return;
- }
- ConsoleAppender consoleAppender = new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT);
- LogManager.getRootLogger().addAppender(consoleAppender);
+ throw new UnsupportedOperationException("Not implemented yet.");
}
/**
@@ -176,4 +177,20 @@ private int findRandomAvailablePortOnAllLocalInterfaces() throws IOException {
return socket.getLocalPort();
}
}
+
+ protected Object createProxy(final ObjectName objectName,
+ final Class mbeanInterface,
+ final MBeanServer mbeanServer) {
+ return MBeanServerInvocationHandler.newProxyInstance(mbeanServer, objectName, mbeanInterface, false);
+ }
+
+ public AddressControl makeAddressControl(String queueName) {
+ SimpleString address = SimpleString.toSimpleString(queueName);
+ try {
+ AddressControl addressControl = (AddressControl) createProxy(ObjectNameBuilder.DEFAULT.getAddressObjectName(address), AddressControl.class, mBeanServer);
+ return addressControl;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
}
diff --git a/build_java.sh b/build_java.sh
new file mode 100755
index 00000000..55cc8001
--- /dev/null
+++ b/build_java.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -Eeuo pipefail
+set -x
+
+mvn -B package --file pom.xml -DskipTests
diff --git a/cli-activemq-jmx/pom.xml b/cli-activemq-jmx/pom.xml
index afa8c8c0..daad85ef 100644
--- a/cli-activemq-jmx/pom.xml
+++ b/cli-activemq-jmx/pom.xml
@@ -25,16 +25,16 @@
5.11.0.redhat-630187
- 2.9.0.redhat-00005
+ 2.20.0.redhat-00008
/opt/jboss-amq-7
amqx
- 1.6.6
+ 2.0.7
20160810
- 1.4
+ 1.5.0.redhat-00001
@@ -53,9 +53,8 @@
- org.slf4j
- slf4j-log4j12
- ${slf4j.version}
+ org.apache.logging.log4j
+ log4j-core
@@ -103,6 +102,10 @@
JAMQ7
+
+ true
+
+
${jamq7.version}
@@ -186,137 +189,15 @@
-
- local
-
- false
-
-
- 2.0.0-SNAPSHOT
-
-
-
- org.apache.activemq
- artemis-jms-client
- ${library.version}
-
-
-
- org.apache.activemq
- artemis-core-client
- ${library.version}
-
-
-
- org.apache.activemq
- artemis-commons
- ${library.version}
-
-
-
-
- org.apache.activemq
- activemq-broker
- ${activemq.version}
-
-
-
- org.apache.activemq
- activemq-runtime-config
- ${activemq.version}
-
-
-
-
-
- org.apache.maven.plugins
- maven-install-plugin
- ${plugin.install.version}
-
-
- install-external-artemis-jms-client
- clean
-
- ${project.basedir}/libs/artemis-jms-client-2.0.0-SNAPSHOT.jar
- default
- org.apache.activemq
- artemis-jms-client
- ${library.version}
- jar
- true
-
-
- install-file
-
-
-
- install-external-artemis-core-client
- clean
-
- ${project.basedir}/libs/artemis-core-client-2.0.0-SNAPSHOT.jar
- default
- org.apache.activemq
- artemis-core-client
- ${library.version}
- jar
- true
-
-
- install-file
-
-
-
- install-external-artemis-commons
- clean
-
- ${project.basedir}/libs/artemis-commons-2.0.0-SNAPSHOT.jar
- default
- org.apache.activemq
- artemis-commons
- ${library.version}
- jar
- true
-
-
- install-file
-
-
-
-
-
-
-
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+
+
+
-
-
- Delivery
-
- false
-
-
-
-
- maven-assembly-plugin
-
-
- src/main/assembly/dist-assembly.xml
-
- true
-
-
-
-
- dist-assembly
- package
-
- single
-
-
-
-
-
-
-
-
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/formatters/Formatter.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/formatters/Formatter.java
index 7a246775..dbc84d64 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/formatters/Formatter.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/formatters/Formatter.java
@@ -11,4 +11,5 @@ public interface Formatter {
* @return string format of given type
*/
String convertJSON(String string);
+ void printConvertedJson(String json);
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/formatters/PythonFormatter.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/formatters/PythonFormatter.java
index 7a42479e..37b01ab2 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/formatters/PythonFormatter.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/formatters/PythonFormatter.java
@@ -22,7 +22,9 @@ public String convertJSON(String json) {
json = json.replaceAll("'?[Ff]alse'?", "False");
return json;
}
-
+ public void printConvertedJson(String json) {
+ System.out.println(convertJSON(json));
+ }
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/main/LogConfigurator.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/main/LogConfigurator.java
index 377c0acb..442c150d 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/main/LogConfigurator.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/main/LogConfigurator.java
@@ -1,11 +1,17 @@
package com.redhat.amqx.main;
-import org.apache.log4j.PropertyConfigurator;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.LoggerConfig;
-import java.util.Properties;
+import java.util.function.Consumer;
/**
* Utility class to configure log messages
+ *
+ * https://logging.apache.org/log4j/2.x/manual/api.html
+ * https://logging.apache.org/log4j/2.x/manual/customconfig.html
*/
public class LogConfigurator {
/**
@@ -15,73 +21,38 @@ private LogConfigurator() {
}
- private static void configureCommon(Properties properties) {
- properties.setProperty("log4j.appender.stdout", "org.apache.log4j.ConsoleAppender");
- properties.setProperty("log4j.appender.stdout.Target", "System.out");
- properties.setProperty("log4j.appender.stdout.layout", "org.apache.log4j.PatternLayout");
- properties.setProperty("log4j.appender.stdout.layout.ConversionPattern", "%m%n");
- }
-
- private static void configureTrace(Properties properties) {
- properties.setProperty("log4j.rootLogger", "TRACE, stdout");
- }
-
- private static void configureDebug(Properties properties) {
- properties.setProperty("log4j.rootLogger", "DEBUG, stdout");
- }
+ private static void configureCommon(Consumer customizeConfig) {
+ final LoggerContext context = LoggerContext.getContext(false);
+ final Configuration config = context.getConfiguration();
+ LoggerConfig rootLogger = config.getRootLogger();
- private static void configureInfo(Properties properties) {
- properties.setProperty("log4j.rootLogger", "INFO, stdout");
- }
+ customizeConfig.accept(rootLogger);
- private static void configureError(Properties properties) {
- properties.setProperty("log4j.rootLogger", "ERROR, stdout");
+ context.updateLoggers();
}
-
- /**
- * Configure the output to be at trace level
- */
public static void trace() {
- Properties properties = new Properties();
-
- configureCommon(properties);
- configureTrace(properties);
-
- PropertyConfigurator.configure(properties);
+ configureCommon((LoggerConfig config) -> config.setLevel(Level.TRACE));
}
/**
* Configure the output to be at debug level
*/
public static void debug() {
- Properties properties = new Properties();
-
- configureCommon(properties);
- configureDebug(properties);
- PropertyConfigurator.configure(properties);
+ configureCommon((LoggerConfig config) -> config.setLevel(Level.DEBUG));
}
/**
* Configure the output to be at info (info) level
*/
public static void info() {
- Properties properties = new Properties();
-
- configureCommon(properties);
- configureInfo(properties);
- PropertyConfigurator.configure(properties);
+ configureCommon((LoggerConfig config) -> config.setLevel(Level.INFO));
}
/**
* Configure the output to be as error as possible
*/
public static void error() {
- Properties properties = new Properties();
-
- configureCommon(properties);
- configureError(properties);
-
- PropertyConfigurator.configure(properties);
+ configureCommon((LoggerConfig config) -> config.setLevel(Level.ERROR));
}
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/ObjectReader.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/ObjectReader.java
index b97cfc8b..4e8a4953 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/ObjectReader.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/ObjectReader.java
@@ -6,6 +6,14 @@
import org.slf4j.LoggerFactory;
import javax.management.AttributeNotFoundException;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanException;
+import javax.management.MBeanInfo;
+import javax.management.MBeanServerConnection;
+import javax.management.ObjectName;
+import javax.management.ReflectionException;
+import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -100,7 +108,10 @@ private Map extractMethodProperty(Method method, Object object,
throw new DestinationException(
String.format("Unable to access '%s' of '%s' object!", object.getClass(), method.getName()));
} catch (Throwable e) {
- logger.debug(e.getCause().toString());
+ logger.debug(e.toString());
+ if (e.getCause() != null) {
+ logger.debug(e.getCause().toString());
+ }
}
return methodPropertyMap;
}
@@ -169,6 +180,37 @@ public Map getObjectProperties(Object object, List exclu
}
return propertiesMap;
}
+
+ public Map getRawObjectProperties(MBeanServerConnection mBeanServerConnection, ObjectName objectName, List excludeMethodList) throws DestinationException {
+ Map propertiesMap = new HashMap<>();
+
+ MBeanInfo info;
+ try {
+ info = mBeanServerConnection.getMBeanInfo(objectName);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ for (MBeanAttributeInfo attributeInfo : info.getAttributes()) {
+ String attributeName = attributeInfo.getName();
+
+ // get rid of get/is+lowercase first letter
+ String propertyName = getPropertyNameByMethod(attributeName, 0);
+
+ Object value = null;
+ try {
+ value = mBeanServerConnection.getAttribute(objectName, attributeName);
+ propertiesMap.put(propertyName, value);
+ } catch (MBeanException | AttributeNotFoundException | InstanceNotFoundException | ReflectionException |
+ IOException e) {
+
+ e.printStackTrace();
+ } catch (Throwable e) {
+ logger.debug(e.toString());
+ }
+ }
+
+ return propertiesMap;
+ }
}
class ProxyHandler implements InvocationHandler {
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/Resolver.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/Resolver.java
index 07b60c21..25433d30 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/Resolver.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/Resolver.java
@@ -1,5 +1,7 @@
package com.redhat.amqx.management;
+import javax.management.ObjectName;
+
/**
* Interface for resolving view management
* objects like queues, topics, broker information.
@@ -18,6 +20,8 @@ public interface Resolver {
U getAddressView(String addressName) throws Exception;
+ public ObjectName getAddressObjectName(String addressName) throws Exception;
+
V getDivertView(String addressName, String divertName) throws Exception;
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/ActiveMQResolver.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/ActiveMQResolver.java
index 900870f8..f5a3db7f 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/ActiveMQResolver.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/ActiveMQResolver.java
@@ -57,6 +57,12 @@ public QueueViewMBean getAddressView(String queueName) throws Exception {
return null;
}
+ @Override
+ public ObjectName getAddressObjectName(String addressName) throws Exception {
+ System.err.println("Does not exist for AMQ!");
+ return null;
+ }
+
@Override
public QueueViewMBean getDivertView(String addressName, String divertName) throws Exception {
System.err.println("Does not exist for AMQ!");
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/QueueActiveMQManager.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/QueueActiveMQManager.java
index 81c94623..8176886f 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/QueueActiveMQManager.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/QueueActiveMQManager.java
@@ -1,6 +1,5 @@
package com.redhat.amqx.management.activemq;
-import com.redhat.amqx.formatters.PythonFormatter;
import com.redhat.amqx.management.Credentials;
import com.redhat.amqx.management.DestinationManager;
import com.redhat.amqx.management.exception.DestinationException;
@@ -9,7 +8,6 @@
import org.apache.activemq.broker.jmx.BrokerViewMBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import javax.management.ObjectName;
import java.io.IOException;
@@ -38,9 +36,9 @@ public boolean destinationExists(String name) throws Exception {
@Override
public void listDestinations(boolean isVerbose) throws Exception {
if (isVerbose) {
- logger.info(formatter.convertJSON(new JSONObject(listDestinationsWithProperties()).toString()));
+ formatter.printConvertedJson(new JSONObject(listDestinationsWithProperties()).toString());
} else {
- logger.info(formatter.convertJSON(new JSONArray(listDestinationsWithoutProperties()).toString()));
+ formatter.printConvertedJson(new JSONArray(listDestinationsWithoutProperties()).toString());
}
}
@@ -64,7 +62,7 @@ public void removeDestination(final String destinationName, String addressName)
@Override
public void removeMessages(String destinationName, String addressName) throws Exception {
- throw new NotImplementedException();
+ throw new UnsupportedOperationException("Not implemented yet");
}
@Override
@@ -80,7 +78,7 @@ public void addDestination(final String destinationName, boolean durable, String
@Override
public void addDestination(String destinationName, boolean durable, String addressName, String selector, int maxConsumers, boolean deleteOnNoConsumers) throws Exception {
- throw new NotImplementedException();
+ throw new UnsupportedOperationException("Not implemented yet");
}
protected String getFormattedDestinationProperties(String destinationName) throws Exception {
@@ -93,7 +91,7 @@ protected String getFormattedDestinationProperties(String destinationName) throw
@Override
public void getDestinationProperties(final String addressName, final String queueName) throws Exception {
if (destinationExists(queueName)) {
- logger.info(formatter.convertJSON(getFormattedDestinationProperties(queueName)));
+ formatter.printConvertedJson(getFormattedDestinationProperties(queueName));
} else {
throw new DestinationException("Queue '" + queueName + "' does not exist");
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/TopicActiveMQManager.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/TopicActiveMQManager.java
index 1a499e77..fbc27c1e 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/TopicActiveMQManager.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/activemq/TopicActiveMQManager.java
@@ -1,6 +1,5 @@
package com.redhat.amqx.management.activemq;
-import com.redhat.amqx.formatters.PythonFormatter;
import com.redhat.amqx.main.NodeType;
import com.redhat.amqx.management.Credentials;
import com.redhat.amqx.management.DestinationManager;
@@ -11,7 +10,6 @@
import org.apache.activemq.broker.jmx.BrokerViewMBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import javax.management.ObjectName;
import java.io.IOException;
@@ -52,9 +50,9 @@ protected ObjectName[] getObjectNames() throws Exception {
@Override
public void listDestinations(boolean isVerbose) throws Exception {
if (isVerbose) {
- logger.info(formatter.convertJSON(new JSONObject(listDestinationsWithProperties()).toString()));
+ formatter.printConvertedJson(new JSONObject(listDestinationsWithProperties()).toString());
} else {
- logger.info(formatter.convertJSON(new JSONArray(listDestinationsWithoutProperties()).toString()));
+ formatter.printConvertedJson(new JSONArray(listDestinationsWithoutProperties()).toString());
}
}
@@ -72,7 +70,7 @@ public void removeDestination(final String destinationName, String addressName)
@Override
public void removeMessages(String destinationName, String addressName) throws Exception {
- throw new NotImplementedException();
+ throw new UnsupportedOperationException("Not implemented yet");
}
@Override
@@ -88,13 +86,13 @@ public void addDestination(final String destinationName, boolean durable, String
@Override
public void addDestination(String destinationName, boolean durable, String addressName, String selector, int maxConsumers, boolean deleteOnNoConsumers) throws Exception {
- throw new NotImplementedException();
+ throw new UnsupportedOperationException("Not implemented yet");
}
@Override
public void getDestinationProperties(final String addressName, final String topicName) throws Exception {
if (destinationExists(topicName)) {
- logger.info(formatter.convertJSON(getFormattedDestinationProperties(topicName)));
+ formatter.printConvertedJson(getFormattedDestinationProperties(topicName));
} else {
throw new DestinationException("Topic '" + topicName + "' does not exist");
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/AbstractArtemisManager.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/AbstractArtemisManager.java
index 12dfe71a..b9050d7a 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/AbstractArtemisManager.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/AbstractArtemisManager.java
@@ -8,7 +8,6 @@
import com.redhat.amqx.management.AbstractConnectionManager;
import com.redhat.amqx.management.Credentials;
import com.redhat.amqx.management.Resolver;
-import org.apache.activemq.artemis.api.core.ActiveMQAddressDoesNotExistException;
import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
import org.apache.activemq.artemis.api.core.management.AddressControl;
import org.apache.activemq.artemis.api.core.management.DivertControl;
@@ -20,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.management.ObjectName;
import java.io.IOException;
import java.util.*;
@@ -176,8 +176,8 @@ public Map getDestinationProperties(String addressName, String d
}
}
- AddressControl addressControl = (AddressControl) getResolver().getAddressView(addressName);
- propertiesMap.putAll(objectReader.getObjectProperties(addressControl, excludeMethods));
+ ObjectName addressObjectName = getResolver().getAddressObjectName(addressName);
+ propertiesMap.putAll(objectReader.getRawObjectProperties(mBeanServerConnection, addressObjectName, excludeMethods));
propertiesMap.put("address-settings", new JSONObject(getServerControlMBean().getAddressSettingsAsJSON(addressName)));
return propertiesMap;
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/AddressArtemisManager.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/AddressArtemisManager.java
index 468e19fa..475c6f12 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/AddressArtemisManager.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/AddressArtemisManager.java
@@ -5,7 +5,6 @@
import com.redhat.amqx.management.DestinationManager;
import com.redhat.amqx.management.exception.DestinationException;
import org.apache.activemq.artemis.api.core.ActiveMQAddressDoesNotExistException;
-import org.apache.activemq.artemis.api.core.RoutingType;
import org.json.JSONArray;
import org.json.JSONObject;
@@ -43,7 +42,7 @@ public void listDestinations(boolean isVerbose) throws Exception {
} else {
reportJson = new JSONArray(addressNames).toString();
}
- logger.info(formatter.convertJSON(reportJson));
+ formatter.printConvertedJson(reportJson);
}
/**
@@ -102,7 +101,7 @@ public void addDestination(String destinationName, boolean durable, String addre
@Override
public void getDestinationProperties(String addressName, String unused) throws Exception {
if (destinationExists(addressName)) {
- logger.info(formatter.convertJSON(new JSONObject(getDestinationProperties(addressName, null, NodeType.ADDRESS)).toString()));
+ formatter.printConvertedJson(new JSONObject(getDestinationProperties(addressName, null, NodeType.ADDRESS)).toString());
} else {
throw new DestinationException(String.format("Address '%s' does not exist!", addressName));
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/ArtemisResolver.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/ArtemisResolver.java
index c359c091..ce385b7d 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/ArtemisResolver.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/ArtemisResolver.java
@@ -4,6 +4,7 @@
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.management.*;
import org.apache.activemq.artemis.api.core.RoutingType;
+import org.jetbrains.annotations.NotNull;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
@@ -16,10 +17,12 @@ public class ArtemisResolver implements Resolver",module=Core,ServerType=Server";
// 1.5.1 org.apache.activemq.artemis:type=Broker,brokerName="amq",serviceType=Address,name="queue-anycast2"
// 2.0 org.apache.activemq.artemis:broker="",component=addresses,address="",subcomponent=queues,routing-type="",queue=""
- objectName = ObjectNameBuilder.create(DEFAULT_DOMAIN, brokerName, true).getActiveMQServerObjectName();
+ ObjectName objectName = objectNameBuilder.getActiveMQServerObjectName();
return MBeanServerInvocationHandler.newProxyInstance(mBeanServerConnection, objectName, ActiveMQServerControl.class, false);
}
@Override
public QueueControl getQueueView(String addressName, String queueName) throws Exception {
- ObjectName objectName = ObjectNameBuilder.create(DEFAULT_DOMAIN, brokerName, true).getQueueObjectName(new SimpleString(addressName), new SimpleString(queueName), RoutingType.ANYCAST);
+ ObjectName objectName = objectNameBuilder.getQueueObjectName(new SimpleString(addressName), new SimpleString(queueName), RoutingType.ANYCAST);
return MBeanServerInvocationHandler.newProxyInstance(mBeanServerConnection, objectName, QueueControl.class, false);
}
@Override
public QueueControl getTopicView(String addressName, String topicName) throws Exception {
// if address doesn't add RoutingType.MULTICAST, it does not have any type
- ObjectName objectName = ObjectNameBuilder.create(DEFAULT_DOMAIN, brokerName, true).getQueueObjectName(new SimpleString(addressName), new SimpleString(topicName), RoutingType.MULTICAST);
+ ObjectName objectName = objectNameBuilder.getQueueObjectName(new SimpleString(addressName), new SimpleString(topicName), RoutingType.MULTICAST);
return MBeanServerInvocationHandler.newProxyInstance(mBeanServerConnection, objectName, QueueControl.class, false);
}
public AcceptorControl getAcceptorView(String acceptorName) throws Exception {
- ObjectName objectname = ObjectNameBuilder.create(DEFAULT_DOMAIN, brokerName, true).getAcceptorObjectName(acceptorName);
+ ObjectName objectname = objectNameBuilder.getAcceptorObjectName(acceptorName);
return MBeanServerInvocationHandler.newProxyInstance(mBeanServerConnection, objectname, AcceptorControl.class, false);
}
public AddressControl getAddressView(String addressName) throws Exception {
- ObjectName objectname = ObjectNameBuilder.create(DEFAULT_DOMAIN, brokerName, true).getAddressObjectName(new SimpleString(addressName));
+ ObjectName objectname = getAddressObjectName(addressName);
return MBeanServerInvocationHandler.newProxyInstance(mBeanServerConnection, objectname, AddressControl.class, false);
}
+ @NotNull
+ public ObjectName getAddressObjectName(String addressName) throws Exception {
+ return objectNameBuilder.getAddressObjectName(new SimpleString(addressName));
+ }
+
public DivertControl getDivertView(String addressName, String divertName) throws Exception {
- ObjectName objectname = ObjectNameBuilder.create(DEFAULT_DOMAIN, brokerName, true).getDivertObjectName(divertName, addressName);
+ ObjectName objectname = objectNameBuilder.getDivertObjectName(divertName, addressName);
return MBeanServerInvocationHandler.newProxyInstance(mBeanServerConnection, objectname, DivertControl.class, false);
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/BrokerArtemisManager.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/BrokerArtemisManager.java
index e79a7ba0..3c222b3f 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/BrokerArtemisManager.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/BrokerArtemisManager.java
@@ -43,24 +43,24 @@ public void reload() throws MalformedObjectNameException {
@Override
public void getTransportConnectors() throws Exception {
ActiveMQServerControl serverControl = getResolver(ArtemisResolver.class).getBrokerView();
- logger.info(formatter.convertJSON(serverControl.getConnectorsAsJSON()));
- logger.info(formatter.convertJSON(new JSONObject(serverControl.getConnectors()).toString()));
- logger.info(formatter.convertJSON(new JSONArray(serverControl.getAddressNames()).toString()));
+ formatter.printConvertedJson(serverControl.getConnectorsAsJSON());
+ formatter.printConvertedJson(new JSONObject(serverControl.getConnectors()).toString());
+ formatter.printConvertedJson(new JSONArray(serverControl.getAddressNames()).toString());
}
@Override
public void getNetworkTopology() throws Exception {
ActiveMQServerControl serverControl = getResolver(ArtemisResolver.class).getBrokerView();
- logger.info(formatter.convertJSON(serverControl.listNetworkTopology()));
+ formatter.printConvertedJson(serverControl.listNetworkTopology());
}
@Override
public void getSessions(String connectionId) throws Exception {
ActiveMQServerControl serverControl = getResolver(ArtemisResolver.class).getBrokerView();
if (connectionId == null) {
- logger.info(formatter.convertJSON(serverControl.listAllSessionsAsJSON()));
+ formatter.printConvertedJson(serverControl.listAllSessionsAsJSON());
} else {
- logger.info(formatter.convertJSON(serverControl.listSessionsAsJSON(connectionId)));
+ formatter.printConvertedJson(serverControl.listSessionsAsJSON(connectionId));
}
}
@@ -75,7 +75,7 @@ public void getAllBrokerDestinations() throws Exception {
allDestinationsMap.put("address", new JSONArray(getAddresses()));
allDestinationsMap.put("queue", new JSONArray(getQueues().keySet()));
allDestinationsMap.put("topic", new JSONArray(getTopics().keySet()));
- logger.info(formatter.convertJSON(new JSONObject(allDestinationsMap).toString()));
+ formatter.printConvertedJson(new JSONObject(allDestinationsMap).toString());
}
public void getAllBrokerDestinationsProperties() throws Exception {
@@ -94,7 +94,7 @@ public void getAllBrokerDestinationsProperties() throws Exception {
allDestinationsMap.put(address, getDestinationProperties(address, null, NodeType.ADDRESS));
}
- logger.info(formatter.convertJSON(new JSONObject(allDestinationsMap).toString()));
+ formatter.printConvertedJson(new JSONObject(allDestinationsMap).toString());
}
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/DestinationArtemisManager.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/DestinationArtemisManager.java
index 61ca05b8..77e083f0 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/DestinationArtemisManager.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/DestinationArtemisManager.java
@@ -43,7 +43,7 @@ public void listDestinations(boolean isVerbose) throws Exception {
} else {
reportJson = new JSONArray(queueNames.keySet()).toString();
}
- logger.info(formatter.convertJSON(reportJson));
+ formatter.printConvertedJson(reportJson);
}
@Override
@@ -135,7 +135,7 @@ public void getDestinationProperties(String addressName, String destinationName)
addressName = destinationName;
}
if (destinationExists(destinationName)) {
- logger.info(formatter.convertJSON(new JSONObject(getDestinationProperties(addressName, destinationName, NodeType.QUEUE)).toString()));
+ formatter.printConvertedJson(new JSONObject(getDestinationProperties(addressName, destinationName, NodeType.QUEUE)).toString());
} else {
throw new DestinationException(String.format("Queue '%s' does not exist!", destinationName));
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/DivertArtemisManager.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/DivertArtemisManager.java
index 5513c2a7..773f2554 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/DivertArtemisManager.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/DivertArtemisManager.java
@@ -2,22 +2,14 @@
import com.redhat.amqx.main.NodeType;
import com.redhat.amqx.management.Credentials;
-import com.redhat.amqx.management.DestinationManager;
import com.redhat.amqx.management.exception.DestinationException;
-import org.apache.activemq.artemis.api.core.ActiveMQAddressDoesNotExistException;
-import org.apache.activemq.artemis.api.core.ActiveMQNonExistentQueueException;
-import org.apache.activemq.artemis.api.core.RoutingType;
import org.apache.activemq.artemis.api.core.management.AddressControl;
-import org.apache.activemq.artemis.api.core.management.DivertControl;
import org.json.JSONArray;
import org.json.JSONObject;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import java.io.IOException;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
/**
* Destination object management for Apache Artemis/AMQ7 broker.
@@ -57,7 +49,7 @@ public void listDiverts(boolean isVerbose) throws Exception {
} else {
reportJson = new JSONArray(divertNames).toString();
}
- logger.info(formatter.convertJSON(reportJson));
+ formatter.printConvertedJson(reportJson);
}
@@ -109,7 +101,7 @@ public void getDestinationProperties(String addressName, String destinationName)
addressName = destinationName;
}
if (divertExists(destinationName)) {
- logger.info(formatter.convertJSON(new JSONObject(getDestinationProperties(addressName, destinationName, NodeType.DIVERT)).toString()));
+ formatter.printConvertedJson(new JSONObject(getDestinationProperties(addressName, destinationName, NodeType.DIVERT)).toString());
} else {
throw new DestinationException(String.format("Divert '%s' does not exist!", destinationName));
}
diff --git a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/TopicArtemisManager.java b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/TopicArtemisManager.java
index 6881a3e5..ae462941 100644
--- a/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/TopicArtemisManager.java
+++ b/cli-activemq-jmx/src/main/java/com/redhat/amqx/management/artemis/TopicArtemisManager.java
@@ -42,7 +42,7 @@ public void listDestinations(boolean isVerbose) throws Exception {
} else {
reportJson = new JSONArray(topicNames.keySet()).toString();
}
- logger.info(formatter.convertJSON(reportJson));
+ formatter.printConvertedJson(reportJson);
}
@Override
@@ -124,7 +124,7 @@ public void getDestinationProperties(String addressName, String destinationName)
addressName = destinationName;
}
if (destinationExists(destinationName)) {
- logger.info(formatter.convertJSON(new JSONObject(getDestinationProperties(addressName, destinationName, NodeType.TOPIC)).toString()));
+ formatter.printConvertedJson(new JSONObject(getDestinationProperties(addressName, destinationName, NodeType.TOPIC)).toString());
} else {
throw new DestinationException(String.format("Topic '%s' does not exist!", destinationName));
}
diff --git a/cli-activemq-jmx/src/test/kotlin/MainTest.kt b/cli-activemq-jmx/src/test/kotlin/MainTest.kt
index b6df0fcd..07d9b9c6 100644
--- a/cli-activemq-jmx/src/test/kotlin/MainTest.kt
+++ b/cli-activemq-jmx/src/test/kotlin/MainTest.kt
@@ -1,6 +1,8 @@
+import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
class AmqxMain {
+ @Tag("external")
@Test
fun `queue properties`() {
com.redhat.amqx.main.Main.main(
diff --git a/cli-activemq/pom.xml b/cli-activemq/pom.xml
index 2c6c5e00..cac549ce 100644
--- a/cli-activemq/pom.xml
+++ b/cli-activemq/pom.xml
@@ -35,7 +35,7 @@
aoc
com.redhat.mqe.aoc.Main
- 5.17.1
+ 5.17.4
${activemq.client.version}
diff --git a/cli-activemq/src/main/resources/log4j.properties b/cli-activemq/src/main/resources/log4j2.properties
similarity index 55%
rename from cli-activemq/src/main/resources/log4j.properties
rename to cli-activemq/src/main/resources/log4j2.properties
index 968f060d..a91e958c 100644
--- a/cli-activemq/src/main/resources/log4j.properties
+++ b/cli-activemq/src/main/resources/log4j2.properties
@@ -17,20 +17,15 @@
# limitations under the License.
#
-# Set root logger level to DEBUG and its only appender to console
-# This sets ALL the logs to given level.
-log4j.rootLogger=WARN, console
+rootLogger=WARN, console
-log4j.logger.com.redhat.mqe.lib=INFO, console
-log4j.additivity.com.redhat.mqe.lib=false
+logger.lib.name=com.redhat.mqe.lib
+logger.lib.level=INFO
-log4j.logger.io.netty=WARN, console
-log4j.logger.netty=WARN, console
+logger.netty.name=io.netty
+logger.netty.level=WARN
-# Appender "console" settings
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.Threshold=all
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-#log4j.appender.console.layout.ConversionPattern=%t %d %p [%c{4}] %m%n
-log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %p %m%n
+# Console appender
+appender.console.type=Console
+appender.console.name=console
+appender.console.target=SYSTEM_ERR
diff --git a/cli-artemis-jms/pom.xml b/cli-artemis-jms/pom.xml
index efa3baa2..04902eab 100644
--- a/cli-artemis-jms/pom.xml
+++ b/cli-artemis-jms/pom.xml
@@ -36,7 +36,7 @@
acc
com.redhat.mqe.acc.Main
false
- 2.22.0
+ 2.28.0
${artemis.jms.client.version}
diff --git a/cli-qpid-jms/src/test/resources/log4j.properties b/cli-artemis-jms/src/main/resources/log4j2.properties
similarity index 73%
rename from cli-qpid-jms/src/test/resources/log4j.properties
rename to cli-artemis-jms/src/main/resources/log4j2.properties
index 128ef5e8..be82b864 100644
--- a/cli-qpid-jms/src/test/resources/log4j.properties
+++ b/cli-artemis-jms/src/main/resources/log4j2.properties
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2018 Red Hat, Inc.
+# Copyright (c) 2017 Red Hat, Inc.
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
@@ -16,3 +16,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+rootLogger=WARN, console
+
+logger.lib.name=com.redhat.mqe.lib
+logger.lib.level=INFO
+
+logger.netty.name=io.netty
+logger.netty.level=WARN
+
+# Console appender
+appender.console.type=Console
+appender.console.name=console
+appender.console.target=SYSTEM_ERR
diff --git a/cli-paho-java/src/main/java/com/redhat/mqe/amc/Client.java b/cli-paho-java/src/main/java/com/redhat/mqe/amc/Client.java
index 830d7305..7be09401 100644
--- a/cli-paho-java/src/main/java/com/redhat/mqe/amc/Client.java
+++ b/cli-paho-java/src/main/java/com/redhat/mqe/amc/Client.java
@@ -23,12 +23,14 @@
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Map;
@@ -238,7 +240,7 @@ static void closeClient(MqttClient client) throws MqttException {
}
protected Logger setUpLogger(String name) {
- Logger log = Logger.getLogger(name);
+ org.apache.logging.log4j.core.Logger log = (org.apache.logging.log4j.core.Logger) LogManager.getLogger(name);
log.setLevel(Level.WARN);
return log;
}
diff --git a/cli-paho-java/src/main/java/com/redhat/mqe/amc/Receiver.java b/cli-paho-java/src/main/java/com/redhat/mqe/amc/Receiver.java
index e66f16fe..803846e6 100644
--- a/cli-paho-java/src/main/java/com/redhat/mqe/amc/Receiver.java
+++ b/cli-paho-java/src/main/java/com/redhat/mqe/amc/Receiver.java
@@ -20,7 +20,7 @@
package com.redhat.mqe.amc;
import joptsimple.OptionParser;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Logger;
import org.eclipse.paho.client.mqttv3.*;
diff --git a/cli-paho-java/src/main/java/com/redhat/mqe/amc/Sender.java b/cli-paho-java/src/main/java/com/redhat/mqe/amc/Sender.java
index 00c88e0c..9e229987 100644
--- a/cli-paho-java/src/main/java/com/redhat/mqe/amc/Sender.java
+++ b/cli-paho-java/src/main/java/com/redhat/mqe/amc/Sender.java
@@ -28,7 +28,7 @@
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Logger;
/**
diff --git a/cli-paho-java/src/main/resources/log4j.properties b/cli-paho-java/src/main/resources/log4j2.properties
similarity index 53%
rename from cli-paho-java/src/main/resources/log4j.properties
rename to cli-paho-java/src/main/resources/log4j2.properties
index 532b055b..55ea0f46 100644
--- a/cli-paho-java/src/main/resources/log4j.properties
+++ b/cli-paho-java/src/main/resources/log4j2.properties
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2018 Red Hat, Inc.
+# Copyright (c) 2022 Red Hat, Inc.
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
@@ -16,17 +16,19 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-# Set root logger level to DEBUG and its only appender to console
-# This sets ALL the logs to given level.
-log4j.rootLogger=ALL, console
-log4j.logger.com.redhat.mqe.lib=ALL, console
-log4j.additivity.com.redhat.mqe.lib=false
-log4j.logger.io.netty=ALL, console
-log4j.logger.netty=ALL, console
-# Appender "console" settings
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.Threshold=all
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-#log4j.appender.console.layout.ConversionPattern=%t %d %p [%c{4}] %m%n
-log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %p %m%n
+rootLogger=ALL, console
+
+logger.lib.name=com.redhat.mqe.lib
+logger.lib.level=INFO
+
+logger.netty.name=io.netty
+logger.netty.level=WARN
+
+# Log transport.traceBytes=true messages
+logger.NettyTcpTransport.name=org.apache.qpid.jms.transports.netty.NettyTcpTransport
+logger.NettyTcpTransport.level=DEBUG
+
+# Console appender
+appender.console.type=Console
+appender.console.name=console
+appender.console.target=SYSTEM_ERR
diff --git a/cli-protonj2/pom.xml b/cli-protonj2/pom.xml
index 3c42d384..4cd75726 100644
--- a/cli-protonj2/pom.xml
+++ b/cli-protonj2/pom.xml
@@ -34,7 +34,7 @@
jms
- 1.0.0-M6
+ 1.0.0-M13
com.redhat.mqe.Main
${protonj2.version}
2.0.39.Final
diff --git a/cli-protonj2/src/main/resources/log4j.properties b/cli-protonj2/src/main/resources/log4j.properties
deleted file mode 100644
index 37b7713d..00000000
--- a/cli-protonj2/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-# Set root logger level to DEBUG and its only appender to console
-# This sets ALL the logs to given level.
-log4j.rootLogger=ERROR, console
-
-# Uncomment this to get debug logs from qpid-jms
-#log4j.logger.org.apache.qpid=DEBUG, console
-
-log4j.logger.com.redhat.mqe.jms=INFO, console
-log4j.additivity.com.redhat.mqe.jms=false
-
-log4j.logger.io.netty=WARN, console
-log4j.logger.netty=WARN, console
-
-# Log transport.traceBytes=true messages
-log4j.logger.org.apache.qpid.jms.transports.netty.NettyTcpTransport=DEBUG, console
-
-# Appender "console" settings
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.Threshold=all
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-#log4j.appender.console.layout.ConversionPattern=%t %d %p [%c{4}] %m%n
-log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %p %m%n
diff --git a/cli-artemis-jms/src/main/resources/log4j.properties b/cli-protonj2/src/main/resources/log4j2.properties
similarity index 53%
rename from cli-artemis-jms/src/main/resources/log4j.properties
rename to cli-protonj2/src/main/resources/log4j2.properties
index 968f060d..e6c0e82b 100644
--- a/cli-artemis-jms/src/main/resources/log4j.properties
+++ b/cli-protonj2/src/main/resources/log4j2.properties
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2017 Red Hat, Inc.
+# Copyright (c) 2022 Red Hat, Inc.
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
@@ -16,21 +16,19 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+rootLogger=WARN, console
-# Set root logger level to DEBUG and its only appender to console
-# This sets ALL the logs to given level.
-log4j.rootLogger=WARN, console
+logger.lib.name=com.redhat.mqe.lib
+logger.lib.level=INFO
-log4j.logger.com.redhat.mqe.lib=INFO, console
-log4j.additivity.com.redhat.mqe.lib=false
+logger.netty.name=io.netty
+logger.netty.level=WARN
-log4j.logger.io.netty=WARN, console
-log4j.logger.netty=WARN, console
+# Log transport.traceBytes=true messages
+logger.NettyTcpTransport.name=org.apache.qpid.jms.transports.netty.NettyTcpTransport
+logger.NettyTcpTransport.level=DEBUG
-# Appender "console" settings
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.Threshold=all
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-#log4j.appender.console.layout.ConversionPattern=%t %d %p [%c{4}] %m%n
-log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %p %m%n
+# Console appender
+appender.console.type=Console
+appender.console.name=console
+appender.console.target=SYSTEM_ERR
diff --git a/cli-qpid-jms/pom.xml b/cli-qpid-jms/pom.xml
index fef0ddbf..10fac89c 100644
--- a/cli-qpid-jms/pom.xml
+++ b/cli-qpid-jms/pom.xml
@@ -35,13 +35,20 @@
jms
com.redhat.mqe.jms.Main
- 1.6.0
+ 1.10.0
${qpid.jms.client.version}
- 2.0.52.Final
+ 2.0.59.Final
linux-x86_64-fedora
- 1.8.0
+ 1.8.1
+
+
+ staging
+ https://repository.apache.org/content/repositories/orgapacheqpid-1262
+
+
+
@@ -117,6 +124,10 @@
test-jar
test
+
+ org.apache.logging.log4j
+ log4j-core
+
diff --git a/cli-qpid-jms/src/main/resources/log4j.properties b/cli-qpid-jms/src/main/resources/log4j2.properties
similarity index 52%
rename from cli-qpid-jms/src/main/resources/log4j.properties
rename to cli-qpid-jms/src/main/resources/log4j2.properties
index 37b7713d..5469b57e 100644
--- a/cli-qpid-jms/src/main/resources/log4j.properties
+++ b/cli-qpid-jms/src/main/resources/log4j2.properties
@@ -16,27 +16,23 @@
# specific language governing permissions and limitations
# under the License.
#
+rootLogger=WARN, console
-# Set root logger level to DEBUG and its only appender to console
-# This sets ALL the logs to given level.
-log4j.rootLogger=ERROR, console
+logger.lib.name=com.redhat.mqe.lib
+logger.lib.level=INFO
-# Uncomment this to get debug logs from qpid-jms
-#log4j.logger.org.apache.qpid=DEBUG, console
-
-log4j.logger.com.redhat.mqe.jms=INFO, console
-log4j.additivity.com.redhat.mqe.jms=false
-
-log4j.logger.io.netty=WARN, console
-log4j.logger.netty=WARN, console
+logger.netty.name=io.netty
+logger.netty.level=WARN
# Log transport.traceBytes=true messages
-log4j.logger.org.apache.qpid.jms.transports.netty.NettyTcpTransport=DEBUG, console
+logger.NettyTcpTransport.name=org.apache.qpid.jms.transports.netty.NettyTcpTransport
+logger.NettyTcpTransport.level=DEBUG
+
+# Uncomment this to get debug logs from qpid-jms
+#logger.qpid.name=org.slf4j.simpleLogger.log.org.apache.qpid
+#logger.qpid.level=DEBUG
-# Appender "console" settings
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.Threshold=all
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-#log4j.appender.console.layout.ConversionPattern=%t %d %p [%c{4}] %m%n
-log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %p %m%n
+# Console appender
+appender.console.type=Console
+appender.console.name=console
+appender.console.target=SYSTEM_ERR
diff --git a/cli-qpid-jms/src/test/java/ConnectWithoutPassword.java b/cli-qpid-jms/src/test/java/ConnectWithoutPassword.java
index 565889e2..e5b85767 100644
--- a/cli-qpid-jms/src/test/java/ConnectWithoutPassword.java
+++ b/cli-qpid-jms/src/test/java/ConnectWithoutPassword.java
@@ -17,11 +17,7 @@
* limitations under the License.
*/
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.SimpleLayout;
import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import util.Broker;
@@ -32,13 +28,6 @@
@SuppressWarnings("Duplicates")
class ConnectWithoutPassword {
-
- @BeforeAll
- static void configureLogging() {
- ConsoleAppender consoleAppender = new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT);
- LogManager.getRootLogger().addAppender(consoleAppender);
- }
-
@Test
void reconnectOneServerNoAuthGuestNotConfigured() {
try (Broker broker = new Broker()) {
diff --git a/cli-qpid-jms/src/test/java/QPIDJMS412Test.java b/cli-qpid-jms/src/test/java/QPIDJMS412Test.java
index bef46b6c..b9a2239a 100644
--- a/cli-qpid-jms/src/test/java/QPIDJMS412Test.java
+++ b/cli-qpid-jms/src/test/java/QPIDJMS412Test.java
@@ -1,8 +1,5 @@
import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration;
import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager;
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.SimpleLayout;
import org.apache.qpid.jms.exceptions.JMSSecuritySaslException;
import org.apache.qpid.jms.exceptions.JmsConnectionFailedException;
import org.junit.jupiter.api.Assertions;
@@ -26,12 +23,6 @@ class QPIDJMS412Test {
private static final String USER_NAME = "someUser";
private static final String PASSWORD = "somePassword";
- @BeforeAll
- static void configureLogging() {
- ConsoleAppender consoleAppender = new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT);
- LogManager.getRootLogger().addAppender(consoleAppender);
- }
-
@Test
@Tag("issue")
@DisplayName("client should stop reconnect if sasl auth fails on first server (auth is set up)")
diff --git a/cli-qpid-jms/src/test/java/QPIDJMS451Test.java b/cli-qpid-jms/src/test/java/QPIDJMS451Test.java
index 96e0ef33..ca448760 100644
--- a/cli-qpid-jms/src/test/java/QPIDJMS451Test.java
+++ b/cli-qpid-jms/src/test/java/QPIDJMS451Test.java
@@ -17,11 +17,7 @@
* limitations under the License.
*/
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.SimpleLayout;
import org.apache.qpid.jms.JmsConnectionFactory;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.io.TempDir;
@@ -39,12 +35,6 @@
import java.nio.file.Path;
class QPIDJMS451Test {
- @BeforeAll
- static void configureLogging() {
- ConsoleAppender consoleAppender = new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT);
- LogManager.getRootLogger().addAppender(consoleAppender);
- }
-
@Test
@ExtendWith(BrokerFixture.class)
void testSessionRecoverWithDurableSub(@BrokerFixture.TempBroker Broker broker, @TempDir Path tempDir) throws Exception {
diff --git a/cli-qpid-jms/src/test/java/QPIDJMS484Test.java b/cli-qpid-jms/src/test/java/QPIDJMS484Test.java
index 6a7ac9f2..47171181 100644
--- a/cli-qpid-jms/src/test/java/QPIDJMS484Test.java
+++ b/cli-qpid-jms/src/test/java/QPIDJMS484Test.java
@@ -22,12 +22,8 @@
import org.apache.activemq.artemis.core.config.CoreQueueConfiguration;
import org.apache.activemq.artemis.core.server.MessageReference;
import org.apache.activemq.artemis.core.server.Queue;
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.SimpleLayout;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.apache.qpid.jms.JmsQueue;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -51,12 +47,6 @@
@Tag("issue")
public class QPIDJMS484Test {
- @BeforeAll
- static void configureLogging() {
- ConsoleAppender consoleAppender = new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT);
- LogManager.getRootLogger().addAppender(consoleAppender);
- }
-
@Test
@ExtendWith(BrokerFixture.class)
void testSendDispositionsAfterRecoverForUnacknowledgedMessages(@BrokerFixture.TempBroker Broker broker, @TempDir Path tempDir) throws Exception {
diff --git a/cli-qpid-jms/src/test/kotlin/QPIDJMS391Test.kt b/cli-qpid-jms/src/test/kotlin/QPIDJMS391Test.kt
index 6f865a54..a221786b 100644
--- a/cli-qpid-jms/src/test/kotlin/QPIDJMS391Test.kt
+++ b/cli-qpid-jms/src/test/kotlin/QPIDJMS391Test.kt
@@ -21,11 +21,12 @@ import com.google.common.truth.Correspondence
import com.google.common.truth.Truth.assertThat
import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration
import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager
-import org.apache.log4j.*
-import org.apache.log4j.spi.LoggingEvent
+import org.apache.logging.log4j.*
+import org.apache.logging.log4j.core.*
+import org.apache.logging.log4j.core.appender.AbstractAppender
+import org.apache.logging.log4j.core.config.*
import org.apache.qpid.jms.transports.TransportSupport
import org.junit.jupiter.api.*
-import org.junit.jupiter.api.extension.ExtendWith
import org.junit.jupiter.api.io.TempDir
import util.Broker
import java.io.File
@@ -64,23 +65,19 @@ class QPIDJMS391Test {
val amqpPort = broker.startBroker()
val amqpsPort = broker.addAMQPSAcceptor(keystore)
- val ala = ArrayListAppender()
- LogManager.getLogger(TransportSupport::class.java).let {
- it.level = Level.DEBUG
- it.addAppender(ala)
- }
+ val listAppender = ArrayListAppender.installLogger(TransportSupport::class.java.name, Level.DEBUG)
// the config option is only used when we create actual ssl connection
val f: ConnectionFactory = org.apache.qpid.jms.JmsConnectionFactory(
- "amqps://127.0.0.1:$amqpsPort?transport.useOpenSSL=true&transport.trustAll=true&transport.verifyHost=false")
+ "amqps://127.0.0.1:$amqpsPort?transport.useOpenSSL=true&transport.trustAll=true&transport.verifyHost=false"
+ )
val c: Connection = f.createConnection(USER_NAME, PASSWORD)
c.start()
val s: Session = c.createSession(Session.AUTO_ACKNOWLEDGE)
s.close()
c.close()
- val messages = ala.loggingEvents.map { it.renderedMessage }
- assertThat(messages)
+ assertThat(listAppender.messages)
.comparingElementsUsing(Correspondence.from(::regexpCorrespondence, "RegexpCorrespondence())"))
.contains("OpenSSL Enabled: Version .* of OpenSSL will be used")
@@ -94,7 +91,8 @@ class QPIDJMS391Test {
val securityConfiguration = SecurityConfiguration()
securityConfiguration.addUser(USER_NAME, PASSWORD)
val activeMQJAASSecurityManager = ActiveMQJAASSecurityManager(
- "org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule", securityConfiguration)
+ "org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule", securityConfiguration
+ )
broker.embeddedBroker.setSecurityManager(activeMQJAASSecurityManager)
broker.configuration.isPersistenceEnabled = false
@@ -102,14 +100,7 @@ class QPIDJMS391Test {
}
companion object {
- private val overrideDefaultTLS = "com.ibm.jsse2.overrideDefaultTLS"
-
- @JvmStatic
- @BeforeAll
- internal fun configureLogging() {
- val consoleAppender = ConsoleAppender(SimpleLayout(), ConsoleAppender.SYSTEM_OUT)
- LogManager.getRootLogger().addAppender(consoleAppender)
- }
+ private const val overrideDefaultTLS = "com.ibm.jsse2.overrideDefaultTLS"
@JvmStatic
fun regexpCorrespondence(actual: String?, expected: String?): Boolean {
@@ -133,14 +124,62 @@ class QPIDJMS391Test {
}
}
-class ArrayListAppender : AppenderSkeleton() {
- val loggingEvents = ArrayList()
+// https://stackoverflow.com/questions/59713891/appenderskeleton-log4j2
+class ArrayListAppender : AbstractAppender("ArrayListAppender", null, null, true, Property.EMPTY_ARRAY) {
+ val messages = ArrayList()
- override fun requiresLayout(): Boolean = false
-
- override fun append(loggingEvent: LoggingEvent) {
- loggingEvents.add(loggingEvent)
+ override fun append(event: LogEvent) {
+ messages.add(event.message.formattedMessage)
}
- override fun close() = Unit
+ companion object {
+
+ /**
+ *
+ * Creates an instance and attaches it to log4j2 as logger for the given name.
+ *
+ * Blind alleys
+ *
+ * val listAppender = ArrayListAppender()
+ * listAppender.start()
+ * (LogManager.getContext(true).getLogger(TransportSupport::class.java) as Logger).let {
+ * it.level = Level.DEBUG
+ * it.addAppender(listAppender)
+ * }
+ *
+ * That will reconfigure existing logger, and since we don't have config for this yet, it will reconfigure
+ * the root logger (named ""). It looks up the closest parent, which in this test is going to be root.
+ *
+ */
+ fun installLogger(loggerName: String, loggerLevel: Level?): ArrayListAppender {
+ // note this code is specific for log4j2-core, does not use slf4j abstraction nor log4j2 abstraction
+ val loggerContext = LogManager.getContext(false) as LoggerContext
+ val configuration = loggerContext.configuration
+
+ val listAppender = ArrayListAppender()
+ listAppender.start()
+
+ // https://logging.apache.org/log4j/2.x/manual/customconfig.html#AddingToCurrent
+ configuration.addAppender(listAppender)
+ val loggerConfig = LoggerConfig.newBuilder()
+ .withLoggerName(loggerName)
+ .withLevel(loggerLevel)
+ .withAdditivity(true)
+ .withRefs(
+ arrayOf(AppenderRef.createAppenderRef(listAppender.name, loggerLevel, null))
+ )
+ .withProperties(null)
+ .withConfig(loggerContext.configuration)
+ .withtFilter(null)
+ .build()
+
+ loggerConfig.addAppender(listAppender, loggerLevel, null)
+
+ configuration.addLogger(loggerName, loggerConfig)
+
+ loggerContext.updateLoggers()
+
+ return listAppender
+ }
+ }
}
diff --git a/cli-qpid-jms/src/test/kotlin/QPIDJMS502Test.kt b/cli-qpid-jms/src/test/kotlin/QPIDJMS502Test.kt
index 6afa49e3..9b530daa 100644
--- a/cli-qpid-jms/src/test/kotlin/QPIDJMS502Test.kt
+++ b/cli-qpid-jms/src/test/kotlin/QPIDJMS502Test.kt
@@ -19,11 +19,8 @@
import com.google.common.truth.Correspondence
import com.google.common.truth.Truth.assertThat
-import org.apache.log4j.Level
-import org.apache.log4j.LogManager
import org.apache.qpid.jms.JmsConnection
import org.awaitility.Awaitility.await
-import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
@@ -35,6 +32,7 @@ import java.util.*
import javax.jms.Connection
import javax.jms.ConnectionFactory
import javax.jms.Session
+import org.apache.logging.log4j.Level
@Tag("issue")
class QPIDJMS502Test {
@@ -59,11 +57,7 @@ class QPIDJMS502Test {
val amqpPort1 = broker.addAMQPAcceptor()
val amqpPort2 = broker.addAMQPAcceptor()
- val ala = ArrayListAppender()
- LogManager.getLogger(JmsConnection::class.java).let {
- it.level = Level.INFO
- it.addAppender(ala)
- }
+ val ala = ArrayListAppender.installLogger(JmsConnection::class.java.name, Level.INFO)
val f: ConnectionFactory = org.apache.qpid.jms.JmsConnectionFactory(
"failover:(amqp://127.0.0.1:$amqpPort1,amqp://127.0.0.1:$amqpPort2)")
@@ -81,8 +75,7 @@ class QPIDJMS502Test {
assertThat(connections.first().id).isNotEqualTo(oldId)
}
- val messages = ala.loggingEvents.map { it.renderedMessage }
- assertThat(messages)
+ assertThat(ala.messages)
.comparingElementsUsing(Correspondence.from(::regexpCorrespondence, "RegexpCorrespondence())"))
.contains("Connection .* restored to server: .*")
@@ -98,13 +91,6 @@ class QPIDJMS502Test {
}
companion object {
- @JvmStatic
- @BeforeAll
- internal fun configureLogging() {
-// val consoleAppender = ConsoleAppender(SimpleLayout(), ConsoleAppender.SYSTEM_OUT)
-// LogManager.getRootLogger().addAppender(consoleAppender)
- }
-
@JvmStatic
fun regexpCorrespondence(actual: String?, expected: String?): Boolean {
return actual!!.matches(Regex(expected!!))
diff --git a/cli-protonj2/src/test/java/resources/log4j.properties b/cli-qpid-jms/src/test/resources/log4j2-test.properties
similarity index 52%
rename from cli-protonj2/src/test/java/resources/log4j.properties
rename to cli-qpid-jms/src/test/resources/log4j2-test.properties
index 37b7713d..bfdba41e 100644
--- a/cli-protonj2/src/test/java/resources/log4j.properties
+++ b/cli-qpid-jms/src/test/resources/log4j2-test.properties
@@ -16,27 +16,24 @@
# specific language governing permissions and limitations
# under the License.
#
+status=error
+rootLogger=debug, console
-# Set root logger level to DEBUG and its only appender to console
-# This sets ALL the logs to given level.
-log4j.rootLogger=ERROR, console
+logger.lib.name=com.redhat.mqe.lib
+logger.lib.level=INFO
-# Uncomment this to get debug logs from qpid-jms
-#log4j.logger.org.apache.qpid=DEBUG, console
-
-log4j.logger.com.redhat.mqe.jms=INFO, console
-log4j.additivity.com.redhat.mqe.jms=false
-
-log4j.logger.io.netty=WARN, console
-log4j.logger.netty=WARN, console
+logger.netty.name=io.netty
+logger.netty.level=WARN
# Log transport.traceBytes=true messages
-log4j.logger.org.apache.qpid.jms.transports.netty.NettyTcpTransport=DEBUG, console
+logger.NettyTcpTransport.name=org.apache.qpid.jms.transports.netty.NettyTcpTransport
+logger.NettyTcpTransport.level=DEBUG
+
+# Uncomment this to get debug logs from qpid-jms
+#logger.qpid.name=org.apache.qpid
+#logger.qpid.level=DEBUG
-# Appender "console" settings
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.Threshold=all
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-#log4j.appender.console.layout.ConversionPattern=%t %d %p [%c{4}] %m%n
-log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %p %m%n
+# Console appender
+appender.console.type=Console
+appender.console.name=console
+appender.console.target=SYSTEM_ERR
diff --git a/image/bin/cli-activemq-connector b/image/bin/cli-activemq-connector
new file mode 100644
index 00000000..d445c1b2
--- /dev/null
+++ b/image/bin/cli-activemq-connector
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_ACTIVEMQ_OPTS} -jar /opt/cli-java/cli-activemq.jar connector $@
diff --git a/image/bin/cli-activemq-receiver b/image/bin/cli-activemq-receiver
new file mode 100644
index 00000000..6c135aa7
--- /dev/null
+++ b/image/bin/cli-activemq-receiver
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_ACTIVEMQ_OPTS} -jar /opt/cli-java/cli-activemq.jar receiver $@
diff --git a/image/bin/cli-activemq-sender b/image/bin/cli-activemq-sender
new file mode 100644
index 00000000..c45f951c
--- /dev/null
+++ b/image/bin/cli-activemq-sender
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_ACTIVEMQ_OPTS} -jar /opt/cli-java/cli-activemq.jar sender $@
diff --git a/image/bin/cli-artemis-connector b/image/bin/cli-artemis-connector
new file mode 100644
index 00000000..900e5a55
--- /dev/null
+++ b/image/bin/cli-artemis-connector
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_ARTEMIS_OPTS} -jar /opt/cli-java/cli-artemis.jar connector $@
diff --git a/image/bin/cli-artemis-receiver b/image/bin/cli-artemis-receiver
new file mode 100644
index 00000000..4fc16fd5
--- /dev/null
+++ b/image/bin/cli-artemis-receiver
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_ARTEMIS_OPTS} -jar /opt/cli-java/cli-artemis.jar receiver $@
diff --git a/image/bin/cli-artemis-sender b/image/bin/cli-artemis-sender
new file mode 100644
index 00000000..d4b3d910
--- /dev/null
+++ b/image/bin/cli-artemis-sender
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_ARTEMIS_OPTS} -jar /opt/cli-java/cli-artemis.jar sender $@
diff --git a/image/bin/cli-paho-connector b/image/bin/cli-paho-connector
new file mode 100644
index 00000000..4ffec016
--- /dev/null
+++ b/image/bin/cli-paho-connector
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_PAHO_OPTS} -jar /opt/cli-java/cli-paho.jar connector $@
diff --git a/image/bin/cli-paho-receiver b/image/bin/cli-paho-receiver
new file mode 100644
index 00000000..77f04af4
--- /dev/null
+++ b/image/bin/cli-paho-receiver
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_PAHO_OPTS} -jar /opt/cli-java/cli-paho.jar receiver $@
diff --git a/image/bin/cli-paho-sender b/image/bin/cli-paho-sender
new file mode 100644
index 00000000..346cfd3b
--- /dev/null
+++ b/image/bin/cli-paho-sender
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_PAHO_OPTS} -jar /opt/cli-java/cli-paho.jar sender $@
diff --git a/image/bin/cli-protonj2-connector b/image/bin/cli-protonj2-connector
new file mode 100644
index 00000000..584c688e
--- /dev/null
+++ b/image/bin/cli-protonj2-connector
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_PROTONJ2_OPTS} -jar /opt/cli-java/cli-protonj2.jar connector $@
diff --git a/image/bin/cli-protonj2-receiver b/image/bin/cli-protonj2-receiver
new file mode 100644
index 00000000..feee7caf
--- /dev/null
+++ b/image/bin/cli-protonj2-receiver
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_PROTONJ2_OPTS} -jar /opt/cli-java/cli-protonj2.jar receiver $@
diff --git a/image/bin/cli-protonj2-sender b/image/bin/cli-protonj2-sender
new file mode 100644
index 00000000..51e0ff9c
--- /dev/null
+++ b/image/bin/cli-protonj2-sender
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_PROTONJ2_OPTS} -jar /opt/cli-java/cli-protonj2.jar sender $@
diff --git a/image/bin/cli-qpid-connector b/image/bin/cli-qpid-connector
new file mode 100644
index 00000000..50f9766f
--- /dev/null
+++ b/image/bin/cli-qpid-connector
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_QPID_OPTS} -jar /opt/cli-java/cli-qpid.jar receiver $@
diff --git a/image/bin/cli-qpid-receiver b/image/bin/cli-qpid-receiver
new file mode 100644
index 00000000..50f9766f
--- /dev/null
+++ b/image/bin/cli-qpid-receiver
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_QPID_OPTS} -jar /opt/cli-java/cli-qpid.jar receiver $@
diff --git a/image/bin/cli-qpid-sender b/image/bin/cli-qpid-sender
new file mode 100644
index 00000000..81a92797
--- /dev/null
+++ b/image/bin/cli-qpid-sender
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java ${JAVA_OPTS} ${CLI_QPID_OPTS} -jar /opt/cli-java/cli-qpid.jar sender $@
diff --git a/image/build_podman.sh b/image/build_podman.sh
new file mode 100755
index 00000000..3d6428f7
--- /dev/null
+++ b/image/build_podman.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+
+#
+# Copyright (c) 2022 Red Hat, Inc.
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+set -Eeuo pipefail
+set -x
+
+ARCH="amd64 arm64 ppc64le s390x"
+VERSION="${1:-latest}"
+REGISTRY="${2:-quay.io}"
+NAMESPACE="${3:-messaging}"
+
+IMAGE_NAME="${REGISTRY}/${NAMESPACE}/cli-java:${VERSION}"
+
+# https://docs.docker.com/build/buildx/multiplatform-images/
+sudo podman run --privileged --rm docker.io/tonistiigi/binfmt --install all
+podman manifest rm ${IMAGE_NAME} || true
+
+# https://gitlab.cee.redhat.com/keycloak/rhsso-openshift-intermediate-docker-image/-/blob/main/build.sh
+echo "Creating a new manifest: ${IMAGE_NAME}"
+podman manifest create ${IMAGE_NAME}
+
+echo "Building a new docker image: ${IMAGE_NAME}, arch: ${ARCH}"
+for i in $ARCH
+do
+ podman build --arch=$i -t ${IMAGE_NAME}.${i} --build-arg ARCH=${i} --build-arg VERSION=${VERSION} .
+ podman push ${IMAGE_NAME}.${i}
+ podman manifest add ${IMAGE_NAME} ${IMAGE_NAME}.${i}
+done
+
+echo "Pushing a new manifest: ${IMAGE_NAME}"
+podman manifest push ${IMAGE_NAME} docker://${IMAGE_NAME}
diff --git a/interop-tests/src/test/java/InteropTest.java b/interop-tests/src/test/java/InteropTest.java
index f1880632..5f1b622b 100644
--- a/interop-tests/src/test/java/InteropTest.java
+++ b/interop-tests/src/test/java/InteropTest.java
@@ -2,6 +2,8 @@
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.jetbrains.annotations.NotNull;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import javax.jms.Connection;
@@ -24,6 +26,7 @@ class InteropTestJava {
// Truth.assertThat(Map.of("key", "value")).containsExactlyEntriesIn(n);
// }
+ @Disabled("Fails, not sure what was ment by this")
@Test
void testComparingMapWithNullValues() {
Map m = new HashMap<>();
@@ -38,6 +41,8 @@ void testComparingMapWithNullValues() {
*
* @throws Exception
*/
+ @Disabled("Fails with broker, java.lang.RuntimeException: class java.util.ArrayList is not a valid property type")
+ @Tag("external")
@Test
void testSendRhealikeMessage() throws Exception {
sendRhealikeMessageToQueue();
diff --git a/interop-tests/src/test/kotlin/InteropTest.kt b/interop-tests/src/test/kotlin/InteropTest.kt
index cdc5cd39..052c5ccf 100644
--- a/interop-tests/src/test/kotlin/InteropTest.kt
+++ b/interop-tests/src/test/kotlin/InteropTest.kt
@@ -20,6 +20,8 @@
import com.google.common.truth.Truth
import com.google.common.truth.Truth.assertThat
import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Disabled
+import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.Arguments
@@ -28,6 +30,7 @@ import java.util.stream.Stream
import kotlin.reflect.full.companionObject
+@Disabled("This no longer works, esp due to jmslib/jakartalib clashes")
class InteropTest : AbstractTest() {
override val prefix: String = "interopTestAddress"
@@ -44,6 +47,7 @@ class InteropTest : AbstractTest() {
randomSuffix = generateRandomSuffix()
}
+ @Tag("external")
@ParameterizedTest(name = "{0} -> {1}")
@MethodSource("clientCombinationsProvider")
fun `send browse receive empty message`(senderName: String, receiverName: String) {
@@ -57,6 +61,7 @@ class InteropTest : AbstractTest() {
assertMessagesAreIdentical(address, s, b, r)
}
+ @Tag("external")
@ParameterizedTest(name = "{0} -> {1}")
@MethodSource("clientCombinationsProvider")
fun `send browse receive empty transient message`(senderName: String, receiverName: String) {
@@ -70,6 +75,7 @@ class InteropTest : AbstractTest() {
assertMessagesAreIdentical(address, s, b, r)
}
+ @Tag("external")
@ParameterizedTest(name = "{0} -> {1}")
@MethodSource("clientCombinationsProvider")
fun `send receive empty message on topic`(senderName: String, receiverName: String) {
@@ -91,6 +97,7 @@ class InteropTest : AbstractTest() {
Truth.assertThat(mapOf("key" to "null")).containsExactlyEntriesIn(mapOf("key" to null))
}
+ @Tag("external")
@ParameterizedTest(name = "{0} -> {1}")
@MethodSource("clientCombinationsProvider")
fun `send browse receive expired durable message`(senderName: String, receiverName: String) {
@@ -117,6 +124,7 @@ class InteropTest : AbstractTest() {
//acc-aac -> send two woth content, autocreate, use 616161... 3:26 Dec 11 2016
/// You'd have to configure lvq for this to work
+ @Tag("external")
@ParameterizedTest(name = "{0} -> {1}")
@MethodSource("clientCombinationsProvider")
fun `send receive with LVQ`(senderName: String, receiverName: String) {
diff --git a/jmslib/src/main/java/com/redhat/mqe/lib/ReceiverClient.java b/jmslib/src/main/java/com/redhat/mqe/lib/ReceiverClient.java
index f9a19cf4..3dcaf9eb 100644
--- a/jmslib/src/main/java/com/redhat/mqe/lib/ReceiverClient.java
+++ b/jmslib/src/main/java/com/redhat/mqe/lib/ReceiverClient.java
@@ -155,7 +155,7 @@ private void unsubscribe() {
try {
session.unsubscribe(durableSubscriberName);
} catch (JMSException e) {
- LOG.error("Error while unsubscribing durable subscriptor " + durableSubscriberName);
+ LOG.error("Error while unsubscribing durable subscriber " + durableSubscriberName);
e.printStackTrace();
} finally {
close(session);
diff --git a/lib/pom.xml b/lib/pom.xml
index 256c2e59..fead7fc8 100644
--- a/lib/pom.xml
+++ b/lib/pom.xml
@@ -33,6 +33,10 @@
lib
+
+ org.apache.logging.log4j
+ log4j-core
+
com.fasterxml.jackson.core
jackson-databind
diff --git a/lib/src/main/java/com/redhat/mqe/lib/Utils.java b/lib/src/main/java/com/redhat/mqe/lib/Utils.java
index 47b6cde2..ddd669f0 100644
--- a/lib/src/main/java/com/redhat/mqe/lib/Utils.java
+++ b/lib/src/main/java/com/redhat/mqe/lib/Utils.java
@@ -19,8 +19,8 @@
package com.redhat.mqe.lib;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -114,13 +114,12 @@ public static void sleepUntilNextIteration(double initialTimestamp, int msgCount
* specified, default level is used from *logger* properties file.
* (As of the time writing - simplelogger.properties is used as default.)
*
- * NOTE: SLF4J is not capable of changing log levels programatically!
+ * NOTE: SLF4J is not capable of changing log levels programmatically!
* We have to change the System/File property of given underlying logger.
*
* @param logLevel logging level to be logger set to
*/
public static void setLogLevel(String logLevel) {
- org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger("com.redhat.mqe.jms");
Level level;
switch (logLevel.toLowerCase()) {
case "all":
@@ -150,8 +149,8 @@ public static void setLogLevel(String logLevel) {
default:
level = Level.INFO;
}
- LogManager.getRootLogger().setLevel(level);
- logger.setLevel(level);
+ ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).setLevel(level);
+ ((org.apache.logging.log4j.core.Logger) LogManager.getLogger("com.redhat.mqe.lib")).setLevel(level);
}
/**
diff --git a/parent/pom.xml b/parent/pom.xml
index 74a06cb5..aa9d69b7 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -44,7 +44,15 @@
org.slf4j
- slf4j-log4j12
+ slf4j-api
+
+
+ org.apache.logging.log4j
+ log4j-slf4j2-impl
+
+
+ org.apache.logging.log4j
+ log4j-core
net.sf.jopt-simple
@@ -121,6 +129,7 @@
tests
+
@@ -128,30 +137,6 @@
tests
-
-
-
- kotlin-maven-plugin
- org.jetbrains.kotlin
- ${kotlin.version}
-
-
- test-compile
-
- test-compile
-
-
- 1.8
-
- ${project.basedir}/src/test/kotlin
- ${project.basedir}/src/test/java
-
-
-
-
-
-
-
coverage
@@ -197,11 +182,13 @@
${jar.finalName}-${library.version}
+ false
${jar.main.class}
+ true
@@ -234,13 +221,14 @@
${excludeTests}
+
org.apache.maven.plugins
maven-compiler-plugin
${plugin.compiler.version}
- 1.8
- 1.8
+ 11
+ 11
-Xlint:all
true
true
@@ -252,22 +240,61 @@
+
+
+
+ default-compile
+ none
+
+
+
+ default-testCompile
+ none
+
+
+ java-compile
+ compile
+
+ compile
+
+
+
+ java-test-compile
+ test-compile
+
+ testCompile
+
+
+
kotlin-maven-plugin
org.jetbrains.kotlin
${kotlin.version}
+
+ compile
+
+ compile
+
+
+ 11
+
+ ${project.basedir}/src/main/kotlin
+ ${project.basedir}/src/main/java
+
+
+
test-compile
test-compile
+ 11
${project.basedir}/src/test/kotlin
${project.basedir}/src/test/java
- ${project.build.directory}/generated-sources/annotations
diff --git a/pom.xml b/pom.xml
index 53a9daec..654b3215 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,8 +29,8 @@
pom
- 1.8
- 1.8
+ 11
+ 11
UTF-8
@@ -46,44 +46,14 @@
cli-activemq
cli-artemis-jms
cli-paho-java
+ cli-protonj2
+ cli-qpid-jms
+
+ cli-activemq-jmx
+
broker
-
-
-
-
- false
-
- bintray
- https://jcenter.bintray.com
-
-
-
-
-
- false
-
- bintray-plugins
- https://jcenter.bintray.com
-
-
+ interop-tests
+
-
-
- interop-tests
-
- interop-tests
-
-
-
- java11plus
-
- [11,)
-
-
- cli-protonj2
- cli-qpid-jms
-
-
-
diff --git a/scripts/broker.xml.patch b/scripts/broker.xml.patch
index 94f384e4..e641bb80 100644
--- a/scripts/broker.xml.patch
+++ b/scripts/broker.xml.patch
@@ -14,7 +14,7 @@ index 2ef08a9..4e61d0b 100644
@@ -158,9 +158,11 @@ under the License.
- tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true
+ tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true;supportAdvisory=false;suppressInternalManagementObjects=false
+ tcp://0.0.0.0:61617?sslEnabled=true;keyStorePath=server-side-keystore.jks;keyStorePassword=secureexample;tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true
diff --git a/scripts/entrypoint.sh b/scripts/entrypoint.sh
index d6ff8ce3..157cdc01 100755
--- a/scripts/entrypoint.sh
+++ b/scripts/entrypoint.sh
@@ -32,7 +32,8 @@ if [ ! "$(ls -A /var/lib/amq7/etc)" ]; then
fi
# Log to tty to enable docker logs container-name
-sed -ie "s/logger.handlers=.*/logger.handlers=CONSOLE/g" ../etc/logging.properties
+# TODO: this no longer works with log4j2 logging
+#sed -ie "s/logger.handlers=.*/logger.handlers=CONSOLE/g" ../etc/logging.properties
# Update min memory if the argument is passed
if [[ "$ARTEMIS_MIN_MEMORY" ]]; then
diff --git a/tests/src/test/kotlin/AbstractMainTest.kt b/tests/src/test/kotlin/AbstractMainTest.kt
index 7e313848..48c872ce 100644
--- a/tests/src/test/kotlin/AbstractMainTest.kt
+++ b/tests/src/test/kotlin/AbstractMainTest.kt
@@ -32,11 +32,9 @@ import java.io.File
import java.math.BigInteger
import java.nio.file.Files
import java.security.MessageDigest
-import java.security.Permission
import java.time.Duration
import java.time.LocalTime
import kotlin.collections.ArrayList
-import kotlin.test.fail
@Tag("external")
abstract class AbstractMainTest : AbstractTest() {
@@ -84,17 +82,9 @@ abstract class AbstractMainTest : AbstractTest() {
fun printHelp(client: String) {
val parameters =
"$client --help".split(" ").toTypedArray()
- val previousManager = System.getSecurityManager()
- try {
- val manager = NoExitSecurityManager(previousManager)
- System.setSecurityManager(manager)
+ assertSystemExit(0, Executable {
main(parameters)
- fail("expected exception")
- } catch (e: SystemExitingWithStatus) {
- assertThat(e.status).isEqualTo(0)
- } finally {
- System.setSecurityManager(previousManager)
- }
+ })
}
@Tag("external")
@@ -136,7 +126,9 @@ abstract class AbstractMainTest : AbstractTest() {
"connector --broker $brokerUrl --address $address --count 1".split(" ").toTypedArray()
assertTimeoutPreemptively(Duration.ofSeconds(10)) {
print("Connecting: ")
- main(connectorParameters)
+ assertNoSystemExit {
+ main(connectorParameters)
+ }
}
}
@@ -144,9 +136,13 @@ abstract class AbstractMainTest : AbstractTest() {
@Test
fun sendAndReceiveSingleMessageUsingCredentials() {
val senderParameters =
- "sender --log-msgs dict --broker $brokerUrl --address $address --conn-username admin --conn-password admin --count 1".split(" ").toTypedArray()
+ "sender --log-msgs dict --broker $brokerUrl --address $address --conn-username admin --conn-password admin --count 1".split(
+ " "
+ ).toTypedArray()
val receiverParameters =
- "receiver --log-msgs dict --broker $brokerUrl --address $address --conn-username admin --conn-password admin --count 1".split(" ").toTypedArray()
+ "receiver --log-msgs dict --broker $brokerUrl --address $address --conn-username admin --conn-password admin --count 1".split(
+ " "
+ ).toTypedArray()
assertTimeoutPreemptively(Duration.ofSeconds(10)) {
print("Sending: ")
main(senderParameters)
@@ -155,13 +151,29 @@ abstract class AbstractMainTest : AbstractTest() {
}
}
+ @Tag("external")
+ @Test
+ fun test_simple_transaction_sender_batch_size_leftovers() {
+ print("Sending:\n ")
+ val sent = main(
+ "sender --log-msgs interop --broker $brokerUrl --conn-auth-mechanisms PLAIN --conn-username admin --conn-password admin --address $address --count 11 --tx-size 3 --tx-action commit".split(" ").toTypedArray()
+ )
+ print("Receiving:\n ")
+ val received = main(
+ "receiver --timeout 10 --log-msgs interop --broker $brokerUrl --conn-auth-mechanisms PLAIN --conn-username admin --conn-password admin --address $address --count 0".split(" ").toTypedArray()
+ )
+ assertThat(sent).hasSize(11)
+ assertThat(received).hasSize(9)
+ }
+
@Tag("external")
@Test
fun sendBrowseAndReceiveSingleMessageWithEmptySelector() {
val senderParameters =
"sender --log-msgs dict --broker $brokerUrl --address $address --count 1".split(" ").toTypedArray()
val receiverParameters =
- "receiver --log-msgs dict --broker $brokerUrl --address $address --msg-selector '' --count 1".split(" ").toTypedArray()
+ "receiver --log-msgs dict --broker $brokerUrl --address $address --msg-selector '' --count 1".split(" ")
+ .toTypedArray()
assertTimeoutPreemptively(Duration.ofSeconds(10)) {
print("Sending: ")
main(senderParameters)
@@ -203,9 +215,11 @@ abstract class AbstractMainTest : AbstractTest() {
@Test
fun sendAndReceiveSingleMessageLogJson() {
val senderParameters =
- "sender --log-msgs dict --out json --broker $brokerUrl --address $address --count 1".split(" ").toTypedArray()
+ "sender --log-msgs dict --out json --broker $brokerUrl --address $address --count 1".split(" ")
+ .toTypedArray()
val receiverParameters =
- "receiver --log-msgs dict --out json --broker $brokerUrl --address $address --count 1".split(" ").toTypedArray()
+ "receiver --log-msgs dict --out json --broker $brokerUrl --address $address --count 1".split(" ")
+ .toTypedArray()
assertTimeoutPreemptively(Duration.ofSeconds(10)) {
print("Sending: ")
main(senderParameters)
@@ -218,9 +232,12 @@ abstract class AbstractMainTest : AbstractTest() {
@Test
fun sendAndReceiveSingleMessageLogJsonFloatType() {
val senderParameters =
- "sender --log-msgs dict --out json --broker $brokerUrl --address $address --msg-property baf~42.2 --count 1".split(" ").toTypedArray()
+ "sender --log-msgs dict --out json --broker $brokerUrl --address $address --msg-property baf~42.2 --count 1".split(
+ " "
+ ).toTypedArray()
val receiverParameters =
- "receiver --log-msgs dict --out json --broker $brokerUrl --address $address --count 1".split(" ").toTypedArray()
+ "receiver --log-msgs dict --out json --broker $brokerUrl --address $address --count 1".split(" ")
+ .toTypedArray()
assertTimeoutPreemptively(Duration.ofSeconds(10)) {
print("Sending: ")
main(senderParameters)
@@ -283,7 +300,9 @@ abstract class AbstractMainTest : AbstractTest() {
@Test
fun sendAndReceiveListMessage() {
val senderParameters =
- """sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-list-item --msg-content-list-item "String" --msg-content-list-item "~1" --msg-content-list-item "~1.0" --msg-content-list-item "1" --msg-content-list-item "1.0" --msg-content-list-item "~-1" --msg-content-list-item "~-1.3" --msg-content-list-item "-1" --msg-content-list-item "~~1"""".split(" ").toTypedArray()
+ """sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-list-item --msg-content-list-item "String" --msg-content-list-item "~1" --msg-content-list-item "~1.0" --msg-content-list-item "1" --msg-content-list-item "1.0" --msg-content-list-item "~-1" --msg-content-list-item "~-1.3" --msg-content-list-item "-1" --msg-content-list-item "~~1"""".split(
+ " "
+ ).toTypedArray()
val receiverParameters =
"receiver --log-msgs dict --broker $brokerUrl --address $address --count 1".split(" ").toTypedArray()
@@ -298,7 +317,9 @@ abstract class AbstractMainTest : AbstractTest() {
fun sendAndReceiveAnInt() {
assertNoSystemExit {
val senderParameters =
- """sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --content-type int --msg-content 1234""".split(" ").toTypedArray()
+ """sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --content-type int --msg-content 1234""".split(
+ " "
+ ).toTypedArray()
val receiverParameters =
"receiver --log-msgs dict --broker $brokerUrl --address $address --count 1".split(" ").toTypedArray()
@@ -316,7 +337,9 @@ abstract class AbstractMainTest : AbstractTest() {
try {
file.writeText("aContent")
val senderParameters =
- "sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-from-file $file".split(" ").toTypedArray()
+ "sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-from-file $file".split(
+ " "
+ ).toTypedArray()
val receiverParameters =
"receiver --log-msgs dict --broker $brokerUrl --address $address --count 1".split(" ").toTypedArray()
@@ -336,7 +359,9 @@ abstract class AbstractMainTest : AbstractTest() {
try {
file.writeText("aContent")
val senderParameters =
- "sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-from-file $file --msg-content-binary true".split(" ").toTypedArray()
+ "sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-from-file $file --msg-content-binary true".split(
+ " "
+ ).toTypedArray()
val receiverParameters =
"receiver --log-msgs dict --broker $brokerUrl --address $address --count 1".split(" ").toTypedArray()
@@ -355,7 +380,9 @@ abstract class AbstractMainTest : AbstractTest() {
assertSystemExit(2, Executable {
val file = "noSuchFile"
val senderParameters =
- "sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-from-file $file".split(" ").toTypedArray()
+ "sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-from-file $file".split(
+ " "
+ ).toTypedArray()
main(senderParameters)
})
}
@@ -366,7 +393,9 @@ abstract class AbstractMainTest : AbstractTest() {
assertSystemExit(2, Executable {
val file = "noSuchFile"
val senderParameters =
- "sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-from-file $file --msg-content-binary true".split(" ").toTypedArray()
+ "sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-from-file $file --msg-content-binary true".split(
+ " "
+ ).toTypedArray()
main(senderParameters)
})
}
@@ -381,9 +410,13 @@ abstract class AbstractMainTest : AbstractTest() {
try {
file.writeText("aContent")
val senderParameters =
- "sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-from-file $file".split(" ").toTypedArray()
+ "sender --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-from-file $file".split(
+ " "
+ ).toTypedArray()
val receiverParameters =
- "receiver --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-to-file $output".split(" ").toTypedArray()
+ "receiver --log-msgs dict --broker $brokerUrl --address $address --count 1 --msg-content-to-file $output".split(
+ " "
+ ).toTypedArray()
print("Sending: ")
main(senderParameters)
@@ -403,7 +436,8 @@ abstract class AbstractMainTest : AbstractTest() {
val senderParameters =
"sender --log-msgs dict --broker $brokerUrl --address topic://$address --count 1".split(" ").toTypedArray()
val receiverParameters =
- "receiver --log-msgs dict --broker $brokerUrl --address topic://$address --count 1".split(" ").toTypedArray()
+ "receiver --log-msgs dict --broker $brokerUrl --address topic://$address --count 1".split(" ")
+ .toTypedArray()
val t = Thread {
print("Receiving: ")
@@ -422,7 +456,9 @@ abstract class AbstractMainTest : AbstractTest() {
assertNoSystemExit {
// "sender --log-msgs dict --broker tcp://127.0.0.1:61617 --address lalaLand --count 1 --conn-ssl-truststore-location --conn-ssl-truststore-password secureexample --conn-ssl-keystore-location /home/jdanek/Downloads/AMQ7/amq7cr1i0/ikeysiold/client-side-keystore.jks --conn-ssl-keystore-password secureexample".split(" ").toTypedArray()
val senderParameters =
- "sender --log-msgs dict --broker $sslBrokerUrl --address $address --conn-ssl-verify-host false --conn-ssl-trust-all true --count 1".split(" ").toTypedArray()
+ "sender --log-msgs dict --broker $sslBrokerUrl --address $address --conn-ssl-verify-host false --conn-ssl-trust-all true --count 1".split(
+ " "
+ ).toTypedArray()
print("Sending: ")
main(senderParameters)
}
@@ -449,10 +485,36 @@ abstract class AbstractMainTest : AbstractTest() {
val expected = BigInteger(1, md.digest(content.toByteArray())).toString(16)
print(expected)
assertNoSystemExit {
- val sent = main(arrayOf(
- "sender", "--log-msgs", "dict", "--broker", brokerUrl, "--address", address, "--count", "1", "--msg-content", content, "--msg-content-hashed"))
- val received = main(arrayOf(
- "receiver", "--log-msgs", "dict", "--broker", brokerUrl, "--address", address, "--count", "1", "--msg-content-hashed"))
+ val sent = main(
+ arrayOf(
+ "sender",
+ "--log-msgs",
+ "dict",
+ "--broker",
+ brokerUrl,
+ "--address",
+ address,
+ "--count",
+ "1",
+ "--msg-content",
+ content,
+ "--msg-content-hashed"
+ )
+ )
+ val received = main(
+ arrayOf(
+ "receiver",
+ "--log-msgs",
+ "dict",
+ "--broker",
+ brokerUrl,
+ "--address",
+ address,
+ "--count",
+ "1",
+ "--msg-content-hashed"
+ )
+ )
assertThat(sent.map { it["content"] as String }).containsExactlyElementsIn(listOf(expected))
assertThat(received.map { it["content"] as String }).containsExactlyElementsIn(listOf(expected))