You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2008/02/06 23:13:40 UTC
svn commit: r619182 - in /incubator/qpid/trunk/qpid/java:
client/src/main/java/org/apache/qpidity/nclient/
common/src/main/java/org/apache/qpidity/
common/src/main/java/org/apache/qpidity/transport/
common/src/test/java/org/apache/qpidity/transport/
Author: rhs
Date: Wed Feb 6 14:13:31 2008
New Revision: 619182
URL: http://svn.apache.org/viewvc?rev=619182&view=rev
Log:
added close notification
Modified:
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyBroker.java
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyClient.java
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Connection.java
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Echo.java
incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpidity/transport/ConnectionTest.java
Modified: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java Wed Feb 6 14:13:31 2008
@@ -49,6 +49,8 @@
ConnectionDelegate connectionDelegate = new ConnectionDelegate()
{
+ private boolean receivedClose = false;
+
public SessionDelegate getSessionDelegate()
{
return new ClientSessionDelegate();
@@ -62,7 +64,15 @@
}
else
{
- throw new RuntimeException("Connection closed",t);
+ throw new RuntimeException("connection closed",t);
+ }
+ }
+
+ public void closed()
+ {
+ if (_closedListner != null && !this.receivedClose)
+ {
+ _closedListner.onClosed(ErrorCode.CONNECTION_ERROR,ErrorCode.CONNECTION_ERROR.getDesc());
}
}
@@ -81,6 +91,8 @@
{
_closedListner.onClosed(errorCode, connectionClose.getReplyText());
}
+
+ this.receivedClose = true;
}
};
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyBroker.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyBroker.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyBroker.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyBroker.java Wed Feb 6 14:13:31 2008
@@ -276,6 +276,7 @@
{
t.printStackTrace();
}
+ public void closed() {}
};
//hack
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyClient.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyClient.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyClient.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/ToyClient.java Wed Feb 6 14:13:31 2008
@@ -73,6 +73,7 @@
{
t.printStackTrace();
}
+ public void closed() {}
});
conn.send(new ConnectionEvent(0, new ProtocolHeader(1, 0, 10)));
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Connection.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Connection.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Connection.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Connection.java Wed Feb 6 14:13:31 2008
@@ -127,6 +127,7 @@
it.remove();
}
}
+ delegate.closed();
}
public void close()
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java Wed Feb 6 14:13:31 2008
@@ -69,6 +69,8 @@
public abstract void exception(Throwable t);
+ public abstract void closed();
+
public void setCondition(Lock negotiationCompleteLock,Condition negotiationComplete)
{
_negotiationComplete = negotiationComplete;
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Echo.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Echo.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Echo.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Echo.java Wed Feb 6 14:13:31 2008
@@ -74,6 +74,7 @@
{
t.printStackTrace();
}
+ public void closed() {}
};
//hack
Modified: incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpidity/transport/ConnectionTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpidity/transport/ConnectionTest.java?rev=619182&r1=619181&r2=619182&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpidity/transport/ConnectionTest.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpidity/transport/ConnectionTest.java Wed Feb 6 14:13:31 2008
@@ -20,11 +20,15 @@
*/
package org.apache.qpidity.transport;
+import org.apache.mina.util.AvailablePortFinder;
+
import org.apache.qpidity.transport.network.mina.MinaHandler;
import org.apache.qpidity.transport.util.Logger;
import junit.framework.TestCase;
+import java.util.Random;
+
/**
* ConnectionTest
*/
@@ -34,9 +38,14 @@
private static final Logger log = Logger.get(ConnectionTest.class);
- private static final int PORT = 1234;
+ private int port;
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ port = AvailablePortFinder.getNextAvailable(12000);
- public void testWriteToClosed() throws Exception {
ConnectionDelegate server = new ConnectionDelegate() {
public void init(Channel ch, ProtocolHeader hdr) {
ch.getConnection().close();
@@ -48,24 +57,61 @@
public void exception(Throwable t) {
log.error(t, "exception caught");
}
+ public void closed() {}
};
- MinaHandler.accept("0.0.0.0", PORT, server);
+ MinaHandler.accept("0.0.0.0", port, server);
+ }
+
+ private class Condition
+ {
+ private boolean value = false;
+
+ public synchronized void set()
+ {
+ value = true;
+ notifyAll();
+ }
+
+ public synchronized boolean get(long timeout) throws InterruptedException
+ {
+ if (!value)
+ {
+ wait(timeout);
+ }
+
+ return value;
+ }
+ }
- Connection conn = MinaHandler.connect("0.0.0.0", PORT,
- new ConnectionDelegate()
- {
- public SessionDelegate getSessionDelegate()
- {
- return new SessionDelegate() {};
- }
- public void exception(Throwable t)
- {
- t.printStackTrace();
- }
- });
+ private Connection connect(final Condition closed)
+ {
+ Connection conn = MinaHandler.connect("0.0.0.0", port, new ConnectionDelegate()
+ {
+ public SessionDelegate getSessionDelegate()
+ {
+ return new SessionDelegate() {};
+ }
+ public void exception(Throwable t)
+ {
+ t.printStackTrace();
+ }
+ public void closed()
+ {
+ if (closed != null)
+ {
+ closed.set();
+ }
+ }
+ });
conn.send(new ConnectionEvent(0, new ProtocolHeader(1, 0, 10)));
+ return conn;
+ }
+
+ public void testWriteToClosed() throws Exception
+ {
+ Connection conn = connect(null);
Channel ch = conn.getChannel(0);
Session ssn = new Session();
ssn.attach(ch);
@@ -78,6 +124,16 @@
catch (TransportException e)
{
// expected
+ }
+ }
+
+ public void testClosedNotification() throws Exception
+ {
+ Condition closed = new Condition();
+ Connection conn = connect(closed);
+ if (!closed.get(3000))
+ {
+ fail("never got notified of connection close");
}
}