Author: rajith
Date: Mon Jun 18 14:50:19 2012
New Revision: 1351372

URL: http://svn.apache.org/viewvc?rev=1351372&view=rev
Log:
QPID-4027 Added unregister methods for session, sender and receivers.

Modified:
    
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/ConnectionInternal.java
    
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/SessionInternal.java
    
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ConnectionManagementDecorator.java
    
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ReceiverManagementDecorator.java
    
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SenderManagementDecorator.java
    
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SessionManagementDecorator.java

Modified: 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/ConnectionInternal.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/ConnectionInternal.java?rev=1351372&r1=1351371&r2=1351372&view=diff
==============================================================================
--- 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/ConnectionInternal.java
 (original)
+++ 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/ConnectionInternal.java
 Mon Jun 18 14:50:19 2012
@@ -39,6 +39,8 @@ public interface ConnectionInternal exte
 
     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

Modified: 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/SessionInternal.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/SessionInternal.java?rev=1351372&r1=1351371&r2=1351372&view=diff
==============================================================================
--- 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/SessionInternal.java
 (original)
+++ 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/internal/SessionInternal.java
 Mon Jun 18 14:50:19 2012
@@ -27,4 +27,10 @@ public interface SessionInternal extends
     public void exception(MessagingException e);
 
     public void recreate() throws MessagingException;
+
+    public String getName();
+
+    public void unregisterReceiver(ReceiverInternal receiver);
+
+    public void unregisterSender(SenderInternal sender);
 }

Modified: 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ConnectionManagementDecorator.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ConnectionManagementDecorator.java?rev=1351372&r1=1351371&r2=1351372&view=diff
==============================================================================
--- 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ConnectionManagementDecorator.java
 (original)
+++ 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ConnectionManagementDecorator.java
 Mon Jun 18 14:50:19 2012
@@ -119,7 +119,14 @@ public class ConnectionManagementDecorat
             _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 ConnectionManagementDecorat
         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 ConnectionManagementDecorat
         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 ConnectionManagementDecorat
         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)
     {

Modified: 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ReceiverManagementDecorator.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ReceiverManagementDecorator.java?rev=1351372&r1=1351371&r2=1351372&view=diff
==============================================================================
--- 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ReceiverManagementDecorator.java
 (original)
+++ 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/ReceiverManagementDecorator.java
 Mon Jun 18 14:50:19 2012
@@ -170,6 +170,7 @@ public class ReceiverManagementDecorator
         {
             _state = ReceiverState.CLOSED;
             _delegate.close();
+            _ssn.unregisterReceiver(this);
         }
     }
 

Modified: 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SenderManagementDecorator.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SenderManagementDecorator.java?rev=1351372&r1=1351371&r2=1351372&view=diff
==============================================================================
--- 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SenderManagementDecorator.java
 (original)
+++ 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SenderManagementDecorator.java
 Mon Jun 18 14:50:19 2012
@@ -64,6 +64,7 @@ public class SenderManagementDecorator i
         {
             _state = SenderState.CLOSED;
             _delegate.close();
+            _ssn.unregisterSender(this);
         }
     }
 

Modified: 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SessionManagementDecorator.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SessionManagementDecorator.java?rev=1351372&r1=1351371&r2=1351372&view=diff
==============================================================================
--- 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SessionManagementDecorator.java
 (original)
+++ 
qpid/branches/address-refactor2/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/util/SessionManagementDecorator.java
 Mon Jun 18 14:50:19 2012
@@ -83,15 +83,17 @@ public class SessionManagementDecorator 
 
     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 
             _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 
         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");



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to