You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2006/03/09 11:49:39 UTC

svn commit: r384486 - in /incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq: ./ broker/jmx/ broker/region/

Author: jstrachan
Date: Thu Mar  9 02:49:37 2006
New Revision: 384486

URL: http://svn.apache.org/viewcvs?rev=384486&view=rev
Log:
minor refactor of a property and exposed the selector as an MBean attribute. the selector can actually be updated in real time via JMX for non-durable topic subscriptions for AMQ-625

Modified:
    incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQQueueBrowser.java
    incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/SubscriptionView.java
    incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/SubscriptionViewMBean.java
    incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractSubscription.java
    incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DurableTopicSubscription.java
    incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Subscription.java

Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQQueueBrowser.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQQueueBrowser.java?rev=384486&r1=384485&r2=384486&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQQueueBrowser.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQQueueBrowser.java Thu Mar  9 02:49:37 2006
@@ -90,7 +90,7 @@
     /**
      * @param session
      * @param originalDestination
-     * @param selector
+     * @param selectorExpression
      * @param cnum
      * @return
      * @throws JMSException

Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/SubscriptionView.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/SubscriptionView.java?rev=384486&r1=384485&r2=384486&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/SubscriptionView.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/SubscriptionView.java Thu Mar  9 02:49:37 2006
@@ -20,6 +20,8 @@
 import org.apache.activemq.command.ActiveMQDestination;
 import org.apache.activemq.command.ConsumerInfo;
 
+import javax.jms.InvalidSelectorException;
+
 
 
 /**
@@ -91,7 +93,22 @@
             return dest.getPhysicalName();
         }
         return "NOTSET";
-       
+    }
+
+    public String getSelector() {
+        if (subscription != null) {
+            return subscription.getSelector();
+        }
+        return null;
+    }
+
+    public void setSelector(String selector) throws InvalidSelectorException, UnsupportedOperationException {
+        if (subscription != null) {
+            subscription.setSelector(selector);
+        }
+        else {
+            throw new UnsupportedOperationException("No subscription object");
+        }
     }
 
     /**

Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/SubscriptionViewMBean.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/SubscriptionViewMBean.java?rev=384486&r1=384485&r2=384486&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/SubscriptionViewMBean.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/SubscriptionViewMBean.java Thu Mar  9 02:49:37 2006
@@ -13,6 +13,8 @@
  */
 package org.apache.activemq.broker.jmx;
 
+import javax.jms.InvalidSelectorException;
+
 /**
  * @version $Revision: 1.5 $
  */
@@ -42,6 +44,18 @@
      */
     public String getDestinationName();
 
+
+    /**
+     * @return the JMS selector on the current subscription
+     */
+    public String getSelector();
+    
+    /**
+     * Attempts to change the current active selector on the subscription.
+     * This operation is not supported for persistent topics.
+     */
+    public void setSelector(String selector) throws InvalidSelectorException, UnsupportedOperationException;
+    
     /**
      * @return true if the destination is a Queue
      */

Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractSubscription.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractSubscription.java?rev=384486&r1=384485&r2=384486&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractSubscription.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractSubscription.java Thu Mar  9 02:49:37 2006
@@ -45,7 +45,7 @@
     protected ConnectionContext context;
     protected ConsumerInfo info;
     final protected DestinationFilter destinationFilter;
-    final protected BooleanExpression selector;
+    private BooleanExpression selectorExpression;
    
     final protected CopyOnWriteArrayList destinations = new CopyOnWriteArrayList();
 
@@ -54,7 +54,7 @@
         this.context = context;
         this.info = info;
         this.destinationFilter = DestinationFilter.parseFilter(info.getDestination());
-        this.selector = parseSelector(info);
+        this.selectorExpression = parseSelector(info);
     }
     
     static private BooleanExpression parseSelector(ConsumerInfo info) throws InvalidSelectorException {
@@ -86,7 +86,7 @@
                 return false;
         }
         try {
-            return (selector == null || selector.matches(context)) && this.context.isAllowedToConsume(node);
+            return (selectorExpression == null || selectorExpression.matches(context)) && this.context.isAllowedToConsume(node);
         } catch (JMSException e) {
             log.info("Selector failed to evaluate: " + e.getMessage(), e);
             return false;
@@ -124,7 +124,20 @@
         return info;
     }
 
-    public BooleanExpression getSelector() {
-        return selector;
+    public BooleanExpression getSelectorExpression() {
+        return selectorExpression;
+    }
+    
+    public String getSelector() {
+        return info.getSelector();
+    }
+    
+    public void setSelector(String selector) throws InvalidSelectorException {
+        ConsumerInfo copy = info.copy();
+        copy.setSelector(selector);
+        BooleanExpression newSelector = parseSelector(copy);
+        // its valid so lets actually update it now
+        info.setSelector(selector);
+        this.selectorExpression = newSelector;
     }
 }

Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DurableTopicSubscription.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DurableTopicSubscription.java?rev=384486&r1=384485&r2=384486&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DurableTopicSubscription.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DurableTopicSubscription.java Thu Mar  9 02:49:37 2006
@@ -16,10 +16,7 @@
  */
 package org.apache.activemq.broker.region;
 
-import java.io.IOException;
-import java.util.Iterator;
-
-import javax.jms.InvalidSelectorException;
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.activemq.broker.Broker;
 import org.apache.activemq.broker.ConnectionContext;
@@ -29,7 +26,10 @@
 import org.apache.activemq.command.MessageDispatch;
 import org.apache.activemq.util.SubscriptionKey;
 
-import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
+import javax.jms.InvalidSelectorException;
+
+import java.io.IOException;
+import java.util.Iterator;
 
 public class DurableTopicSubscription extends PrefetchSubscription {
     
@@ -131,6 +131,9 @@
         return 0;
     }
     
+    public void setSelector(String selector) throws InvalidSelectorException {
+        throw new UnsupportedOperationException("You cannot dynamically change the selector for durable topic subscriptions");
+    }
 
     protected boolean canDispatch(MessageReference node) {
         return active;

Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Subscription.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Subscription.java?rev=384486&r1=384485&r2=384486&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Subscription.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Subscription.java Thu Mar  9 02:49:37 2006
@@ -25,6 +25,8 @@
 import org.apache.activemq.command.MessageDispatchNotification;
 import org.apache.activemq.filter.MessageEvaluationContext;
 
+import javax.jms.InvalidSelectorException;
+
 /**
  * @version $Revision: 1.5 $
  */
@@ -125,4 +127,14 @@
      */
     long getDequeueCounter();
 
+    /**
+     * @return the JMS selector on the current subscription
+     */
+    public String getSelector();
+    
+    /**
+     * Attempts to change the current active selector on the subscription.
+     * This operation is not supported for persistent topics.
+     */
+    public void setSelector(String selector) throws InvalidSelectorException, UnsupportedOperationException;
 }