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