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/08/15 00:34:51 UTC
svn commit: r686068 - in /incubator/qpid/trunk/qpid/java:
client/src/main/java/org/apache/qpid/nclient/
common/src/main/java/org/apache/qpid/transport/
common/src/main/java/org/apache/qpid/transport/network/io/
Author: rhs
Date: Thu Aug 14 15:34:50 2008
New Revision: 686068
URL: http://svn.apache.org/viewvc?rev=686068&view=rev
Log:
QPID-1244: fix for NPE on broker initiated connection close, also preserve the connection close text for better error reporting
Added:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java (with props)
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java (with props)
Modified:
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/nclient/Client.java
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Channel.java
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java
Modified: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/nclient/Client.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/nclient/Client.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/nclient/Client.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/nclient/Client.java Thu Aug 14 15:34:50 2008
@@ -122,6 +122,7 @@
@Override public void connectionClose(Channel context, ConnectionClose connectionClose)
{
+ super.connectionClose(context, connectionClose);
ErrorCode errorCode = ErrorCode.get(connectionClose.getReplyCode().getValue());
if (_closedListner == null && errorCode != ErrorCode.NO_ERROR)
{
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Channel.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Channel.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Channel.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Channel.java Thu Aug 14 15:34:50 2008
@@ -134,6 +134,14 @@
this.session = session;
}
+ void closeCode(ConnectionClose close)
+ {
+ if (session != null)
+ {
+ session.closeCode(close);
+ }
+ }
+
private void emit(ProtocolEvent event)
{
event.setChannel(channel);
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java Thu Aug 14 15:34:50 2008
@@ -148,6 +148,17 @@
delegate.exception(t);
}
+ void closeCode(ConnectionClose close)
+ {
+ synchronized (channels)
+ {
+ for (Channel ch : channels.values())
+ {
+ ch.closeCode(close);
+ }
+ }
+ }
+
public void closed()
{
log.debug("connection closed: %s", this);
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java Thu Aug 14 15:34:50 2008
@@ -250,6 +250,7 @@
@Override public void connectionClose(Channel ch, ConnectionClose close)
{
+ ch.getConnection().closeCode(close);
ch.connectionCloseOk();
}
Added: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java?rev=686068&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java (added)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java Thu Aug 14 15:34:50 2008
@@ -0,0 +1,45 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.transport;
+
+
+/**
+ * ConnectionException
+ *
+ */
+
+public class ConnectionException extends RuntimeException
+{
+
+ private ConnectionClose close;
+
+ public ConnectionException(ConnectionClose close)
+ {
+ super(close.getReplyText());
+ this.close = close;
+ }
+
+ public ConnectionClose getClose()
+ {
+ return close;
+ }
+
+}
Propchange: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java Thu Aug 14 15:34:50 2008
@@ -268,6 +268,23 @@
public void invoke(Method m)
{
+ if (closed.get())
+ {
+ List<ExecutionException> exc = getExceptions();
+ if (!exc.isEmpty())
+ {
+ throw new SessionException(exc);
+ }
+ else if (close != null)
+ {
+ throw new ConnectionException(close);
+ }
+ else
+ {
+ throw new SessionClosedException();
+ }
+ }
+
if (m.getEncodedTrack() == Frame.L4)
{
synchronized (commands)
@@ -379,6 +396,13 @@
}
}
+ private ConnectionClose close = null;
+
+ void closeCode(ConnectionClose close)
+ {
+ this.close = close;
+ }
+
List<ExecutionException> getExceptions()
{
synchronized (exceptions)
Added: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java?rev=686068&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java (added)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java Thu Aug 14 15:34:50 2008
@@ -0,0 +1,39 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.transport;
+
+import java.util.Collections;
+
+
+/**
+ * SessionClosedException
+ *
+ */
+
+public class SessionClosedException extends SessionException
+{
+
+ public SessionClosedException()
+ {
+ super(Collections.EMPTY_LIST);
+ }
+
+}
Propchange: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java Thu Aug 14 15:34:50 2008
@@ -100,7 +100,7 @@
InputStream in = socket.getInputStream();
int read = 0;
int offset = 0;
- while (!closed.get() && (read = in.read(buffer, offset, bufferSize-offset)) != -1)
+ while ((read = in.read(buffer, offset, bufferSize-offset)) != -1)
{
if (read > 0)
{