ARTEMIS-1569 - Queue - User Enhancement
Expose User associated with creating Queue on JMX QueueControl (as attribute) Allow setting of the user to associate with creating the queue when configured in broker.xml (before only if created over wire is it possible to set the user)
This commit is contained in:
parent
515560be2a
commit
035936cdb8
|
@ -56,6 +56,12 @@ public interface QueueControl {
|
||||||
@Attribute(desc = "whether this queue is durable")
|
@Attribute(desc = "whether this queue is durable")
|
||||||
boolean isDurable();
|
boolean isDurable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the user that is associated with creating the queue.
|
||||||
|
*/
|
||||||
|
@Attribute(desc = "the user that created the queue")
|
||||||
|
String getUser();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The routing type of this queue.
|
* The routing type of this queue.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -33,6 +33,8 @@ public class CoreQueueConfiguration implements Serializable {
|
||||||
|
|
||||||
private boolean durable = true;
|
private boolean durable = true;
|
||||||
|
|
||||||
|
private String user = null;
|
||||||
|
|
||||||
private Integer maxConsumers = ActiveMQDefaultConfiguration.getDefaultMaxQueueConsumers();
|
private Integer maxConsumers = ActiveMQDefaultConfiguration.getDefaultMaxQueueConsumers();
|
||||||
|
|
||||||
private Boolean purgeOnNoConsumers = ActiveMQDefaultConfiguration.getDefaultPurgeOnNoConsumers();
|
private Boolean purgeOnNoConsumers = ActiveMQDefaultConfiguration.getDefaultPurgeOnNoConsumers();
|
||||||
|
@ -58,6 +60,10 @@ public class CoreQueueConfiguration implements Serializable {
|
||||||
return durable;
|
return durable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param address the address to set
|
* @param address the address to set
|
||||||
*/
|
*/
|
||||||
|
@ -106,6 +112,14 @@ public class CoreQueueConfiguration implements Serializable {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param user the use you want to associate with creating the queue
|
||||||
|
*/
|
||||||
|
public CoreQueueConfiguration setUser(String user) {
|
||||||
|
this.user = user;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean getPurgeOnNoConsumers() {
|
public boolean getPurgeOnNoConsumers() {
|
||||||
return purgeOnNoConsumers;
|
return purgeOnNoConsumers;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1076,6 +1076,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
|
||||||
boolean durable = true;
|
boolean durable = true;
|
||||||
int maxConsumers = ActiveMQDefaultConfiguration.getDefaultMaxQueueConsumers();
|
int maxConsumers = ActiveMQDefaultConfiguration.getDefaultMaxQueueConsumers();
|
||||||
boolean purgeOnNoConsumers = ActiveMQDefaultConfiguration.getDefaultPurgeOnNoConsumers();
|
boolean purgeOnNoConsumers = ActiveMQDefaultConfiguration.getDefaultPurgeOnNoConsumers();
|
||||||
|
String user = null;
|
||||||
|
|
||||||
NamedNodeMap attributes = node.getAttributes();
|
NamedNodeMap attributes = node.getAttributes();
|
||||||
for (int i = 0; i < attributes.getLength(); i++) {
|
for (int i = 0; i < attributes.getLength(); i++) {
|
||||||
|
@ -1098,10 +1099,12 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
|
||||||
filterString = getAttributeValue(child, "string");
|
filterString = getAttributeValue(child, "string");
|
||||||
} else if (child.getNodeName().equals("durable")) {
|
} else if (child.getNodeName().equals("durable")) {
|
||||||
durable = XMLUtil.parseBoolean(child);
|
durable = XMLUtil.parseBoolean(child);
|
||||||
|
} else if (child.getNodeName().equals("user")) {
|
||||||
|
user = getTrimmedTextContent(child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new CoreQueueConfiguration().setAddress(address).setName(name).setFilterString(filterString).setDurable(durable).setMaxConsumers(maxConsumers).setPurgeOnNoConsumers(purgeOnNoConsumers);
|
return new CoreQueueConfiguration().setAddress(address).setName(name).setFilterString(filterString).setDurable(durable).setMaxConsumers(maxConsumers).setPurgeOnNoConsumers(purgeOnNoConsumers).setUser(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CoreAddressConfiguration parseAddressConfiguration(final Node node) {
|
protected CoreAddressConfiguration parseAddressConfiguration(final Node node) {
|
||||||
|
|
|
@ -175,6 +175,20 @@ public class QueueControlImpl extends AbstractControl implements QueueControl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUser() {
|
||||||
|
checkStarted();
|
||||||
|
|
||||||
|
clearIO();
|
||||||
|
try {
|
||||||
|
SimpleString user = queue.getUser();
|
||||||
|
return user == null ? null : user.toString();
|
||||||
|
} finally {
|
||||||
|
blockOnIO();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRoutingType() {
|
public String getRoutingType() {
|
||||||
checkStarted();
|
checkStarted();
|
||||||
|
|
|
@ -2508,7 +2508,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
|
||||||
// if the address::queue doesn't exist then create it
|
// if the address::queue doesn't exist then create it
|
||||||
try {
|
try {
|
||||||
createQueue(SimpleString.toSimpleString(config.getAddress()), config.getRoutingType(),
|
createQueue(SimpleString.toSimpleString(config.getAddress()), config.getRoutingType(),
|
||||||
queueName, SimpleString.toSimpleString(config.getFilterString()),null,
|
queueName, SimpleString.toSimpleString(config.getFilterString()), SimpleString.toSimpleString(config.getUser()),
|
||||||
config.isDurable(),false,false,false,false,config.getMaxConsumers(),config.getPurgeOnNoConsumers(),true);
|
config.isDurable(),false,false,false,false,config.getMaxConsumers(),config.getPurgeOnNoConsumers(),true);
|
||||||
} catch (ActiveMQQueueExistsException e) {
|
} catch (ActiveMQQueueExistsException e) {
|
||||||
// the queue may exist on a *different* address
|
// the queue may exist on a *different* address
|
||||||
|
|
|
@ -477,6 +477,13 @@
|
||||||
</xsd:documentation>
|
</xsd:documentation>
|
||||||
</xsd:annotation>
|
</xsd:annotation>
|
||||||
</xsd:element>
|
</xsd:element>
|
||||||
|
<xsd:element name="user" type="xsd:string" maxOccurs="1" minOccurs="0">
|
||||||
|
<xsd:annotation>
|
||||||
|
<xsd:documentation>
|
||||||
|
user to associate for creating the queue
|
||||||
|
</xsd:documentation>
|
||||||
|
</xsd:annotation>
|
||||||
|
</xsd:element>
|
||||||
<xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
|
<xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
|
||||||
<xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
|
<xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
|
||||||
<xsd:annotation>
|
<xsd:annotation>
|
||||||
|
@ -2987,6 +2994,7 @@
|
||||||
<xsd:all>
|
<xsd:all>
|
||||||
<xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
|
<xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
|
||||||
<xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0" />
|
<xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0" />
|
||||||
|
<xsd:element name="user" type="xsd:string" maxOccurs="1" minOccurs="0" />
|
||||||
</xsd:all>
|
</xsd:all>
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
||||||
<xsd:attribute name="max-consumers" type="xsd:integer" use="optional"/>
|
<xsd:attribute name="max-consumers" type="xsd:integer" use="optional"/>
|
||||||
|
|
|
@ -459,6 +459,13 @@
|
||||||
</xsd:documentation>
|
</xsd:documentation>
|
||||||
</xsd:annotation>
|
</xsd:annotation>
|
||||||
</xsd:element>
|
</xsd:element>
|
||||||
|
<xsd:element name="user" type="xsd:string" maxOccurs="1" minOccurs="0">
|
||||||
|
<xsd:annotation>
|
||||||
|
<xsd:documentation>
|
||||||
|
user to associate for creating the queue
|
||||||
|
</xsd:documentation>
|
||||||
|
</xsd:annotation>
|
||||||
|
</xsd:element>
|
||||||
<xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
|
<xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
|
||||||
<xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
|
<xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
|
||||||
<xsd:annotation>
|
<xsd:annotation>
|
||||||
|
@ -2678,6 +2685,7 @@
|
||||||
<xsd:all>
|
<xsd:all>
|
||||||
<xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
|
<xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
|
||||||
<xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0" />
|
<xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0" />
|
||||||
|
<xsd:element name="user" type="xsd:string" maxOccurs="1" minOccurs="0" />
|
||||||
</xsd:all>
|
</xsd:all>
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
||||||
<xsd:attribute name="max-consumers" type="xsd:integer" use="optional"/>
|
<xsd:attribute name="max-consumers" type="xsd:integer" use="optional"/>
|
||||||
|
|
|
@ -71,6 +71,11 @@ public class QueueControlUsingCoreTest extends QueueControlTest {
|
||||||
return (String) proxy.retrieveAttributeValue("address");
|
return (String) proxy.retrieveAttributeValue("address");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUser() {
|
||||||
|
return (String) proxy.retrieveAttributeValue("user");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getConsumerCount() {
|
public int getConsumerCount() {
|
||||||
return (Integer) proxy.retrieveAttributeValue("consumerCount", Integer.class);
|
return (Integer) proxy.retrieveAttributeValue("consumerCount", Integer.class);
|
||||||
|
|
|
@ -60,6 +60,28 @@ public class QueueConfigRestartTest extends ActiveMQTestBase {
|
||||||
QueueBinding queueBinding2 = (QueueBinding)server.getPostOffice().getBinding(queue);
|
QueueBinding queueBinding2 = (QueueBinding)server.getPostOffice().getBinding(queue);
|
||||||
Assert.assertTrue(queueBinding2.getQueue().isPurgeOnNoConsumers());
|
Assert.assertTrue(queueBinding2.getQueue().isPurgeOnNoConsumers());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testQueueConfigUserAndRestart() throws Exception {
|
||||||
|
ActiveMQServer server = createServer(true);
|
||||||
|
|
||||||
|
server.start();
|
||||||
|
|
||||||
|
SimpleString address = new SimpleString("test.address");
|
||||||
|
SimpleString queue = new SimpleString("test.queue");
|
||||||
|
|
||||||
|
server.createQueue(address, RoutingType.MULTICAST, queue, null, SimpleString.toSimpleString("bob"), true, false, false, 10, true, true);
|
||||||
|
|
||||||
|
QueueBinding queueBinding1 = (QueueBinding)server.getPostOffice().getBinding(queue);
|
||||||
|
Assert.assertEquals(SimpleString.toSimpleString("bob"), queueBinding1.getQueue().getUser());
|
||||||
|
|
||||||
|
server.stop();
|
||||||
|
|
||||||
|
server.start();
|
||||||
|
|
||||||
|
QueueBinding queueBinding2 = (QueueBinding)server.getPostOffice().getBinding(queue);
|
||||||
|
Assert.assertTrue(queueBinding2.getQueue().isPurgeOnNoConsumers());
|
||||||
|
}
|
||||||
// Package protected ---------------------------------------------
|
// Package protected ---------------------------------------------
|
||||||
|
|
||||||
// Protected -----------------------------------------------------
|
// Protected -----------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue