Author: grkvlt
Date: Mon Mar  7 16:58:50 2011
New Revision: 1078853

URL: http://svn.apache.org/viewvc?rev=1078853&view=rev
Log:
QPID-3114: Record the owner session for exclusive queues in 0-10

Modified:
    
qpid/branches/grkvlt-network-20110301/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java

Modified: 
qpid/branches/grkvlt-network-20110301/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20110301/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java?rev=1078853&r1=1078852&r2=1078853&view=diff
==============================================================================
--- 
qpid/branches/grkvlt-network-20110301/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
 (original)
+++ 
qpid/branches/grkvlt-network-20110301/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
 Mon Mar  7 16:58:50 2011
@@ -209,26 +209,27 @@ public class ServerSessionDelegate exten
                 }
                 else
                 {
-
                     if(queue.isExclusive())
                     {
+                        ServerSession s = (ServerSession) session;
+                        queue.setExclusiveOwningSession(s);
                         if(queue.getPrincipalHolder() == null)
                         {
-                            queue.setPrincipalHolder((ServerSession)session);
+                            queue.setPrincipalHolder(s);
+                            queue.setExclusiveOwningSession(s);
                             ((ServerSession) session).addSessionCloseTask(new 
ServerSession.Task()
                             {
-
                                 public void doTask(ServerSession session)
                                 {
                                     if(queue.getPrincipalHolder() == session)
                                     {
                                         queue.setPrincipalHolder(null);
+                                        queue.setExclusiveOwningSession(null);
                                     }
                                 }
                             });
                         }
 
-
                     }
 
                     FlowCreditManager_0_10 creditManager = new 
WindowCreditManager(0L,0L);
@@ -969,10 +970,10 @@ public class ServerSessionDelegate exten
 
                         }
 
-                        if(method.hasAutoDelete()
-                           && method.getAutoDelete()
-                           && method.hasExclusive()
-                           && method.getExclusive())
+                        if (method.hasAutoDelete()
+                            && method.getAutoDelete()
+                            && method.hasExclusive()
+                            && method.getExclusive())
                         {
                             final AMQQueue q = queue;
                             final ServerSession.Task deleteQueueTask = new 
ServerSession.Task()
@@ -999,12 +1000,12 @@ public class ServerSessionDelegate exten
                                     }
                                 });
                         }
-                        else if(method.getExclusive())
+                        if (method.hasExclusive()
+                            && method.getExclusive())
                         {
                             final AMQQueue q = queue;
                             final ServerSession.Task removeExclusive = new 
ServerSession.Task()
                             {
-
                                 public void doTask(ServerSession session)
                                 {
                                     q.setPrincipalHolder(null);
@@ -1012,10 +1013,10 @@ public class ServerSessionDelegate exten
                                 }
                             };
                             final ServerSession s = (ServerSession) session;
+                            q.setExclusiveOwningSession(s);
                             s.addSessionCloseTask(removeExclusive);
                             queue.addQueueDeleteTask(new AMQQueue.Task()
                             {
-
                                 public void doTask(AMQQueue queue) throws 
AMQException
                                 {
                                     s.removeSessionCloseTask(removeExclusive);
@@ -1029,7 +1030,7 @@ public class ServerSessionDelegate exten
                     }
                 }
             }
-            else if (method.getExclusive() && (queue.getPrincipalHolder() != 
null && !queue.getPrincipalHolder().equals(session)))
+            else if (method.getExclusive() && 
(queue.getExclusiveOwningSession() != null && 
!queue.getExclusiveOwningSession().equals(session)))
             {
                     String description = "Cannot declare queue('" + queueName 
+ "'),"
                                                                            + " 
as exclusive queue with same name "



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscr...@qpid.apache.org

Reply via email to