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.Map;
017    
018    import javax.management.MBeanOperationInfo;
019    
020    import org.hornetq.api.core.management.Operation;
021    import org.hornetq.api.core.management.Parameter;
022    
023    /**
024     * A JMSQueueControl is used to manage a JMS queue.
025     *
026     * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
027     */
028    public interface JMSQueueControl extends DestinationControl
029    {
030       // Attributes ----------------------------------------------------
031    
032       /**
033        * Returns the expiry address associated to this queue.
034        */
035       String getExpiryAddress();
036    
037       /**
038        * Sets the expiry address associated to this queue to the specified expiryAddress.
039        */
040       void setExpiryAddress(@Parameter(name = "expiryAddress", desc = "Expiry address of the queue") String expiryAddress) throws Exception;
041    
042       /**
043        * Returns the dead-letter address associated to this queue.
044        */
045       String getDeadLetterAddress();
046    
047       /**
048        * Sets the dead-letter address associated to this queue to the specified deadLetterAddress.
049        */
050       void setDeadLetterAddress(@Parameter(name = "deadLetterAddress", desc = "Dead-letter address of the queue") String deadLetterAddress) throws Exception;
051    
052       /**
053        * Returns the number of scheduled messages in this queue.
054        */
055       long getScheduledCount();
056    
057       /**
058        * Returns the number of consumers consuming messages from this queue.
059        */
060       int getConsumerCount();
061    
062       /**
063        * returns the selector for the queue
064        */
065       String getSelector();
066    
067       // Operations ----------------------------------------------------
068    
069       /**
070        * Returns the JNDI bindings associated  to this connection factory.
071        */
072       @Operation(desc = "Returns the list of JNDI bindings associated")
073       String[] getJNDIBindings();
074    
075       /**
076        * Add the JNDI binding to this destination
077        */
078       @Operation(desc = "Adds the queue to another JNDI binding")
079       void addJNDI(@Parameter(name = "jndiBinding", desc = "the name of the binding for JNDI") String jndi) throws Exception;
080    
081       @Operation(desc = "Adds the queue to another JNDI binding")
082       void removeJNDI(@Parameter(name = "jndiBinding", desc = "the name of the binding for JNDI") String jndi) throws Exception;
083    
084    
085       /**
086        * Lists all the JMS messages in this queue matching the specified filter.
087        * <br>
088        * 1 Map represents 1 message, keys are the message's properties and headers, values are the corresponding values.
089        * <br>
090        * Using {@code null} or an empty filter will list <em>all</em> messages from this queue.
091        */
092       @Operation(desc = "List all messages in the queue which matches the filter", impact = MBeanOperationInfo.INFO)
093       Map<String, Object>[] listMessages(@Parameter(name = "filter", desc = "A JMS Message filter") String filter) throws Exception;
094    
095       /**
096        * Lists all the JMS messages in this queue matching the specified filter using JSON serialization.
097        * <br>
098        * Using {@code null} or an empty filter will list <em>all</em> messages from this queue.
099        */
100       @Operation(desc = "List all messages in the queue which matches the filter and return them using JSON", impact = MBeanOperationInfo.INFO)
101       String listMessagesAsJSON(@Parameter(name = "filter", desc = "A JMS Message filter (can be empty)") String filter) throws Exception;
102    
103       /**
104        * Counts the number of messages in this queue matching the specified filter.
105        * <br>
106        * Using {@code null} or an empty filter will count <em>all</em> messages from this queue.
107        */
108       @Operation(desc = "Returns the number of the messages in the queue matching the given filter", impact = MBeanOperationInfo.INFO)
109       long countMessages(@Parameter(name = "filter", desc = "A JMS message filter (can be empty)") String filter) throws Exception;
110    
111       /**
112        * Removes the message corresponding to the specified message ID.
113        *
114        * @return {@code true} if the message was removed, {@code false} else
115        */
116       @Operation(desc = "Remove the message corresponding to the given messageID", impact = MBeanOperationInfo.ACTION)
117       boolean removeMessage(@Parameter(name = "messageID", desc = "A message ID") String messageID) throws Exception;
118    
119       /**
120        * Removes all the message corresponding to the specified filter.
121        * <br>
122        * Using {@code null} or an empty filter will remove <em>all</em> messages from this queue.
123        *
124        * @return the number of removed messages
125        */
126       @Operation(desc = "Remove the messages corresponding to the given filter (and returns the number of removed messages)", impact = MBeanOperationInfo.ACTION)
127       int removeMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
128    
129       /**
130        * Expires all the message corresponding to the specified filter.
131        * <br>
132        * Using {@code null} or an empty filter will expire <em>all</em> messages from this queue.
133        *
134        * @return the number of expired messages
135        */
136       @Operation(desc = "Expire the messages corresponding to the given filter (and returns the number of expired messages)", impact = MBeanOperationInfo.ACTION)
137       int expireMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
138    
139       /**
140        * Expires the message corresponding to the specified message ID.
141        *
142        * @return {@code true} if the message was expired, {@code false} else
143        */
144       @Operation(desc = "Expire the message corresponding to the given messageID", impact = MBeanOperationInfo.ACTION)
145       boolean expireMessage(@Parameter(name = "messageID", desc = "A message ID") String messageID) throws Exception;
146    
147       /**
148        * Sends the message corresponding to the specified message ID to this queue's dead letter address.
149        *
150        * @return {@code true} if the message was sent to the dead letter address, {@code false} else
151        */
152       @Operation(desc = "Send the message corresponding to the given messageID to this queue's Dead Letter Address", impact = MBeanOperationInfo.ACTION)
153       boolean sendMessageToDeadLetterAddress(@Parameter(name = "messageID", desc = "A message ID") String messageID) throws Exception;
154    
155       /**
156        * Sends all the message corresponding to the specified filter to this queue's dead letter address.
157        * <br>
158        * Using {@code null} or an empty filter will send <em>all</em> messages from this queue.
159        *
160        * @return the number of sent messages
161        */
162       @Operation(desc = "Send the messages corresponding to the given filter to this queue's Dead Letter Address", impact = MBeanOperationInfo.ACTION)
163       int sendMessagesToDeadLetterAddress(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filterStr) throws Exception;
164    
165       /**
166        * Changes the message's priority corresponding to the specified message ID to the specified priority.
167        *
168        * @param newPriority between 0 and 9 inclusive.
169        *
170        * @return {@code true} if the message priority was changed
171        */
172       @Operation(desc = "Change the priority of the message corresponding to the given messageID", impact = MBeanOperationInfo.ACTION)
173       boolean changeMessagePriority(@Parameter(name = "messageID", desc = "A message ID") String messageID,
174                                     @Parameter(name = "newPriority", desc = "the new priority (between 0 and 9)") int newPriority) throws Exception;
175    
176       /**
177        * Changes the priority for all the message corresponding to the specified filter to the specified priority.
178        * <br>
179        * Using {@code null} or an empty filter will change <em>all</em> messages from this queue.
180        *
181        * @return the number of changed messages
182        */
183       @Operation(desc = "Change the priority of the messages corresponding to the given filter", impact = MBeanOperationInfo.ACTION)
184       int changeMessagesPriority(@Parameter(name = "filter", desc = "A message filter") String filter,
185                                  @Parameter(name = "newPriority", desc = "the new priority (between 0 and 9)") int newPriority) throws Exception;
186       /**
187        * Moves the message corresponding to the specified message ID to the specified other queue.
188        *
189        * @return {@code true} if the message was moved, {@code false} else
190        */
191       @Operation(desc = "Move the message corresponding to the given messageID to another queue, ignoring duplicates (rejectDuplicates=false on this case)", impact = MBeanOperationInfo.ACTION)
192       boolean moveMessage(@Parameter(name = "messageID", desc = "A message ID") String messageID,
193                           @Parameter(name = "otherQueueName", desc = "The name of the queue to move the message to") String otherQueueName) throws Exception;
194    
195    
196       /**
197        * Moves the message corresponding to the specified message ID to the specified other queue.
198        *
199        * @return {@code true} if the message was moved, {@code false} else
200        */
201       @Operation(desc = "Move the message corresponding to the given messageID to another queue", impact = MBeanOperationInfo.ACTION)
202       boolean moveMessage(@Parameter(name = "messageID", desc = "A message ID") String messageID,
203                           @Parameter(name = "otherQueueName", desc = "The name of the queue to move the message to") String otherQueueName,
204                           @Parameter(name = "rejectDuplicates", desc = "Reject messages identified as duplicate by the duplicate message") boolean rejectDuplicates) throws Exception;
205    
206       /**
207        * Moves all the message corresponding to the specified filter  to the specified other queue.
208        * RejectDuplicates=false on this case
209        * <br>
210        * Using {@code null} or an empty filter will move <em>all</em> messages from this queue.
211        *
212        * @return the number of moved messages
213        */
214       @Operation(desc = "Move the messages corresponding to the given filter (and returns the number of moved messages). rejectDuplicates=false on this case", impact = MBeanOperationInfo.ACTION)
215       int moveMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter,
216                        @Parameter(name = "otherQueueName", desc = "The name of the queue to move the messages to") String otherQueueName) throws Exception;
217    
218       /**
219        * Moves all the message corresponding to the specified filter  to the specified other queue.
220        * <br>
221        * Using {@code null} or an empty filter will move <em>all</em> messages from this queue.
222        *
223        * @return the number of moved messages
224        */
225       @Operation(desc = "Move the messages corresponding to the given filter (and returns the number of moved messages)", impact = MBeanOperationInfo.ACTION)
226       int moveMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter,
227                        @Parameter(name = "otherQueueName", desc = "The name of the queue to move the messages to") String otherQueueName,
228                        @Parameter(name = "rejectDuplicates", desc = "Reject messages identified as duplicate by the duplicate message") boolean rejectDuplicates) throws Exception;
229    
230       /**
231        * Lists the message counter for this queue.
232        */
233       @Operation(desc = "List the message counters", impact = MBeanOperationInfo.INFO)
234       String listMessageCounter() throws Exception;
235    
236       /**
237        * Resets the message counter for this queue.
238        */
239       @Operation(desc = "Reset the message counters", impact = MBeanOperationInfo.INFO)
240       void resetMessageCounter() throws Exception;
241    
242       /**
243        * Lists the message counter for this queue as a HTML table.
244        */
245       @Operation(desc = "List the message counters as HTML", impact = MBeanOperationInfo.INFO)
246       String listMessageCounterAsHTML() throws Exception;
247    
248       /**
249        * Lists the message counter history for this queue.
250        */
251       @Operation(desc = "List the message counters history", impact = MBeanOperationInfo.INFO)
252       String listMessageCounterHistory() throws Exception;
253    
254       /**
255        * Lists the message counter history for this queue as a HTML table.
256        */
257       @Operation(desc = "List the message counters history as HTML", impact = MBeanOperationInfo.INFO)
258       String listMessageCounterHistoryAsHTML() throws Exception;
259    
260       /**
261        * Pauses the queue. Messages are no longer delivered to its consumers.
262        */
263       @Operation(desc = "Pause the queue.", impact = MBeanOperationInfo.ACTION)
264       void pause() throws Exception;
265    
266       /**
267        * Returns whether the queue is paused.
268        */
269       @Operation(desc = "Returns true if the queue is paused.", impact = MBeanOperationInfo.INFO)
270       boolean isPaused() throws Exception;
271    
272       /**
273        * Resumes the queue. Messages are again delivered to its consumers.
274        */
275       @Operation(desc = "Resume the queue.", impact = MBeanOperationInfo.ACTION)
276       void resume() throws Exception;
277    
278       @Operation(desc = "List all the existent consumers on the Queue")
279       String listConsumersAsJSON() throws Exception;
280    
281    }