summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajith Muditha Attapattu <rajith@apache.org>2012-06-18 14:50:19 +0000
committerRajith Muditha Attapattu <rajith@apache.org>2012-06-18 14:50:19 +0000
commit369f30ef78e238b16999a031c3edfbf74df2e0eb (patch)
tree993a6ddabbeae3b1ff43b8d0313269f933d7efb7
parent3cf0f66f3f91f7edea861d8334c16bf328587e8d (diff)
downloadqpid-python-369f30ef78e238b16999a031c3edfbf74df2e0eb.tar.gz
QPID-4027 Added unregister methods for session, sender and receivers.
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/address-refactor2@1351372 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/ConnectionInternal.java2
-rw-r--r--qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/SessionInternal.java6
-rw-r--r--qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ConnectionManagementDecorator.java19
-rw-r--r--qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ReceiverManagementDecorator.java1
-rw-r--r--qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SenderManagementDecorator.java1
-rw-r--r--qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SessionManagementDecorator.java41
6 files changed, 64 insertions, 6 deletions
diff --git a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/ConnectionInternal.java b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/ConnectionInternal.java
index 2e964b3ad7..780c5a4e0b 100644
--- a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/ConnectionInternal.java
+++ b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/ConnectionInternal.java
@@ -39,6 +39,8 @@ public interface ConnectionInternal extends Connection
public void recreate() throws MessagingException;
+ public void unregisterSession(SessionInternal sesion);
+
/**
* The per connection lock that is used by the connection
* and it's child objects. A single lock is used to prevent
diff --git a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/SessionInternal.java b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/SessionInternal.java
index cee3a31c0e..7187bc928d 100644
--- a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/SessionInternal.java
+++ b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/SessionInternal.java
@@ -27,4 +27,10 @@ public interface SessionInternal extends Session
public void exception(MessagingException e);
public void recreate() throws MessagingException;
+
+ public String getName();
+
+ public void unregisterReceiver(ReceiverInternal receiver);
+
+ public void unregisterSender(SenderInternal sender);
}
diff --git a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ConnectionManagementDecorator.java b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ConnectionManagementDecorator.java
index 6e7d4bed31..ccc216e7af 100644
--- a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ConnectionManagementDecorator.java
+++ b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ConnectionManagementDecorator.java
@@ -119,7 +119,14 @@ public class ConnectionManagementDecorator implements ConnectionInternal
_state = ConnectionState.CLOSED;
for (Session ssn : _sessions.values())
{
- ssn.close();
+ try
+ {
+ ssn.close();
+ }
+ catch (Exception e)
+ {
+ _logger.warn("Error closing session",e);
+ }
}
_sessions.clear();
@@ -138,7 +145,7 @@ public class ConnectionManagementDecorator implements ConnectionInternal
try
{
if (name == null || name.isEmpty()) { name = generateSessionName(); }
- SessionInternal ssn = new SessionManagementDecorator(this,_delegate.createSession(name));
+ SessionInternal ssn = new SessionManagementDecorator(this,name,_delegate.createSession(name));
_sessions.put(name, ssn);
return ssn;
}
@@ -159,7 +166,7 @@ public class ConnectionManagementDecorator implements ConnectionInternal
try
{
if (name == null || name.isEmpty()) { name = generateSessionName(); }
- SessionInternal ssn = new SessionManagementDecorator(this,_delegate.createTransactionalSession(name));
+ SessionInternal ssn = new SessionManagementDecorator(this,name,_delegate.createTransactionalSession(name));
_sessions.put(name, ssn);
return ssn;
}
@@ -213,6 +220,12 @@ public class ConnectionManagementDecorator implements ConnectionInternal
return new ArrayList<SessionInternal>(_sessions.values());
}
+ @Override
+ public void unregisterSession(SessionInternal ssn)
+ {
+ _sessions.remove(ssn.getName());
+ }
+
@Override // Called by the delegate or a a session created by this connection.
public void exception(ConnectionException e)
{
diff --git a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ReceiverManagementDecorator.java b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ReceiverManagementDecorator.java
index 6d75f06c15..a4e545e6f0 100644
--- a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ReceiverManagementDecorator.java
+++ b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ReceiverManagementDecorator.java
@@ -170,6 +170,7 @@ public class ReceiverManagementDecorator implements ReceiverInternal
{
_state = ReceiverState.CLOSED;
_delegate.close();
+ _ssn.unregisterReceiver(this);
}
}
diff --git a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SenderManagementDecorator.java b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SenderManagementDecorator.java
index 8bb1c9d6e3..14bd8f3b15 100644
--- a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SenderManagementDecorator.java
+++ b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SenderManagementDecorator.java
@@ -64,6 +64,7 @@ public class SenderManagementDecorator implements SenderInternal
{
_state = SenderState.CLOSED;
_delegate.close();
+ _ssn.unregisterSender(this);
}
}
diff --git a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SessionManagementDecorator.java b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SessionManagementDecorator.java
index f35589901b..1422be7207 100644
--- a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SessionManagementDecorator.java
+++ b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SessionManagementDecorator.java
@@ -83,15 +83,17 @@ public class SessionManagementDecorator implements SessionInternal
private ConnectionInternal _conn;
private Session _delegate;
+ private String _name;
SessionState _state = SessionState.OPENED;
private List<ReceiverInternal> _receivers = new ArrayList<ReceiverInternal>();
private List<SenderInternal> _senders = new ArrayList<SenderInternal>();
private final Object _connectionLock; // global per connection lock
- public SessionManagementDecorator(ConnectionInternal conn, Session delegate)
+ public SessionManagementDecorator(ConnectionInternal conn, String name, Session delegate)
{
_conn = conn;
_delegate = delegate;
+ _name = name;
_connectionLock = conn.getConnectionLock();
}
@@ -110,16 +112,31 @@ public class SessionManagementDecorator implements SessionInternal
_state = SessionState.CLOSED;
for (Sender sender: _senders)
{
- sender.close();
+ try
+ {
+ sender.close();
+ }
+ catch (Exception e)
+ {
+ _logger.warn("Error closing sender", e);
+ }
}
_senders.clear();
for (Receiver receiver: _receivers)
{
- receiver.close();
+ try
+ {
+ receiver.close();
+ }
+ catch (Exception e)
+ {
+ _logger.warn("Error closing receiver", e);
+ }
}
_receivers.clear();
_delegate.close();
+ _conn.unregisterSession(this);
}
}
@@ -442,6 +459,24 @@ public class SessionManagementDecorator implements SessionInternal
return _conn;
}
+ @Override
+ public String getName()
+ {
+ return _name;
+ }
+
+ @Override
+ public void unregisterReceiver(ReceiverInternal receiver)
+ {
+ _receivers.remove(receiver);
+ }
+
+ @Override
+ public void unregisterSender(SenderInternal sender)
+ {
+ _senders.remove(sender);
+ }
+
private void checkClosedAndThrowException() throws SessionException
{
checkClosedAndThrowException("Session is closed. You cannot invoke methods on a closed sesion");