You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2013/08/28 00:02:07 UTC

svn commit: r1518009 - in /activemq/trunk: activemq-broker/src/main/java/org/apache/activemq/broker/region/policy/ activemq-runtime-config/src/main/java/org/apache/activemq/plugin/ activemq-runtime-config/src/main/resources/ activemq-runtime-config/src...

Author: gtully
Date: Tue Aug 27 22:02:07 2013
New Revision: 1518009

URL: http://svn.apache.org/r1518009
Log:
https://issues.apache.org/jira/browse/AMQ-4682 - add support for mods and additions to destination policy - primitive attributes only

Added:
    activemq/trunk/activemq-runtime-config/src/test/java/org/apache/activemq/PolicyEntryTest.java   (with props)
    activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-add.xml   (with props)
    activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-mod.xml   (with props)
    activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml.xml   (with props)
Modified:
    activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java
    activemq/trunk/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/RuntimeConfigurationBroker.java
    activemq/trunk/activemq-runtime-config/src/main/resources/binding.xjb

Modified: activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java?rev=1518009&r1=1518008&r2=1518009&view=diff
==============================================================================
--- activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java (original)
+++ activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java Tue Aug 27 22:02:07 2013
@@ -24,6 +24,7 @@ import org.apache.activemq.broker.region
 import org.apache.activemq.broker.region.Queue;
 import org.apache.activemq.broker.region.QueueBrowserSubscription;
 import org.apache.activemq.broker.region.QueueSubscription;
+import org.apache.activemq.broker.region.RegionBroker;
 import org.apache.activemq.broker.region.Subscription;
 import org.apache.activemq.broker.region.Topic;
 import org.apache.activemq.broker.region.TopicSubscription;
@@ -128,6 +129,20 @@ public class PolicyEntry extends Destina
         queue.setAllConsumersExclusiveByDefault(isAllConsumersExclusiveByDefault());
     }
 
+    public void update(Queue queue) {
+        baseUpdate(queue);
+        if (memoryLimit > 0) {
+            queue.getMemoryUsage().setLimit(memoryLimit);
+        }
+        queue.setUseConsumerPriority(isUseConsumerPriority());
+        queue.setStrictOrderDispatch(isStrictOrderDispatch());
+        queue.setOptimizedDispatch(isOptimizedDispatch());
+        queue.setLazyDispatch(isLazyDispatch());
+        queue.setTimeBeforeDispatchStarts(getTimeBeforeDispatchStarts());
+        queue.setConsumersBeforeDispatchStarts(getConsumersBeforeDispatchStarts());
+        queue.setAllConsumersExclusiveByDefault(isAllConsumersExclusiveByDefault());
+    }
+
     public void configure(Broker broker,Topic topic) {
         baseConfiguration(broker,topic);
         if (dispatchPolicy != null) {
@@ -145,28 +160,51 @@ public class PolicyEntry extends Destina
         topic.setLazyDispatch(isLazyDispatch());
     }
 
-    public void baseConfiguration(Broker broker, BaseDestination destination) {
+    public void update(Topic topic) {
+        baseUpdate(topic);
+        if (memoryLimit > 0) {
+            topic.getMemoryUsage().setLimit(memoryLimit);
+        }
+        topic.setLazyDispatch(isLazyDispatch());
+    }
+
+    // attributes that can change on the fly
+    public void baseUpdate(BaseDestination destination) {
         destination.setProducerFlowControl(isProducerFlowControl());
         destination.setAlwaysRetroactive(isAlwaysRetroactive());
         destination.setBlockedProducerWarningInterval(getBlockedProducerWarningInterval());
-        destination.setEnableAudit(isEnableAudit());
-        destination.setMaxAuditDepth(getMaxQueueAuditDepth());
-        destination.setMaxProducersToAudit(getMaxProducersToAudit());
+
         destination.setMaxPageSize(getMaxPageSize());
         destination.setMaxBrowsePageSize(getMaxBrowsePageSize());
-        destination.setUseCache(isUseCache());
+
         destination.setMinimumMessageSize((int) getMinimumMessageSize());
+        destination.setMaxExpirePageSize(getMaxExpirePageSize());
+        destination.setCursorMemoryHighWaterMark(getCursorMemoryHighWaterMark());
+        destination.setStoreUsageHighWaterMark(getStoreUsageHighWaterMark());
+
+        destination.setGcIfInactive(isGcInactiveDestinations());
+        destination.setGcWithNetworkConsumers(isGcWithNetworkConsumers());
+        destination.setInactiveTimoutBeforeGC(getInactiveTimoutBeforeGC());
+        destination.setReduceMemoryFootprint(isReduceMemoryFootprint());
+        destination.setDoOptimzeMessageStorage(isDoOptimzeMessageStorage());
+        destination.setOptimizeMessageStoreInFlightLimit(getOptimizeMessageStoreInFlightLimit());
+
         destination.setAdvisoryForConsumed(isAdvisoryForConsumed());
         destination.setAdvisoryForDelivery(isAdvisoryForDelivery());
         destination.setAdvisoryForDiscardingMessages(isAdvisoryForDiscardingMessages());
         destination.setAdvisoryForSlowConsumers(isAdvisoryForSlowConsumers());
         destination.setAdvisoryForFastProducers(isAdvisoryForFastProducers());
         destination.setAdvisoryWhenFull(isAdvisoryWhenFull());
-        destination.setSendAdvisoryIfNoConsumers(sendAdvisoryIfNoConsumers);
+        destination.setSendAdvisoryIfNoConsumers(isSendAdvisoryIfNoConsumers());
+    }
+
+    public void baseConfiguration(Broker broker, BaseDestination destination) {
+        baseUpdate(destination);
+        destination.setEnableAudit(isEnableAudit());
+        destination.setMaxAuditDepth(getMaxQueueAuditDepth());
+        destination.setMaxProducersToAudit(getMaxProducersToAudit());
+        destination.setUseCache(isUseCache());
         destination.setExpireMessagesPeriod(getExpireMessagesPeriod());
-        destination.setMaxExpirePageSize(getMaxExpirePageSize());
-        destination.setCursorMemoryHighWaterMark(getCursorMemoryHighWaterMark());
-        destination.setStoreUsageHighWaterMark(getStoreUsageHighWaterMark());
         SlowConsumerStrategy scs = getSlowConsumerStrategy();
         if (scs != null) {
             scs.setBrokerService(broker);
@@ -174,12 +212,6 @@ public class PolicyEntry extends Destina
         }
         destination.setSlowConsumerStrategy(scs);
         destination.setPrioritizedMessages(isPrioritizedMessages());
-        destination.setGcIfInactive(isGcInactiveDestinations());
-        destination.setGcWithNetworkConsumers(isGcWithNetworkConsumers());
-        destination.setInactiveTimoutBeforeGC(getInactiveTimoutBeforeGC());
-        destination.setReduceMemoryFootprint(isReduceMemoryFootprint());
-        destination.setDoOptimzeMessageStorage(isDoOptimzeMessageStorage());
-        destination.setOptimizeMessageStoreInFlightLimit(getOptimizeMessageStoreInFlightLimit());
     }
 
     public void configure(Broker broker, SystemUsage memoryManager, TopicSubscription subscription) {
@@ -872,4 +904,5 @@ public class PolicyEntry extends Destina
     public void setOptimizeMessageStoreInFlightLimit(int optimizeMessageStoreInFlightLimit) {
         this.optimizeMessageStoreInFlightLimit = optimizeMessageStoreInFlightLimit;
     }
+
 }

Modified: activemq/trunk/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/RuntimeConfigurationBroker.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/RuntimeConfigurationBroker.java?rev=1518009&r1=1518008&r2=1518009&view=diff
==============================================================================
--- activemq/trunk/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/RuntimeConfigurationBroker.java (original)
+++ activemq/trunk/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/RuntimeConfigurationBroker.java Tue Aug 27 22:02:07 2013
@@ -23,6 +23,7 @@ import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Properties;
+import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -45,7 +46,11 @@ import org.apache.activemq.broker.jmx.Ma
 import org.apache.activemq.broker.region.CompositeDestinationInterceptor;
 import org.apache.activemq.broker.region.Destination;
 import org.apache.activemq.broker.region.DestinationInterceptor;
+import org.apache.activemq.broker.region.Queue;
 import org.apache.activemq.broker.region.RegionBroker;
+import org.apache.activemq.broker.region.Topic;
+import org.apache.activemq.broker.region.policy.PolicyEntry;
+import org.apache.activemq.broker.region.policy.PolicyMap;
 import org.apache.activemq.broker.region.virtual.CompositeQueue;
 import org.apache.activemq.broker.region.virtual.CompositeTopic;
 import org.apache.activemq.broker.region.virtual.VirtualDestination;
@@ -62,6 +67,8 @@ import org.apache.activemq.schema.core.D
 import org.apache.activemq.schema.core.DtoCompositeQueue;
 import org.apache.activemq.schema.core.DtoCompositeTopic;
 import org.apache.activemq.schema.core.DtoNetworkConnector;
+import org.apache.activemq.schema.core.DtoPolicyEntry;
+import org.apache.activemq.schema.core.DtoPolicyMap;
 import org.apache.activemq.schema.core.DtoVirtualDestinationInterceptor;
 import org.apache.activemq.schema.core.DtoVirtualTopic;
 import org.apache.activemq.security.AuthorizationBroker;
@@ -231,6 +238,7 @@ public class RuntimeConfigurationBroker 
     private void processSelectiveChanges(DtoBroker currentConfiguration, DtoBroker modifiedConfiguration) {
 
         for (Class upDatable : new Class[]{
+                DtoBroker.DestinationPolicy.class,
                 DtoBroker.NetworkConnectors.class,
                 DtoBroker.DestinationInterceptors.class,
                 DtoBroker.Plugins.class}) {
@@ -243,6 +251,13 @@ public class RuntimeConfigurationBroker 
         List current = filter(currentConfiguration, upDatable);
         List modified = filter(modifiedConfiguration, upDatable);
 
+        if (current.equals(modified)) {
+            LOG.debug("no changes to " + upDatable.getSimpleName());
+            return;
+        } else {
+            info("changes to " + upDatable.getSimpleName());
+        }
+
         int modIndex = 0, currentIndex = 0;
         for (; modIndex < modified.size() && currentIndex < current.size(); modIndex++, currentIndex++) {
             // walk the list for mods
@@ -267,12 +282,18 @@ public class RuntimeConfigurationBroker 
 
     // mapping all supported updatable elements to support getContents
     private List<Object> getContents(Object o) {
+        List<Object> answer = new ArrayList<Object>();
         try {
-            return (List<Object>) o.getClass().getMethod("getContents", new Class[]{}).invoke(o, new Object[]{});
+            Object val = o.getClass().getMethod("getContents", new Class[]{}).invoke(o, new Object[]{});
+            if (val instanceof List) {
+                answer = (List<Object>) val;
+            } else {
+                answer.add(val);
+            }
         } catch (Exception e) {
             info("Failed to access getContents for " + o + ", runtime modifications not supported", e);
         }
-        return new ArrayList<Object>();
+        return answer;
     }
 
     private void applyModifications(List<Object> current, List<Object> modification) {
@@ -297,6 +318,7 @@ public class RuntimeConfigurationBroker 
 
     private void modify(Object existing, Object candidate) {
         if (candidate instanceof DtoAuthorizationPlugin) {
+
             try {
                 // replace authorization map - need exclusive write lock to total broker
                 AuthorizationBroker authorizationBroker =
@@ -306,12 +328,47 @@ public class RuntimeConfigurationBroker 
             } catch (Exception e) {
                 info("failed to apply modified AuthorizationMap to AuthorizationBroker", e);
             }
+
+        } else if (candidate instanceof DtoPolicyMap) {
+
+            List<Object> existingEntries = filter(existing, DtoPolicyMap.PolicyEntries.class);
+            List<Object> candidateEntries = filter(candidate, DtoPolicyMap.PolicyEntries.class);
+            // walk the map for mods
+            applyModifications(getContents(existingEntries.get(0)), getContents(candidateEntries.get(0)));
+
+        } else if (candidate instanceof DtoPolicyEntry) {
+
+            PolicyMap existingMap = getBrokerService().getDestinationPolicy();
+
+            PolicyEntry updatedEntry = fromDto(candidate, new PolicyEntry());
+
+            Set existingEntry = existingMap.get(updatedEntry.getDestination());
+            if (existingEntry.size() == 1) {
+                updatedEntry = fromDto(candidate, (PolicyEntry) existingEntry.iterator().next());
+                applyRetrospectively(updatedEntry);
+                info("updated policy for: " + updatedEntry.getDestination());
+            } else {
+                info("cannot modify policy matching multiple destinations: " + existingEntry + ", destination:" + updatedEntry.getDestination());
+            }
+
         } else {
             remove(existing);
             addNew(candidate);
         }
     }
 
+    private void applyRetrospectively(PolicyEntry updatedEntry) {
+        RegionBroker regionBroker = (RegionBroker) getBrokerService().getRegionBroker();
+        for (Destination destination : regionBroker.getDestinations(updatedEntry.getDestination())) {
+            if (destination.getActiveMQDestination().isQueue()) {
+                updatedEntry.update((Queue) destination);
+            } else if (destination.getActiveMQDestination().isTopic()) {
+                updatedEntry.update((Topic) destination);
+            }
+            LOG.debug("applied update to:" + destination);
+        }
+    }
+
     private AuthorizationMap fromDto(List<Object> map) {
         XBeanAuthorizationMap xBeanAuthorizationMap = new XBeanAuthorizationMap();
         for (Object o : map) {
@@ -452,8 +509,16 @@ public class RuntimeConfigurationBroker 
                     }
                 }
             });
+        } else if (o instanceof DtoPolicyEntry) {
+
+            PolicyEntry addition = fromDto(o, new PolicyEntry());
+            PolicyMap existingMap = getBrokerService().getDestinationPolicy();
+            existingMap.put(addition.getDestination(), addition);
+            applyRetrospectively(addition);
+            info("added policy for: " + addition.getDestination());
+
         } else {
-            info("No runtime support for modifications to " + o);
+            info("No runtime support for additions of " + o);
         }
     }
 

Modified: activemq/trunk/activemq-runtime-config/src/main/resources/binding.xjb
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-runtime-config/src/main/resources/binding.xjb?rev=1518009&r1=1518008&r2=1518009&view=diff
==============================================================================
--- activemq/trunk/activemq-runtime-config/src/main/resources/binding.xjb (original)
+++ activemq/trunk/activemq-runtime-config/src/main/resources/binding.xjb Tue Aug 27 22:02:07 2013
@@ -27,6 +27,22 @@
      <jxb:property name="Contents" />
    </jxb:bindings>
 
+   <jxb:bindings node="xs:element[@name='broker']/xs:complexType/xs:choice/xs:choice/xs:element[@name='destinationPolicy']/xs:complexType/xs:choice">
+     <jxb:property name="Contents" />
+   </jxb:bindings>
+
+   <jxb:bindings node="xs:element[@name='policyMap']/xs:complexType/xs:choice">
+     <jxb:property name="Contents" />
+   </jxb:bindings>
+
+   <jxb:bindings node="xs:element[@name='policyMap']/xs:complexType/xs:choice/xs:choice/xs:element[@name='policyEntries']/xs:complexType/xs:sequence">
+     <jxb:property name="Contents" />
+   </jxb:bindings>
+
+   <jxb:bindings node="xs:element[@name='policyMap']/xs:complexType/xs:choice/xs:choice/xs:element[@name='defaultEntry']/xs:complexType/xs:choice">
+     <jxb:property name="Contents" />
+   </jxb:bindings>
+
    <jxb:bindings node="xs:element[@name='virtualDestinationInterceptor']/xs:complexType/xs:choice">
      <jxb:property name="Contents" />
    </jxb:bindings>
@@ -43,7 +59,7 @@
      <jxb:property name="Contents" />
    </jxb:bindings>
 
-   <jxb:bindings node="xs:element[@name='authorizationMap']/xs:complexType/xs:choice/xs:choice/xs:element[@name='authorizationEntries']/xs:complexType/xs:sequence">
+   <jxb:bindings node="xs:element/xs:complexType/xs:choice/xs:choice/xs:element[@name='authorizationEntries']/xs:complexType/xs:sequence">
      <jxb:property name="Contents" />
    </jxb:bindings>
 

Added: activemq/trunk/activemq-runtime-config/src/test/java/org/apache/activemq/PolicyEntryTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-runtime-config/src/test/java/org/apache/activemq/PolicyEntryTest.java?rev=1518009&view=auto
==============================================================================
--- activemq/trunk/activemq-runtime-config/src/test/java/org/apache/activemq/PolicyEntryTest.java (added)
+++ activemq/trunk/activemq-runtime-config/src/test/java/org/apache/activemq/PolicyEntryTest.java Tue Aug 27 22:02:07 2013
@@ -0,0 +1,90 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq;
+
+import javax.jms.Session;
+import org.apache.activemq.command.ActiveMQQueue;
+import org.apache.activemq.command.ActiveMQTopic;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class PolicyEntryTest extends RuntimeConfigTestSupport {
+
+    String configurationSeed = "policyEntryTest";
+
+    @Test
+    public void testMod() throws Exception {
+        final String brokerConfig = configurationSeed + "-policy-ml-broker";
+        applyNewConfig(brokerConfig, configurationSeed + "-policy-ml");
+        startBroker(brokerConfig);
+        assertTrue("broker alive", brokerService.isStarted());
+
+        verifyQueueLimit("Before", 1024);
+        applyNewConfig(brokerConfig, configurationSeed + "-policy-ml-mod", SLEEP);
+        verifyQueueLimit("After", 2048);
+
+        // change to existing dest
+        verifyQueueLimit("Before", 2048);
+    }
+
+    @Test
+    public void testAddNdMod() throws Exception {
+        final String brokerConfig = configurationSeed + "-policy-ml-broker";
+        applyNewConfig(brokerConfig, configurationSeed + "-policy-ml");
+        startBroker(brokerConfig);
+        assertTrue("broker alive", brokerService.isStarted());
+
+        verifyQueueLimit("Before", 1024);
+        verifyTopicLimit("Before", brokerService.getSystemUsage().getMemoryUsage().getLimit());
+
+        applyNewConfig(brokerConfig, configurationSeed + "-policy-ml-add", SLEEP);
+
+        verifyTopicLimit("After", 2048l);
+        verifyQueueLimit("After", 2048);
+
+        // change to existing dest
+        verifyTopicLimit("Before", 2048l);
+    }
+
+    private void verifyQueueLimit(String dest, int memoryLimit) throws Exception {
+        ActiveMQConnection connection = new ActiveMQConnectionFactory("vm://localhost").createActiveMQConnection();
+        try {
+            connection.start();
+            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createConsumer(session.createQueue(dest));
+
+            assertEquals(memoryLimit, brokerService.getRegionBroker().getDestinationMap().get(new ActiveMQQueue(dest)).getMemoryUsage().getLimit());
+        } finally {
+            connection.close();
+        }
+    }
+
+    private void verifyTopicLimit(String dest, long memoryLimit) throws Exception {
+        ActiveMQConnection connection = new ActiveMQConnectionFactory("vm://localhost").createActiveMQConnection();
+        try {
+            connection.start();
+            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createConsumer(session.createTopic(dest));
+
+            assertEquals(memoryLimit, brokerService.getRegionBroker().getDestinationMap().get(new ActiveMQTopic(dest)).getMemoryUsage().getLimit());
+        } finally {
+            connection.close();
+        }
+    }
+}

Propchange: activemq/trunk/activemq-runtime-config/src/test/java/org/apache/activemq/PolicyEntryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/trunk/activemq-runtime-config/src/test/java/org/apache/activemq/PolicyEntryTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-add.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-add.xml?rev=1518009&view=auto
==============================================================================
--- activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-add.xml (added)
+++ activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-add.xml Tue Aug 27 22:02:07 2013
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<beans
+        xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
+
+  <broker xmlns="http://activemq.apache.org/schema/core" start="false" persistent="false">
+    <plugins>
+      <runtimeConfigurationPlugin checkPeriod="1000" />
+    </plugins>
+    <destinationPolicy>
+      <policyMap>
+        <policyEntries>
+          <policyEntry queue=">" memoryLimit="2048"/>
+          <policyEntry topic=">" memoryLimit="2048"/>
+        </policyEntries>
+      </policyMap>
+    </destinationPolicy>
+  </broker>
+</beans>

Propchange: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-add.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-add.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-add.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-mod.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-mod.xml?rev=1518009&view=auto
==============================================================================
--- activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-mod.xml (added)
+++ activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-mod.xml Tue Aug 27 22:02:07 2013
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<beans
+        xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
+
+  <broker xmlns="http://activemq.apache.org/schema/core" start="false" persistent="false">
+    <plugins>
+      <runtimeConfigurationPlugin checkPeriod="1000" />
+    </plugins>
+    <destinationPolicy>
+      <policyMap>
+        <policyEntries>
+          <policyEntry queue=">" memoryLimit="2048"/>
+        </policyEntries>
+      </policyMap>
+    </destinationPolicy>
+  </broker>
+</beans>

Propchange: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-mod.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-mod.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml-mod.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml.xml?rev=1518009&view=auto
==============================================================================
--- activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml.xml (added)
+++ activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml.xml Tue Aug 27 22:02:07 2013
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<beans
+        xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
+
+  <broker xmlns="http://activemq.apache.org/schema/core" start="false" persistent="false">
+    <plugins>
+      <runtimeConfigurationPlugin checkPeriod="1000" />
+    </plugins>
+    <destinationPolicy>
+      <policyMap>
+        <policyEntries>
+          <policyEntry queue=">" memoryLimit="1024"/>
+        </policyEntries>
+      </policyMap>
+    </destinationPolicy>
+  </broker>
+</beans>

Propchange: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: activemq/trunk/activemq-runtime-config/src/test/resources/org/apache/activemq/policyEntryTest-policy-ml.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml