Merge pull request #652 from mattrpav/AMQ-8248

[AMQ-8248] Upgrade Jetty to 9.4.40.v20210413
diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageConsumer.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageConsumer.java
index 764f8c9..3fc56cf 100644
--- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageConsumer.java
+++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageConsumer.java
@@ -1263,6 +1263,8 @@
                 for (Iterator<MessageDispatch> iter = deliveredMessages.iterator(); iter.hasNext();) {
                     MessageDispatch md = iter.next();
                     md.getMessage().onMessageRolledBack();
+                    // ensure we don't filter this as a duplicate
+                    session.connection.rollbackDuplicate(this, md.getMessage());
                 }
 
                 if (redeliveryPolicy.getMaximumRedeliveries() != RedeliveryPolicy.NO_MAXIMUM_REDELIVERIES
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerRedeliveryTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerRedeliveryTest.java
index fbc0212..2635c8f 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerRedeliveryTest.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerRedeliveryTest.java
@@ -23,6 +23,7 @@
 import javax.jms.MessageProducer;
 import javax.jms.Session;
 
+import junit.framework.Test;
 import org.apache.activemq.ActiveMQConnection;
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.activemq.RedeliveryPolicy;
@@ -40,12 +41,18 @@
 
     static final Logger LOG = LoggerFactory.getLogger(BrokerRedeliveryTest.class);
     BrokerService broker = null;
+    TransportConnector tcpConnector = null;
 
     final ActiveMQQueue destination = new ActiveMQQueue("Redelivery");
     final String data = "hi";
     final long redeliveryDelayMillis = 2000;
     long initialRedeliveryDelayMillis = 4000;
     int maxBrokerRedeliveries = 2;
+    public Boolean checkForDuplicates = Boolean.TRUE;
+
+    public void initCombosForTestScheduledRedelivery() {
+        addCombinationValues("checkForDuplicates", new Object[] {Boolean.TRUE, Boolean.FALSE});
+    }
 
     public void testScheduledRedelivery() throws Exception {
         doTestScheduledRedelivery(maxBrokerRedeliveries, true);
@@ -130,6 +137,8 @@
         Message dlqMessage = dlqConsumer.receive(2000);
         assertNotNull("Got message from dql", dlqMessage);
         assertEquals("message matches", message.getStringProperty("data"), dlqMessage.getStringProperty("data"));
+
+        consumerConnection.close();
     }
 
     public void testNoScheduledRedeliveryOfDuplicates() throws Exception {
@@ -178,6 +187,8 @@
         Message dlqMessage = dlqConsumer.receive(4000);
         assertNotNull("Got message from dql", dlqMessage);
         assertEquals("message matches", message.getStringProperty("data"), dlqMessage.getStringProperty("data"));
+
+        consumerConnection.close();
     }
 
     private void sendMessage(int timeToLive) throws Exception {
@@ -206,6 +217,7 @@
         broker = new BrokerService();
         broker.setPersistent(persistent);
         broker.setSchedulerSupport(true);
+        tcpConnector = broker.addConnector("tcp://localhost:0");
 
         RedeliveryPlugin redeliveryPlugin = new RedeliveryPlugin();
 
@@ -231,7 +243,7 @@
 
     @Override
     protected ActiveMQConnectionFactory createConnectionFactory() throws Exception {
-        return new ActiveMQConnectionFactory("vm://localhost");
+        return new ActiveMQConnectionFactory("failover:(" + tcpConnector.getPublishableConnectString() + ")?jms.checkForDuplicates=" + checkForDuplicates.toString());
     }
 
     @Override
@@ -239,4 +251,8 @@
         stopBroker();
         super.tearDown();
     }
+
+    public static Test suite() {
+        return suite(BrokerRedeliveryTest.class);
+    }
 }
diff --git a/assembly/src/release/bin/activemq b/assembly/src/release/bin/activemq
index 66fca3e..145844c 100755
--- a/assembly/src/release/bin/activemq
+++ b/assembly/src/release/bin/activemq
@@ -349,6 +349,8 @@
               --add-opens java.base/java.util=ALL-UNNAMED \
               --add-opens java.naming/javax.naming.spi=ALL-UNNAMED \
               --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED \
+              --add-opens java.base/java.util.concurrent=ALL-UNNAMED \
+              --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED \
               --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED \
               --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED \
               --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED \
@@ -390,6 +392,8 @@
                 --add-opens java.base/java.util=ALL-UNNAMED \
                 --add-opens java.naming/javax.naming.spi=ALL-UNNAMED \
                 --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED \
+                --add-opens java.base/java.util.concurrent=ALL-UNNAMED \
+                --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED \
                 --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED \
                 --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED \
                 --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED \
@@ -428,6 +432,8 @@
           --add-opens java.base/java.util=ALL-UNNAMED \
           --add-opens java.naming/javax.naming.spi=ALL-UNNAMED \
           --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED \
+          --add-opens java.base/java.util.concurrent=ALL-UNNAMED \
+          --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED \
           --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED \
           --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED \
           --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED \
@@ -476,7 +482,7 @@
         return 2
        fi
        local activemq_pid="`cat "$pidfile"`"
-       local RET="`ps -o "pid,args" | grep "^$activemq_pid\s.*java"`"
+       local RET="`ps -o "pid,args" | grep "^\s*$activemq_pid\s.*java"`"
        if [ -n "$RET" ];then
          return 0;
        else
diff --git a/assembly/src/release/bin/win32/wrapper.conf b/assembly/src/release/bin/win32/wrapper.conf
index 9bcd353..9a2ba9d 100644
--- a/assembly/src/release/bin/win32/wrapper.conf
+++ b/assembly/src/release/bin/win32/wrapper.conf
@@ -26,7 +26,7 @@
 set.default.ACTIVEMQ_DATA=%ACTIVEMQ_BASE%/data
 
 # if you use JDK 9+, uncomment the following
-#set.JDK_JAVA_OPTIONS=--add-reads=java.xml=java.logging --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.naming/javax.naming.spi=ALL-UNNAMED --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED --add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED
+#set.JDK_JAVA_OPTIONS=--add-reads=java.xml=java.logging --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens java.naming/javax.naming.spi=ALL-UNNAMED --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED --add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED
 
 wrapper.working.dir=.
 
diff --git a/assembly/src/release/bin/win64/wrapper.conf b/assembly/src/release/bin/win64/wrapper.conf
index 4862a05..46ed518 100644
--- a/assembly/src/release/bin/win64/wrapper.conf
+++ b/assembly/src/release/bin/win64/wrapper.conf
@@ -26,7 +26,7 @@
 set.default.ACTIVEMQ_DATA=%ACTIVEMQ_BASE%/data
 
 # if you use JDK 9+, uncomment the following
-#set.JDK_JAVA_OPTIONS=--add-reads=java.xml=java.logging --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.naming/javax.naming.spi=ALL-UNNAMED --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED --add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED
+#set.JDK_JAVA_OPTIONS=--add-reads=java.xml=java.logging --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens java.naming/javax.naming.spi=ALL-UNNAMED --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED --add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED
 
 wrapper.working.dir=.
 
diff --git a/pom.xml b/pom.xml
index 367a18e..80d9178 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,10 +91,10 @@
     <linkedin-zookeeper-version>1.4.0</linkedin-zookeeper-version>
     <zookeeper-version>3.4.14</zookeeper-version>
     <qpid-proton-version>0.33.8</qpid-proton-version>
-    <qpid-jms-version>0.55.0</qpid-jms-version>
-    <qpid-jms-netty-version>4.1.53.Final</qpid-jms-netty-version>
+    <qpid-jms-version>0.58.0</qpid-jms-version>
+    <qpid-jms-netty-version>4.1.63.Final</qpid-jms-netty-version>
     <qpid-jms-proton-version>0.33.8</qpid-jms-proton-version>
-    <netty-all-version>4.1.53.Final</netty-all-version>
+    <netty-all-version>4.1.63.Final</netty-all-version>
     <regexp-version>1.3</regexp-version>
     <rome-version>1.15.0</rome-version>
     <shiro-version>1.7.1</shiro-version>