summaryrefslogtreecommitdiff
path: root/qpid/java/broker-plugins
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-02-20 15:50:09 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-02-20 15:50:09 +0000
commit1ee9cd5f7d43bd8c8117eab317842dd3783fac63 (patch)
tree53075f3d7be1120bc83f11af241f0481d72b567d /qpid/java/broker-plugins
parent608a0bb1b83fd2920dbc19dc2be399b27c62c1ba (diff)
downloadqpid-python-1ee9cd5f7d43bd8c8117eab317842dd3783fac63.tar.gz
QPID-5563 : Ensure vhost is set as early as possible, on receipt of connection open
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1570242 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins')
-rw-r--r--qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java54
-rw-r--r--qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java1
-rw-r--r--qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java42
3 files changed, 55 insertions, 42 deletions
diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java
index 5e38442d7e..0a53a6436a 100644
--- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java
+++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java
@@ -20,7 +20,6 @@
*/
package org.apache.qpid.server.protocol.v1_0;
-import java.net.InetAddress;
import java.net.SocketAddress;
import java.security.Principal;
import java.security.PrivilegedAction;
@@ -121,9 +120,32 @@ public class Connection_1_0 implements ConnectionEventListener, AMQConnectionMod
return _reference;
}
+ @Override
+ public void openReceived()
+ {
+ String host = _conn.getLocalHostname();
+ if(host == null || host.trim().equals(""))
+ {
+ host = (String)_broker.getAttribute(Broker.DEFAULT_VIRTUAL_HOST);
+ }
+ _vhost = _broker.getVirtualHostRegistry().getVirtualHost(host);
+ if(_vhost == null)
+ {
+ final Error err = new Error();
+ err.setCondition(AmqpError.NOT_FOUND);
+ err.setDescription("Unknown hostname " + _conn.getLocalHostname());
+ _conn.close(err);
+ }
+ Subject authSubject = _subjectCreator.createSubjectWithGroups(_conn.getUser());
+ _subject.getPrincipals().addAll(authSubject.getPrincipals());
+ _subject.getPublicCredentials().addAll(authSubject.getPublicCredentials());
+ _subject.getPrivateCredentials().addAll(authSubject.getPrivateCredentials());
+
+ }
+
public void remoteSessionCreation(SessionEndpoint endpoint)
{
- final Session_1_0 session = new Session_1_0(_vhost, this, endpoint);
+ final Session_1_0 session = new Session_1_0(this, endpoint);
_sessions.add(session);
endpoint.setSessionEventListener(new SessionEventListener()
{
@@ -397,33 +419,13 @@ public class Connection_1_0 implements ConnectionEventListener, AMQConnectionMod
}
- public void frameReceived()
+ Subject getSubject()
{
- if(_vhost == null && _conn.isOpen())
- {
- String host = _conn.getLocalHostname();
- if(host == null || host.trim().equals(""))
- {
- host = (String)_broker.getAttribute(Broker.DEFAULT_VIRTUAL_HOST);
- }
- _vhost = _broker.getVirtualHostRegistry().getVirtualHost(host);
- if(_vhost == null)
- {
- final Error err = new Error();
- err.setCondition(AmqpError.NOT_FOUND);
- err.setDescription("Unknown hostname " + _conn.getLocalHostname());
- _conn.close(err);
- }
- Subject authSubject = _subjectCreator.createSubjectWithGroups(_conn.getUser());
- _subject.getPrincipals().addAll(authSubject.getPrincipals());
- _subject.getPublicCredentials().addAll(authSubject.getPublicCredentials());
- _subject.getPrivateCredentials().addAll(authSubject.getPrivateCredentials());
-
- }
+ return _subject;
}
- Subject getSubject()
+ VirtualHost getVirtualHost()
{
- return _subject;
+ return _vhost;
}
}
diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
index 468ba2758e..f82689e36a 100644
--- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
+++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
@@ -365,7 +365,6 @@ public class ProtocolEngine_1_0_0_SASL implements ServerProtocolEngine, FrameOut
public Void run()
{
_frameHandler = _frameHandler.parse(msg);
- _connection.frameReceived();
return null;
}
});
diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
index dcf9e5d7a1..ac1517aaf5 100644
--- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
+++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
@@ -87,11 +87,9 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
- public Session_1_0(VirtualHost vhost, final Connection_1_0 connection, final SessionEndpoint endpoint)
+ public Session_1_0(final Connection_1_0 connection, final SessionEndpoint endpoint)
{
- _vhost = vhost;
_endpoint = endpoint;
- _transaction = new AutoCommitTransaction(vhost.getMessageStore());
_connection = connection;
_subject.getPrincipals().addAll(connection.getSubject().getPrincipals());
_subject.getPrincipals().add(new SessionPrincipal(this));
@@ -106,7 +104,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
final
LinkRegistry
- linkRegistry = _vhost.getLinkRegistry(endpoint.getSession().getConnection().getRemoteContainerId());
+ linkRegistry = getVirtualHost().getLinkRegistry(endpoint.getSession().getConnection().getRemoteContainerId());
if(endpoint.getRole() == Role.SENDER)
@@ -129,7 +127,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
source.setAddress(tempQueue.getName());
}
String addr = source.getAddress();
- MessageSource queue = _vhost.getMessageSource(addr);
+ MessageSource queue = getVirtualHost().getMessageSource(addr);
if(queue != null)
{
@@ -140,7 +138,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
}
else
{
- Exchange exchg = _vhost.getExchange(addr);
+ Exchange exchg = getVirtualHost().getExchange(addr);
if(exchg != null)
{
destination = new ExchangeDestination(exchg, source.getDurable(), source.getExpiryPolicy());
@@ -165,7 +163,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
try
{
final SendingLink_1_0 sendingLink = new SendingLink_1_0(new SendingLinkAttachment(this, sendingLinkEndpoint),
- _vhost,
+ getVirtualHost(),
(SendingDestination) destination
);
@@ -245,7 +243,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
final ReceivingLinkEndpoint receivingLinkEndpoint = (ReceivingLinkEndpoint) endpoint;
final TxnCoordinatorLink_1_0 coordinatorLink =
- new TxnCoordinatorLink_1_0(_vhost, this, receivingLinkEndpoint, _openTransactions);
+ new TxnCoordinatorLink_1_0(getVirtualHost(), this, receivingLinkEndpoint, _openTransactions);
receivingLinkEndpoint.setLinkEventListener(new SubjectSpecificReceivingLinkListener(coordinatorLink));
link = coordinatorLink;
@@ -272,7 +270,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
}
String addr = target.getAddress();
- MessageDestination messageDestination = _vhost.getMessageDestination(addr);
+ MessageDestination messageDestination = getVirtualHost().getMessageDestination(addr);
if(messageDestination != null)
{
destination = new NodeReceivingDestination(messageDestination, target.getDurable(),
@@ -280,7 +278,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
}
else
{
- AMQQueue queue = _vhost.getQueue(addr);
+ AMQQueue queue = getVirtualHost().getQueue(addr);
if(queue != null)
{
@@ -303,7 +301,8 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
if(destination != null)
{
final ReceivingLinkEndpoint receivingLinkEndpoint = (ReceivingLinkEndpoint) endpoint;
- final ReceivingLink_1_0 receivingLink = new ReceivingLink_1_0(new ReceivingLinkAttachment(this, receivingLinkEndpoint), _vhost,
+ final ReceivingLink_1_0 receivingLink = new ReceivingLink_1_0(new ReceivingLinkAttachment(this, receivingLinkEndpoint),
+ getVirtualHost(),
(ReceivingDestination) destination);
receivingLinkEndpoint.setLinkEventListener(new SubjectSpecificReceivingLinkListener(receivingLink));
@@ -355,7 +354,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
? null
: (LifetimePolicy) properties.get(LIFETIME_POLICY);
Map<String,Object> attributes = new HashMap<String,Object>();
- attributes.put(org.apache.qpid.server.model.Queue.ID, UUIDGenerator.generateQueueUUID(queueName, _vhost.getName()));
+ attributes.put(org.apache.qpid.server.model.Queue.ID, UUIDGenerator.generateQueueUUID(queueName, getVirtualHost().getName()));
attributes.put(org.apache.qpid.server.model.Queue.NAME, queueName);
attributes.put(org.apache.qpid.server.model.Queue.DURABLE, false);
@@ -388,7 +387,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
// TODO convert AMQP 1-0 node properties to queue attributes
- final AMQQueue tempQueue = queue = _vhost.createQueue(attributes );
+ final AMQQueue tempQueue = queue = getVirtualHost().createQueue(attributes);
}
catch (AccessControlException e)
{
@@ -409,7 +408,15 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
{
// TODO should treat invalid id differently to null
ServerTransaction transaction = _openTransactions.get(binaryToInteger(transactionId));
- return transaction == null ? _transaction : transaction;
+ if(transaction == null)
+ {
+ if(_transaction == null)
+ {
+ _transaction = new AutoCommitTransaction(_connection.getVirtualHost().getMessageStore());
+ }
+ transaction = _transaction;
+ }
+ return transaction;
}
public void remoteEnd(End end)
@@ -622,7 +629,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
connectionId,
getClientID(),
remoteAddress,
- _vhost.getName(),
+ getVirtualHost().getName(),
_endpoint.getSendingChannel()) + "] ";
}
@@ -657,6 +664,11 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel<Sessio
return _subject;
}
+ VirtualHost getVirtualHost()
+ {
+ return _connection.getVirtualHost();
+ }
+
private class SubjectSpecificReceivingLinkListener implements ReceivingLinkListener
{