001 /*
002 * Copyright 2009 Red Hat, Inc.
003 * Red Hat licenses this file to you under the Apache License, version
004 * 2.0 (the "License"); you may not use this file except in compliance
005 * with the License. You may obtain a copy of the License at
006 * http://www.apache.org/licenses/LICENSE-2.0
007 * Unless required by applicable law or agreed to in writing, software
008 * distributed under the License is distributed on an "AS IS" BASIS,
009 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
010 * implied. See the License for the specific language governing
011 * permissions and limitations under the License.
012 */
013
014 package org.hornetq.api.jms.management;
015
016 import java.util.List;
017 import java.util.Map;
018
019 import javax.management.MBeanOperationInfo;
020
021 import org.hornetq.api.core.management.Operation;
022 import org.hornetq.api.core.management.Parameter;
023
024 /**
025 * A TopicControl is used to manage a JMS Topic.
026 *
027 * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
028 */
029 public interface TopicControl extends DestinationControl
030 {
031 // Attributes ----------------------------------------------------
032
033 /**
034 * Returns the number of (durable and non-durable) subscribers for this topic.
035 */
036 int getSubscriptionCount();
037
038 /**
039 * Returns the number of <em>durable</em> subscribers for this topic.
040 */
041 int getDurableSubscriptionCount();
042
043 /**
044 * Returns the number of <em>non-durable</em> subscribers for this topic.
045 */
046 int getNonDurableSubscriptionCount();
047
048 /**
049 * Returns the number of messages for all <em>durable</em> subscribers for this topic.
050 */
051 int getDurableMessageCount();
052
053 /**
054 * Returns the number of messages for all <em>non-durable</em> subscribers for this topic.
055 */
056 int getNonDurableMessageCount();
057
058 /**
059 * Returns the JNDI bindings associated to this connection factory.
060 */
061 @Operation(desc = "Returns the list of JNDI bindings associated")
062 String[] getJNDIBindings();
063
064 /**
065 * Add the JNDI binding to this destination
066 */
067 @Operation(desc = "Adds the queue to another JNDI binding")
068 void addJNDI(@Parameter(name = "jndiBinding", desc = "the name of the binding for JNDI") String jndi) throws Exception;
069
070
071
072 // Operations ----------------------------------------------------
073
074 /**
075 * Lists all the subscriptions for this topic (both durable and non-durable).
076 */
077 @Operation(desc = "List all subscriptions")
078 Object[] listAllSubscriptions() throws Exception;
079
080 /**
081 * Lists all the subscriptions for this topic (both durable and non-durable) using JSON serialization.
082 * <br>
083 * Java objects can be recreated from JSON serialization using {@link SubscriptionInfo#from(String)}.
084 */
085 @Operation(desc = "List all subscriptions")
086 String listAllSubscriptionsAsJSON() throws Exception;
087
088 /**
089 * Lists all the <em>durable</em> subscriptions for this topic.
090 */
091 @Operation(desc = "List only the durable subscriptions")
092 Object[] listDurableSubscriptions() throws Exception;
093
094 /**
095 * Lists all the <em>durable</em> subscriptions using JSON serialization.
096 * <br>
097 * Java objects can be recreated from JSON serialization using {@link SubscriptionInfo#from(String)}.
098 */
099 @Operation(desc = "List only the durable subscriptions")
100 String listDurableSubscriptionsAsJSON() throws Exception;
101
102 /**
103 * Lists all the <em>non-durable</em> subscriptions for this topic.
104 */
105 @Operation(desc = "List only the non durable subscriptions")
106 Object[] listNonDurableSubscriptions() throws Exception;
107
108 /**
109 * Lists all the <em>non-durable</em> subscriptions using JSON serialization.
110 * <br>
111 * Java objects can be recreated from JSON serialization using {@link SubscriptionInfo#from(String)}.
112 */
113 @Operation(desc = "List only the non durable subscriptions")
114 String listNonDurableSubscriptionsAsJSON() throws Exception;
115
116 /**
117 * Lists all the messages in this queue matching the specified queue representing the subscription.
118 * <br>
119 * 1 Map represents 1 message, keys are the message's properties and headers, values are the corresponding values.
120 */
121 @Operation(desc = "List all the message for the given subscription")
122 public Map<String, Object>[] listMessagesForSubscription(@Parameter(name = "queueName", desc = "the name of the queue representing a subscription") String queueName) throws Exception;
123
124 /**
125 * Lists all the messages in this queue matching the specified queue representing the subscription using JSON serialization.
126 */
127 @Operation(desc = "List all the message for the given subscription")
128 public String listMessagesForSubscriptionAsJSON(@Parameter(name = "queueName", desc = "the name of the queue representing a subscription") String queueName) throws Exception;
129
130 /**
131 * Counts the number of messages in the subscription specified by the specified client ID and subscription name. Only messages matching the filter will be counted.
132 * <br>
133 * Using {@code null} or an empty filter will count <em>all</em> messages from this queue.
134 */
135 @Operation(desc = "Count the number of messages matching the filter for the given subscription")
136 public int countMessagesForSubscription(@Parameter(name = "clientID", desc = "the client ID") String clientID,
137 @Parameter(name = "subscriptionName", desc = "the name of the durable subscription") String subscriptionName,
138 @Parameter(name = "filter", desc = "a JMS filter (can be empty)") String filter) throws Exception;
139
140 /**
141 * Drops the subscription specified by the specified client ID and subscription name.
142 */
143 @Operation(desc = "Drop a durable subscription", impact = MBeanOperationInfo.ACTION)
144 void dropDurableSubscription(@Parameter(name = "clientID", desc = "the client ID") String clientID,
145 @Parameter(name = "subscriptionName", desc = "the name of the durable subscription") String subscriptionName) throws Exception;
146
147 /**
148 * Drops all subscriptions.
149 */
150 @Operation(desc = "Drop all subscriptions from this topic", impact = MBeanOperationInfo.ACTION)
151 void dropAllSubscriptions() throws Exception;
152 }