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
014package org.hornetq.api.jms.management;
015
016import java.util.Map;
017
018import javax.management.MBeanOperationInfo;
019
020import org.hornetq.api.core.management.Operation;
021import 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 */
028public 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}