You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ri...@apache.org on 2010/05/07 17:10:08 UTC
svn commit: r942102 - in /qpid/trunk/qpid/java:
broker/src/main/java/org/apache/qpid/server/
broker/src/main/java/org/apache/qpid/server/handler/
broker/src/main/java/org/apache/qpid/server/protocol/
broker/src/main/java/org/apache/qpid/server/queue/ b...
Author: ritchiem
Date: Fri May 7 15:10:08 2010
New Revision: 942102
URL: http://svn.apache.org/viewvc?rev=942102&view=rev
Log:
QPID-2575 : Add getClientID to SessionModel and standardise use accross 0-8/0-10, 0-10 does not appear to provide a client ID so maintaining use of Principal Name. This means migration between 0-8 and 0-10 will not behave as expected.
Correct erroneous usages of session.getPrincipal when comparing with queue.getOwner is requried. Queue owners are the client id not the authenticated user.
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeclareHandler.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSessionMBean.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueMBean.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/DerbyMessageStore.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/ModelTest.java
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java?rev=942102&r1=942101&r2=942102&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQChannel.java Fri May 7 15:10:08 2010
@@ -141,7 +141,6 @@ public class AMQChannel implements Sessi
private final AtomicLong _txnRejects = new AtomicLong(0);
private final AtomicLong _txnCount = new AtomicLong(0);
- // Why do we need this reference ? - ritchiem
private final AMQProtocolSession _session;
private AtomicBoolean _closing = new AtomicBoolean(false);
@@ -1070,6 +1069,11 @@ public class AMQChannel implements Sessi
return _session;
}
+ public String getClientID()
+ {
+ return String.valueOf(_session.getContextKey());
+ }
+
private class MessageDeliveryAction implements ServerTransaction.Action
{
private IncomingMessage _incommingMessage;
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeclareHandler.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeclareHandler.java?rev=942102&r1=942101&r2=942102&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeclareHandler.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeclareHandler.java Fri May 7 15:10:08 2010
@@ -63,6 +63,7 @@ public class QueueDeclareHandler impleme
public void methodReceived(AMQStateManager stateManager, QueueDeclareBody body, int channelId) throws AMQException
{
final AMQProtocolSession protocolConnection = stateManager.getProtocolSession();
+ final AMQSessionModel session = protocolConnection.getChannel(channelId);
VirtualHost virtualHost = protocolConnection.getVirtualHost();
ExchangeRegistry exchangeRegistry = virtualHost.getExchangeRegistry();
QueueRegistry queueRegistry = virtualHost.getQueueRegistry();
@@ -100,11 +101,11 @@ public class QueueDeclareHandler impleme
queue = queueRegistry.getQueue(queueName);
- AMQSessionModel session = null;
+ AMQSessionModel owningSession = null;
if (queue != null)
{
- session = queue.getExclusiveOwningSession();
+ owningSession = queue.getExclusiveOwningSession();
}
if (queue == null)
@@ -163,7 +164,7 @@ public class QueueDeclareHandler impleme
}
}
}
- else if (queue.isExclusive() && !queue.isDurable() && (session == null || session.getConnectionModel() != protocolConnection))
+ else if (queue.isExclusive() && !queue.isDurable() && (owningSession == null || owningSession.getConnectionModel() != protocolConnection))
{
throw body.getConnectionException(AMQConstant.NOT_ALLOWED,
"Queue " + queue.getNameShortString() + " is exclusive, but not created on this Connection.");
@@ -175,13 +176,12 @@ public class QueueDeclareHandler impleme
"Cannot re-declare queue '" + queue.getNameShortString() + "' with different exclusivity (was: "
+ queue.isExclusive() + " requested " + body.getExclusive() + ")");
}
-
- else if (!body.getPassive() && body.getExclusive() && !(queue.isDurable() ? queue.getOwner().equals(protocolConnection.getPrincipal().getName()) : (session == null || session.getConnectionModel() != protocolConnection)))
+ else if (!body.getPassive() && body.getExclusive() && !(queue.isDurable() ? String.valueOf(queue.getOwner()).equals(session.getClientID()) : (owningSession == null || owningSession.getConnectionModel() == protocolConnection)))
{
throw body.getChannelException(AMQConstant.ALREADY_EXISTS, "Cannot declare queue('" + queueName + "'), "
+ "as exclusive queue with same name "
+ "declared on another client ID('"
- + queue.getOwner() + "')");
+ + queue.getOwner() + "') your clientID('" + session.getClientID() + "')");
}
else if(!body.getPassive() && queue.isAutoDelete() != body.getAutoDelete())
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java?rev=942102&r1=942101&r2=942102&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java Fri May 7 15:10:08 2010
@@ -1231,6 +1231,10 @@ public class AMQProtocolEngine implement
}
}
+ public String getClientID()
+ {
+ return getContextKey().toString();
+ }
public void closeSession(AMQSessionModel session, AMQConstant cause, String message) throws AMQException
{
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSessionMBean.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSessionMBean.java?rev=942102&r1=942101&r2=942102&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSessionMBean.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSessionMBean.java Fri May 7 15:10:08 2010
@@ -125,7 +125,7 @@ public class AMQProtocolSessionMBean ext
public String getClientId()
{
- return (_protocolSession.getContextKey() == null) ? null : _protocolSession.getContextKey().toString();
+ return String.valueOf(_protocolSession.getContextKey());
}
public String getAuthorizedId()
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java?rev=942102&r1=942101&r2=942102&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java Fri May 7 15:10:08 2010
@@ -25,4 +25,6 @@ public interface AMQSessionModel
Object getID();
AMQConnectionModel getConnectionModel();
+
+ String getClientID();
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueMBean.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueMBean.java?rev=942102&r1=942101&r2=942102&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueMBean.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueMBean.java Fri May 7 15:10:08 2010
@@ -158,11 +158,7 @@ public class AMQQueueMBean extends AMQMa
public String getOwner()
{
- return String.valueOf(_queue.getPrincipalHolder() == null
- ? null
- : _queue.getPrincipalHolder().getPrincipal() == null
- ? null
- : _queue.getPrincipalHolder().getPrincipal().getName());
+ return String.valueOf(_queue.getOwner());
}
public boolean isAutoDelete()
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/DerbyMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/DerbyMessageStore.java?rev=942102&r1=942101&r2=942102&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/DerbyMessageStore.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/DerbyMessageStore.java Fri May 7 15:10:08 2010
@@ -813,11 +813,7 @@ public class DerbyMessageStore implement
{
stmt = conn.prepareStatement(INSERT_INTO_QUEUE);
- String owner = queue.getPrincipalHolder() == null
- ? null
- : queue.getPrincipalHolder().getPrincipal() == null
- ? null
- : queue.getPrincipalHolder().getPrincipal().getName();
+ String owner = queue.getOwner() == null ? null : queue.getOwner().toString();
stmt.setString(1, queue.getNameShortString().toString());
stmt.setString(2, owner);
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java?rev=942102&r1=942101&r2=942102&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java Fri May 7 15:10:08 2010
@@ -565,4 +565,11 @@ public class ServerSession extends Sessi
return (ServerConnection) getConnection();
}
+ public String getClientID()
+ {
+ //fixme this will only work for 0-10 connections
+ // In 0-8 there is an explicit ClientID property that is != Principal.
+ return getPrincipal().getName();
+ }
+
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java?rev=942102&r1=942101&r2=942102&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java Fri May 7 15:10:08 2010
@@ -960,7 +960,7 @@ public class ServerSessionDelegate exten
{
final QueueRegistry registry = virtualHost.getQueueRegistry();
- String owner = body.getExclusive() ? session.getPrincipal().getName() : null;
+ String owner = body.getExclusive() ? session.getClientID() : null;
final AMQQueue queue = AMQQueueFactory.createAMQQueueImpl(queueName, body.getDurable(), owner, body.getAutoDelete(), virtualHost,
body.getArguments());
Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/ModelTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/ModelTest.java?rev=942102&r1=942101&r2=942102&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/ModelTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/ModelTest.java Fri May 7 15:10:08 2010
@@ -85,6 +85,26 @@ public class ModelTest extends QpidTestC
}
/**
+ * Test that an exclusive transient queue can be created via AMQP.
+ *
+ * @throws Exception On unexpected error
+ */
+ public void testExclusiveQueueCreationTransientViaAMQP() throws Exception
+ {
+ Connection connection = getConnection();
+
+ String queueName = getTestQueueName();
+ boolean durable = false;
+ boolean autoDelete = false;
+ boolean exclusive = true;
+
+ createViaAMQPandValidateViaJMX(connection, queueName, durable,
+ autoDelete, exclusive);
+ }
+
+
+
+ /**
* Test that a transient queue can be created via AMQP.
*
* @throws Exception On unexpected error
@@ -96,10 +116,34 @@ public class ModelTest extends QpidTestC
String queueName = getTestQueueName();
boolean durable = false;
boolean autoDelete = false;
- boolean exclusive = false;
+ boolean exclusive = true;
+
+ createViaAMQPandValidateViaJMX(connection, queueName, durable,
+ autoDelete, exclusive);
+ }
+
+ /**
+ * Test that a durable exclusive queue can be created via AMQP.
+ *
+ * @throws Exception On unexpected error
+ */
+
+ public void testExclusiveQueueCreationDurableViaAMQP() throws Exception
+ {
+ Connection connection = getConnection();
+
+ String queueName = getTestQueueName();
+ boolean durable = true;
+ boolean autoDelete = false;
+ boolean exclusive = true;
createViaAMQPandValidateViaJMX(connection, queueName, durable,
autoDelete, exclusive);
+
+ // Clean up
+ ManagedBroker managedBroker =
+ _jmxUtils.getManagedBroker(VIRTUALHOST_NAME);
+ managedBroker.deleteQueue(queueName);
}
/**
@@ -126,6 +170,7 @@ public class ModelTest extends QpidTestC
managedBroker.deleteQueue(queueName);
}
+
/**
* Test that a transient queue can be created via JMX.
*
@@ -246,7 +291,7 @@ public class ModelTest extends QpidTestC
session.createQueue(new AMQShortString(queueName),
autoDelete, durable, exclusive);
- validateQueueViaJMX(queueName, ((AMQConnection) connection).getUsername(), durable, autoDelete);
+ validateQueueViaJMX(queueName, exclusive ? connection.getClientID() : null, durable, autoDelete);
}
/**
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org