diff --git a/.gitignore b/.gitignore
index c80df7d958..9bfe0ec81b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,8 @@ ebin/
out/
tmp/
junit*.properties
+/target/
+/.DS_Store
+/.classpath
+/.project
+/.settings
diff --git a/Makefile b/Makefile
index 867f7f7f69..3e3f8d0631 100644
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,7 @@ WEB_URL=http://www.rabbitmq.com/
NEXUS_STAGE_URL=http://oss.sonatype.org/service/local/staging/deploy/maven2
MAVEN_NEXUS_VERSION=1.7
-AMQP_CODEGEN_DIR=$(shell fgrep sibling.codegen.dir build.properties | sed -e 's:sibling\.codegen\.dir=::')
+AMQP_CODEGEN_DIR=$(shell fgrep sibling.codegen.dir src/test/resources/build.properties | sed -e 's:sibling\.codegen\.dir=::')
MAVEN_RSYNC_DESTINATION=maven@195.224.125.254:/home/maven/rabbitmq-java-client/
diff --git a/README.md b/README.md
index fb712fa298..f045113d86 100644
--- a/README.md
+++ b/README.md
@@ -14,14 +14,14 @@ Maven artifacts are [released to Maven Central](http://search.maven.org/#search%
com.rabbitmq
amqp-client
- 3.5.5
+ 3.6.0
```
### Gradle
``` groovy
-compile 'com.rabbitmq:amqp-client:3.5.5'
+compile 'com.rabbitmq:amqp-client:3.6.0'
```
diff --git a/build.xml b/build.xml
index b0e0fe931f..847bfef516 100644
--- a/build.xml
+++ b/build.xml
@@ -2,8 +2,8 @@
-
-
+
+
@@ -81,7 +81,7 @@
-
@@ -341,6 +341,9 @@
+
+
+
@@ -365,6 +368,9 @@
+
+
+
@@ -381,6 +387,9 @@
+
+
+
@@ -399,6 +408,9 @@
+
+
+
diff --git a/pom.xml b/pom.xml
index 5db8422d17..c55190e876 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,77 +1,277 @@
-
- 4.0.0
- com.rabbitmq
- amqp-client
- VERSION
- jar
- RabbitMQ Java Client
- RabbitMQ Java client
- http://www.rabbitmq.com
+
+ 4.0.0
-
-
- ASL 2.0
- http://www.apache.org/licenses/LICENSE-2.0.html
- repo
-
-
- GPL v2
- http://www.gnu.org/licenses/gpl-2.0.txt
- repo
-
-
- MPL 1.1
- http://www.mozilla.org/MPL/MPL-1.1.txt
- repo
-
-
+ com.rabbitmq
+ amqp-client
+ 3.7.0-SNAPSHOT
+ jar
-
- https://github.com/rabbitmq/rabbitmq-java-client.git
- scm:git:https://github.com/rabbitmq/rabbitmq-java-client.git
-
+ RabbitMQ Java Client
+ RabbitMQ Java client
+ http://www.rabbitmq.com
-
-
- rabbitmq.team
- The RabbitMQ Team
-
- Developer
-
-
-
+
+
+ ASL 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.html
+ repo
+
+
+ GPL v2
+ http://www.gnu.org/licenses/gpl-2.0.txt
+ repo
+
+
+ MPL 1.1
+ http://www.mozilla.org/MPL/MPL-1.1.txt
+ repo
+
+
-
+
+ https://github.com/rabbitmq/rabbitmq-java-client.git
+ scm:git:https://github.com/rabbitmq/rabbitmq-java-client.git
+
-
- commons-cli
- commons-cli
- 1.1
- test
-
+
+
+ rabbitmq.team
+ The RabbitMQ Team
+
+ Developer
+
+
+
-
- commons-io
- commons-io
- 1.2
- test
-
+
+ UTF-8
+
-
- junit
- junit
- 4.12
- test
-
+
+
+ commons-cli
+ commons-cli
+ 1.1
+ test
+
+
+ commons-io
+ commons-io
+ 1.2
+ test
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
-
+
+
+
+
+ maven-clean-plugin
+ 3.0.0
+
+
+
+ ${basedir}/build
+
+ **/*
+
+ false
+
+
+
+
+
+ maven-antrun-plugin
+ 1.7
+
+
+ generate-sources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ run
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 1.10
+
+
+ add-source
+ generate-sources
+
+ add-source
+
+
+
+ build/gensrc
+
+
+
+
+
+
+ maven-compiler-plugin
+ 3.2
+
+ 1.6
+ 1.6
+
+ -Xlint:deprecation
+ -Xlint:unchecked
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.9
+
+
+ ${project.build.directory}
+
+ true
+
+ **/ClientTests.*
+ **/FunctionalTests.*
+ **/SSLTests.*
+ **/ServerTests.*
+ **/FunctionalTests.*
+ **/HATests.*
+ **/TestMain.*
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 2.6
+
+ true
+
+ true
+ true
+
+ true
+
+
+
+
+
+
+ jar
+ test-jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 2.4
+
+
+
+ jar
+ test-jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 2.10.3
+
+ -Xdoclint:none
+
+
+
+
+ jar
+ test-jar
+
+
+
+
+
+ org.codehaus.mojo
+ versions-maven-plugin
+ 2.2
+
+
+
-
-
- sonatype-nexus-staging
- Nexus Release Repository
- http://oss.sonatype.org/service/local/staging/deploy/maven2/
-
-
+
+
+ sonatype-nexus-staging
+ Nexus Release Repository
+ http://oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
diff --git a/scripts/runperftestMaven.sh b/scripts/runperftestMaven.sh
new file mode 100755
index 0000000000..6bca7b6f7f
--- /dev/null
+++ b/scripts/runperftestMaven.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+cd `dirname $0`/..
+run() {
+ echo "=== running with '$2'"
+ mvn -q exec:java -Dexec.classpathScope=test -Dexec.mainClass="com.rabbitmq.examples.PerfTest" -Dexec.args=" -h $1 -z 10 -i 20 $2"
+ sleep 2
+}
+
+for sz in "" "-s 1000"; do
+ for pers in "" "-f persistent"; do
+ for args in \
+ "" \
+ "-a" \
+ "-m 1" \
+ "-m 1 -n 1" \
+ "-m 10" \
+ "-m 10 -n 10" \
+ ; do
+ run $1 "${args} ${pers} ${sz}"
+ done
+ done
+done
+
+for args in "-a -f mandatory" "-a -f mandatory -f immediate"; do
+ run $1 "$args"
+done
diff --git a/scripts/stresspersisterMaven.sh b/scripts/stresspersisterMaven.sh
new file mode 100755
index 0000000000..a6e1182d04
--- /dev/null
+++ b/scripts/stresspersisterMaven.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+cd `dirname $0`/..
+commentText=$1
+shift
+
+if [ -z "$commentText" ]; then
+ echo "Comment text must be supplied!"
+ exit 1
+fi
+
+echo "Comment text: $commentText. Press enter to continue."
+read dummy
+
+function run1 {
+ (while true; do (date +%s.%N; ps ax -o '%mem rss sz vsz args' | grep "beam.*-s rabbit" | grep -v grep) | tr '\n' ' ' | awk '{print $1,$2/100,$3,$4,$5}'; sleep 1; done) > memlog.txt &
+ memlogger=$!
+ echo "STARTED MEMLOGGER $memlogger"
+ sleep 2
+ mvn -q exec:java -Dexec.classpathScope=test -Dexec.mainClass="com.rabbitmq.examples.StressPersister" -Dexec.args=" -B $1 -b $2 -C $commentText "| tee stressoutput.txt
+ logfile=$(head -1 stressoutput.txt)
+ sleep 2
+ kill $memlogger
+ echo "STOPPED MEMLOGGER $memlogger"
+ baselog=$(basename $logfile .out)
+ mv memlog.txt $baselog.mem
+ grep -v '^#' $logfile > stressoutput.txt
+ mv stressoutput.txt $logfile
+}
+
+function run32b {
+ run1 32b 5000
+ run1 32b 10000
+ run1 32b 20000
+ run1 32b 40000
+ run1 32b 80000
+}
+
+function run1m {
+ run1 1m 125
+ run1 1m 250
+ run1 1m 500
+ run1 1m 1000
+ run1 1m 2000
+ run1 1m 4000
+}
+
+function chartall {
+ for logfile in *.out
+ do
+ echo $logfile
+ baselog=$(basename $logfile .out)
+ firsttimestamp=$(cat $baselog.mem | head -1 | awk '{print $1}')
+ cat > $baselog.gnuplot < $baselog.png
+ done
+}
+
+run32b
+run1m
+chartall
diff --git a/src/com/rabbitmq/client/Address.java b/src/main/java/com/rabbitmq/client/Address.java
similarity index 100%
rename from src/com/rabbitmq/client/Address.java
rename to src/main/java/com/rabbitmq/client/Address.java
diff --git a/src/com/rabbitmq/client/AlreadyClosedException.java b/src/main/java/com/rabbitmq/client/AlreadyClosedException.java
similarity index 100%
rename from src/com/rabbitmq/client/AlreadyClosedException.java
rename to src/main/java/com/rabbitmq/client/AlreadyClosedException.java
diff --git a/src/com/rabbitmq/client/AuthenticationFailureException.java b/src/main/java/com/rabbitmq/client/AuthenticationFailureException.java
similarity index 100%
rename from src/com/rabbitmq/client/AuthenticationFailureException.java
rename to src/main/java/com/rabbitmq/client/AuthenticationFailureException.java
diff --git a/src/com/rabbitmq/client/BasicProperties.java b/src/main/java/com/rabbitmq/client/BasicProperties.java
similarity index 100%
rename from src/com/rabbitmq/client/BasicProperties.java
rename to src/main/java/com/rabbitmq/client/BasicProperties.java
diff --git a/src/com/rabbitmq/client/BlockedListener.java b/src/main/java/com/rabbitmq/client/BlockedListener.java
similarity index 100%
rename from src/com/rabbitmq/client/BlockedListener.java
rename to src/main/java/com/rabbitmq/client/BlockedListener.java
diff --git a/src/com/rabbitmq/client/Channel.java b/src/main/java/com/rabbitmq/client/Channel.java
similarity index 100%
rename from src/com/rabbitmq/client/Channel.java
rename to src/main/java/com/rabbitmq/client/Channel.java
diff --git a/src/com/rabbitmq/client/Command.java b/src/main/java/com/rabbitmq/client/Command.java
similarity index 100%
rename from src/com/rabbitmq/client/Command.java
rename to src/main/java/com/rabbitmq/client/Command.java
diff --git a/src/com/rabbitmq/client/ConfirmListener.java b/src/main/java/com/rabbitmq/client/ConfirmListener.java
similarity index 100%
rename from src/com/rabbitmq/client/ConfirmListener.java
rename to src/main/java/com/rabbitmq/client/ConfirmListener.java
diff --git a/src/com/rabbitmq/client/Connection.java b/src/main/java/com/rabbitmq/client/Connection.java
similarity index 98%
rename from src/com/rabbitmq/client/Connection.java
rename to src/main/java/com/rabbitmq/client/Connection.java
index e733ce957a..203ae7d73d 100644
--- a/src/com/rabbitmq/client/Connection.java
+++ b/src/main/java/com/rabbitmq/client/Connection.java
@@ -16,6 +16,7 @@
package com.rabbitmq.client;
+import java.io.Closeable;
import java.io.IOException;
import java.net.InetAddress;
import java.util.Map;
@@ -50,7 +51,7 @@
* Current implementations are thread-safe for code at the client API level,
* and in fact thread-safe internally except for code within RPC calls.
*/
-public interface Connection extends ShutdownNotifier { // rename to AMQPConnection later, this is a temporary name
+public interface Connection extends ShutdownNotifier, Closeable { // rename to AMQPConnection later, this is a temporary name
/**
* Retrieve the host.
* @return the hostname of the peer we're connected to.
diff --git a/src/com/rabbitmq/client/ConnectionFactory.java b/src/main/java/com/rabbitmq/client/ConnectionFactory.java
similarity index 100%
rename from src/com/rabbitmq/client/ConnectionFactory.java
rename to src/main/java/com/rabbitmq/client/ConnectionFactory.java
diff --git a/src/com/rabbitmq/client/Consumer.java b/src/main/java/com/rabbitmq/client/Consumer.java
similarity index 100%
rename from src/com/rabbitmq/client/Consumer.java
rename to src/main/java/com/rabbitmq/client/Consumer.java
diff --git a/src/com/rabbitmq/client/ConsumerCancelledException.java b/src/main/java/com/rabbitmq/client/ConsumerCancelledException.java
similarity index 100%
rename from src/com/rabbitmq/client/ConsumerCancelledException.java
rename to src/main/java/com/rabbitmq/client/ConsumerCancelledException.java
diff --git a/src/com/rabbitmq/client/ContentHeader.java b/src/main/java/com/rabbitmq/client/ContentHeader.java
similarity index 100%
rename from src/com/rabbitmq/client/ContentHeader.java
rename to src/main/java/com/rabbitmq/client/ContentHeader.java
diff --git a/src/com/rabbitmq/client/DefaultConsumer.java b/src/main/java/com/rabbitmq/client/DefaultConsumer.java
similarity index 100%
rename from src/com/rabbitmq/client/DefaultConsumer.java
rename to src/main/java/com/rabbitmq/client/DefaultConsumer.java
diff --git a/src/com/rabbitmq/client/DefaultSaslConfig.java b/src/main/java/com/rabbitmq/client/DefaultSaslConfig.java
similarity index 100%
rename from src/com/rabbitmq/client/DefaultSaslConfig.java
rename to src/main/java/com/rabbitmq/client/DefaultSaslConfig.java
diff --git a/src/com/rabbitmq/client/DefaultSocketConfigurator.java b/src/main/java/com/rabbitmq/client/DefaultSocketConfigurator.java
similarity index 100%
rename from src/com/rabbitmq/client/DefaultSocketConfigurator.java
rename to src/main/java/com/rabbitmq/client/DefaultSocketConfigurator.java
diff --git a/src/com/rabbitmq/client/Envelope.java b/src/main/java/com/rabbitmq/client/Envelope.java
similarity index 100%
rename from src/com/rabbitmq/client/Envelope.java
rename to src/main/java/com/rabbitmq/client/Envelope.java
diff --git a/src/com/rabbitmq/client/ExceptionHandler.java b/src/main/java/com/rabbitmq/client/ExceptionHandler.java
similarity index 100%
rename from src/com/rabbitmq/client/ExceptionHandler.java
rename to src/main/java/com/rabbitmq/client/ExceptionHandler.java
diff --git a/src/com/rabbitmq/client/FlowListener.java b/src/main/java/com/rabbitmq/client/FlowListener.java
similarity index 100%
rename from src/com/rabbitmq/client/FlowListener.java
rename to src/main/java/com/rabbitmq/client/FlowListener.java
diff --git a/src/com/rabbitmq/client/GetResponse.java b/src/main/java/com/rabbitmq/client/GetResponse.java
similarity index 100%
rename from src/com/rabbitmq/client/GetResponse.java
rename to src/main/java/com/rabbitmq/client/GetResponse.java
diff --git a/src/com/rabbitmq/client/JDKSaslConfig.java b/src/main/java/com/rabbitmq/client/JDKSaslConfig.java
similarity index 100%
rename from src/com/rabbitmq/client/JDKSaslConfig.java
rename to src/main/java/com/rabbitmq/client/JDKSaslConfig.java
diff --git a/src/com/rabbitmq/client/LongString.java b/src/main/java/com/rabbitmq/client/LongString.java
similarity index 100%
rename from src/com/rabbitmq/client/LongString.java
rename to src/main/java/com/rabbitmq/client/LongString.java
diff --git a/src/com/rabbitmq/client/MalformedFrameException.java b/src/main/java/com/rabbitmq/client/MalformedFrameException.java
similarity index 100%
rename from src/com/rabbitmq/client/MalformedFrameException.java
rename to src/main/java/com/rabbitmq/client/MalformedFrameException.java
diff --git a/src/com/rabbitmq/client/MapRpcServer.java b/src/main/java/com/rabbitmq/client/MapRpcServer.java
similarity index 100%
rename from src/com/rabbitmq/client/MapRpcServer.java
rename to src/main/java/com/rabbitmq/client/MapRpcServer.java
diff --git a/src/com/rabbitmq/client/MessageProperties.java b/src/main/java/com/rabbitmq/client/MessageProperties.java
similarity index 100%
rename from src/com/rabbitmq/client/MessageProperties.java
rename to src/main/java/com/rabbitmq/client/MessageProperties.java
diff --git a/src/com/rabbitmq/client/Method.java b/src/main/java/com/rabbitmq/client/Method.java
similarity index 100%
rename from src/com/rabbitmq/client/Method.java
rename to src/main/java/com/rabbitmq/client/Method.java
diff --git a/src/com/rabbitmq/client/MissedHeartbeatException.java b/src/main/java/com/rabbitmq/client/MissedHeartbeatException.java
similarity index 100%
rename from src/com/rabbitmq/client/MissedHeartbeatException.java
rename to src/main/java/com/rabbitmq/client/MissedHeartbeatException.java
diff --git a/src/com/rabbitmq/client/NullTrustManager.java b/src/main/java/com/rabbitmq/client/NullTrustManager.java
similarity index 100%
rename from src/com/rabbitmq/client/NullTrustManager.java
rename to src/main/java/com/rabbitmq/client/NullTrustManager.java
diff --git a/src/com/rabbitmq/client/PossibleAuthenticationFailureException.java b/src/main/java/com/rabbitmq/client/PossibleAuthenticationFailureException.java
similarity index 100%
rename from src/com/rabbitmq/client/PossibleAuthenticationFailureException.java
rename to src/main/java/com/rabbitmq/client/PossibleAuthenticationFailureException.java
diff --git a/src/com/rabbitmq/client/ProtocolVersionMismatchException.java b/src/main/java/com/rabbitmq/client/ProtocolVersionMismatchException.java
similarity index 100%
rename from src/com/rabbitmq/client/ProtocolVersionMismatchException.java
rename to src/main/java/com/rabbitmq/client/ProtocolVersionMismatchException.java
diff --git a/src/com/rabbitmq/client/QueueingConsumer.java b/src/main/java/com/rabbitmq/client/QueueingConsumer.java
similarity index 100%
rename from src/com/rabbitmq/client/QueueingConsumer.java
rename to src/main/java/com/rabbitmq/client/QueueingConsumer.java
diff --git a/src/com/rabbitmq/client/Recoverable.java b/src/main/java/com/rabbitmq/client/Recoverable.java
similarity index 100%
rename from src/com/rabbitmq/client/Recoverable.java
rename to src/main/java/com/rabbitmq/client/Recoverable.java
diff --git a/src/com/rabbitmq/client/RecoveryListener.java b/src/main/java/com/rabbitmq/client/RecoveryListener.java
similarity index 79%
rename from src/com/rabbitmq/client/RecoveryListener.java
rename to src/main/java/com/rabbitmq/client/RecoveryListener.java
index 88b0ece2e5..756075a55a 100644
--- a/src/com/rabbitmq/client/RecoveryListener.java
+++ b/src/main/java/com/rabbitmq/client/RecoveryListener.java
@@ -8,4 +8,5 @@
*/
public interface RecoveryListener {
public void handleRecovery(Recoverable recoverable);
+ public void handleRecoveryStarted(Recoverable recoverable);
}
diff --git a/src/com/rabbitmq/client/ReturnListener.java b/src/main/java/com/rabbitmq/client/ReturnListener.java
similarity index 100%
rename from src/com/rabbitmq/client/ReturnListener.java
rename to src/main/java/com/rabbitmq/client/ReturnListener.java
diff --git a/src/com/rabbitmq/client/RpcClient.java b/src/main/java/com/rabbitmq/client/RpcClient.java
similarity index 87%
rename from src/com/rabbitmq/client/RpcClient.java
rename to src/main/java/com/rabbitmq/client/RpcClient.java
index 379e36178c..230fec93b7 100644
--- a/src/com/rabbitmq/client/RpcClient.java
+++ b/src/main/java/com/rabbitmq/client/RpcClient.java
@@ -191,7 +191,7 @@ public void handleDelivery(String consumerTag,
String replyId = properties.getCorrelationId();
BlockingCell