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.TransportConfiguration;
021 import org.hornetq.api.core.client.ClientSessionFactory;
022 import org.hornetq.api.core.management.Operation;
023 import org.hornetq.api.core.management.Parameter;
024 import org.hornetq.spi.core.remoting.ConnectorFactory;
025
026 /**
027 * A JMSSserverControl is used to manage HornetQ JMS server.
028 *
029 * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
030 * @author <a href="mailto:tim.fox@jboss.com">Tim Fox</a>
031 */
032 public interface JMSServerControl
033 {
034 // Attributes ----------------------------------------------------
035
036 /**
037 * Returns whether this server is started.
038 */
039 boolean isStarted();
040
041 /**
042 * Returns this server's version
043 */
044 String getVersion();
045
046 /**
047 * Returns the names of the JMS topics available on this server.
048 */
049 String[] getTopicNames();
050
051 /**
052 * Returns the names of the JMS queues available on this server.
053 */
054 String[] getQueueNames();
055
056 /**
057 * Returns the names of the JMS connection factories available on this server.
058 */
059 String[] getConnectionFactoryNames();
060
061 // Operations ----------------------------------------------------
062 /**
063 * Creates a durable JMS Queue.
064 *
065 * @return {@code true} if the queue was created, {@code false} else
066 */
067 @Operation(desc = "Create a JMS Queue", impact = MBeanOperationInfo.ACTION)
068 boolean createQueue(@Parameter(name = "name", desc = "Name of the queue to create") String name) throws Exception;
069
070 /**
071 * Creates a durable JMS Queue with the specified name and JNDI binding.
072 *
073 * @return {@code true} if the queue was created, {@code false} else
074 */
075 @Operation(desc = "Create a JMS Queue", impact = MBeanOperationInfo.ACTION)
076 boolean createQueue(@Parameter(name = "name", desc = "Name of the queue to create") String name,
077 @Parameter(name = "jndiBindings", desc = "comma-separated list of JNDI bindings (use ',' if u need to use commas in your jndi name)") String jndiBindings) throws Exception;
078
079 /**
080 * Creates a durable JMS Queue with the specified name, JNDI binding and selector.
081 *
082 * @return {@code true} if the queue was created, {@code false} else
083 */
084 @Operation(desc = "Create a JMS Queue", impact = MBeanOperationInfo.ACTION)
085 boolean createQueue(@Parameter(name = "name", desc = "Name of the queue to create") String name,
086 @Parameter(name = "jndiBindings", desc = "comma-separated list of JNDI bindings (use ',' if u need to use commas in your jndi name)") String jndiBindings,
087 @Parameter(name = "selector", desc = "the jms selector") String selector) throws Exception;
088
089 /**
090 * Creates a JMS Queue with the specified name, durability, selector and JNDI binding.
091 *
092 * @return {@code true} if the queue was created, {@code false} else
093 */
094 @Operation(desc = "Create a JMS Queue", impact = MBeanOperationInfo.ACTION)
095 boolean createQueue(@Parameter(name = "name", desc = "Name of the queue to create") String name,
096 @Parameter(name = "jndiBindings", desc = "comma-separated list of JNDI bindings (use ',' if u need to use commas in your jndi name)") String jndiBindings,
097 @Parameter(name = "selector", desc = "the jms selector") String selector,
098 @Parameter(name = "durable", desc = "durability of the queue") boolean durable) throws Exception;
099
100 /**
101 * Destroys a JMS Queue with the specified name.
102 *
103 * @return {@code true} if the queue was destroyed, {@code false} else
104 */
105 @Operation(desc = "Destroy a JMS Queue", impact = MBeanOperationInfo.ACTION)
106 boolean destroyQueue(@Parameter(name = "name", desc = "Name of the queue to destroy") String name) throws Exception;
107
108 /**
109 * Creates a JMS Topic.
110 *
111 * @return {@code true} if the topic was created, {@code false} else
112 */
113 @Operation(desc = "Create a JMS Topic", impact = MBeanOperationInfo.ACTION)
114 boolean createTopic(@Parameter(name = "name", desc = "Name of the topic to create") String name) throws Exception;
115
116 /**
117 * Creates a JMS Topic with the specified name and JNDI binding.
118 *
119 * @return {@code true} if the topic was created, {@code false} else
120 */
121 @Operation(desc = "Create a JMS Topic", impact = MBeanOperationInfo.ACTION)
122 boolean createTopic(@Parameter(name = "name", desc = "Name of the topic to create") String name,
123 @Parameter(name = "jndiBindings", desc = "comma-separated list of JNDI bindings (use ',' if u need to use commas in your jndi name)") String jndiBindings) throws Exception;
124
125 /**
126 * Destroys a JMS Topic with the specified name.
127 *
128 * @return {@code true} if the topic was destroyed, {@code false} else
129 */
130 @Operation(desc = "Destroy a JMS Topic", impact = MBeanOperationInfo.ACTION)
131 boolean destroyTopic(@Parameter(name = "name", desc = "Name of the topic to destroy") String name) throws Exception;
132
133 /**
134 * Create a JMS ConnectionFactory with the specified name connected to a static list of live-backup servers.
135 * <br>
136 * The ConnectionFactory is bound to JNDI for all the specified bindings Strings.
137 * <br>
138 * {@code liveConnectorsTransportClassNames} are the class names
139 * of the {@link ConnectorFactory} to connect to the live servers
140 * and {@code liveConnectorTransportParams} are Map<String, Object> for the corresponding {@link TransportConfiguration}'s parameters.
141 *
142 * @see ClientSessionFactory#setStaticConnectors(java.util.List)
143 */
144 void createConnectionFactory(String name,
145 boolean ha,
146 boolean useDiscovery,
147 @Parameter(name = "cfType", desc = "RegularCF=0, QueueCF=1, TopicCF=2, XACF=3, QueueXACF=4, TopicXACF=5") int cfType,
148 String[] connectorNames,
149 Object[] bindings) throws Exception;
150
151 /**
152 * Create a JMS ConnectionFactory with the specified name connected to a single live-backup pair of servers.
153 * <br>
154 * The ConnectionFactory is bound to JNDI for all the specified bindings Strings.
155 *
156 */
157 @Operation(desc = "Create a JMS ConnectionFactory", impact = MBeanOperationInfo.ACTION)
158 void createConnectionFactory(@Parameter(name = "name") String name,
159 @Parameter(name = "ha") boolean ha,
160 @Parameter(name = "useDiscovery", desc = "should we use discovery or a connector configuration") boolean useDiscovery,
161 @Parameter(name = "cfType", desc = "RegularCF=0, QueueCF=1, TopicCF=2, XACF=3, QueueXACF=4, TopicXACF=5") int cfType,
162 @Parameter(name = "connectorNames", desc = "comma-separated list of connectorNames or the discovery group name") String connectors,
163 @Parameter(name = "jndiBindings", desc = "comma-separated list of JNDI bindings (use ',' if u need to use commas in your jndi name)") String jndiBindings) throws Exception;
164
165 @Operation(desc = "Create a JMS ConnectionFactory", impact = MBeanOperationInfo.ACTION)
166 void createConnectionFactory(@Parameter(name = "name") String name,
167 @Parameter(name = "ha") boolean ha,
168 @Parameter(name = "useDiscovery", desc = "should we use discovery or a connector configuration") boolean useDiscovery,
169 @Parameter(name = "cfType", desc = "RegularCF=0, QueueCF=1, TopicCF=2, XACF=3, QueueXACF=4, TopicXACF=5") int cfType,
170 @Parameter(name = "connectorNames", desc = "An array of connector or the binding address") String[] connectors,
171 @Parameter(name = "jndiBindings", desc = "array JNDI bindings (use ',' if u need to use commas in your jndi name)") String[] jndiBindings,
172 @Parameter(name = "clientID", desc = "The clientID configured for the connectionFactory") String clientID,
173 @Parameter(name = "clientFailureCheckPeriod", desc = "clientFailureCheckPeriod") long clientFailureCheckPeriod,
174 @Parameter(name = "connectionTTL", desc = "connectionTTL") long connectionTTL,
175 @Parameter(name = "callTimeout", desc = "callTimeout") long callTimeout,
176 @Parameter(name = "minLargeMessageSize", desc = "minLargeMessageSize") int minLargeMessageSize,
177 @Parameter(name = "compressLargeMessages", desc = "compressLargeMessages") boolean compressLargeMessages,
178 @Parameter(name = "consumerWindowSize", desc = "consumerWindowSize") int consumerWindowSize,
179 @Parameter(name = "consumerMaxRate", desc = "consumerMaxRate") int consumerMaxRate,
180 @Parameter(name = "confirmationWindowSize", desc = "confirmationWindowSize") int confirmationWindowSize,
181 @Parameter(name = "producerWindowSize", desc = "producerWindowSize") int producerWindowSize,
182 @Parameter(name = "producerMaxRate", desc = "producerMaxRate") int producerMaxRate,
183 @Parameter(name = "blockOnAcknowledge", desc = "blockOnAcknowledge") boolean blockOnAcknowledge,
184 @Parameter(name = "blockOnDurableSend", desc = "blockOnDurableSend") boolean blockOnDurableSend,
185 @Parameter(name = "blockOnNonDurableSend", desc = "blockOnNonDurableSend") boolean blockOnNonDurableSend,
186 @Parameter(name = "autoGroup", desc = "autoGroup") boolean autoGroup,
187 @Parameter(name = "preAcknowledge", desc = "preAcknowledge") boolean preAcknowledge,
188 @Parameter(name = "loadBalancingPolicyClassName", desc = "loadBalancingPolicyClassName (null or blank mean use the default value)") String loadBalancingPolicyClassName,
189 @Parameter(name = "transactionBatchSize", desc = "transactionBatchSize") int transactionBatchSize,
190 @Parameter(name = "dupsOKBatchSize", desc = "dupsOKBatchSize") int dupsOKBatchSize,
191 @Parameter(name = "useGlobalPools", desc = "useGlobalPools") boolean useGlobalPools,
192 @Parameter(name = "scheduledThreadPoolMaxSize", desc = "scheduledThreadPoolMaxSize") int scheduledThreadPoolMaxSize,
193 @Parameter(name = "threadPoolMaxSize", desc = "threadPoolMaxSize") int threadPoolMaxSize,
194 @Parameter(name = "retryInterval", desc = "retryInterval") long retryInterval,
195 @Parameter(name = "retryIntervalMultiplier", desc = "retryIntervalMultiplier") double retryIntervalMultiplier,
196 @Parameter(name = "maxRetryInterval", desc = "maxRetryInterval") long maxRetryInterval,
197 @Parameter(name = "reconnectAttempts", desc = "reconnectAttempts") int reconnectAttempts,
198 @Parameter(name = "failoverOnInitialConnection", desc = "failoverOnInitialConnection") boolean failoverOnInitialConnection,
199 @Parameter(name = "groupId", desc = "groupId") String groupId) throws Exception;
200
201
202 @Operation(desc = "Create a JMS ConnectionFactory", impact = MBeanOperationInfo.ACTION)
203 void createConnectionFactory(@Parameter(name = "name") String name,
204 @Parameter(name = "ha") boolean ha,
205 @Parameter(name = "useDiscovery", desc = "should we use discovery or a connector configuration") boolean useDiscovery,
206 @Parameter(name = "cfType", desc = "RegularCF=0, QueueCF=1, TopicCF=2, XACF=3, QueueXACF=4, TopicXACF=5") int cfType,
207 @Parameter(name = "connectorNames", desc = "comma-separated list of connectorNames or the discovery group name") String connectors,
208 @Parameter(name = "jndiBindings", desc = "comma-separated list of JNDI bindings (use ',' if u need to use commas in your jndi name)") String jndiBindings,
209 @Parameter(name = "clientID", desc = "The clientID configured for the connectionFactory") String clientID,
210 @Parameter(name = "clientFailureCheckPeriod", desc = "clientFailureCheckPeriod") long clientFailureCheckPeriod,
211 @Parameter(name = "connectionTTL", desc = "connectionTTL") long connectionTTL,
212 @Parameter(name = "callTimeout", desc = "callTimeout") long callTimeout,
213 @Parameter(name = "minLargeMessageSize", desc = "minLargeMessageSize") int minLargeMessageSize,
214 @Parameter(name = "compressLargeMessages", desc = "compressLargeMessages") boolean compressLargeMessages,
215 @Parameter(name = "consumerWindowSize", desc = "consumerWindowSize") int consumerWindowSize,
216 @Parameter(name = "consumerMaxRate", desc = "consumerMaxRate") int consumerMaxRate,
217 @Parameter(name = "confirmationWindowSize", desc = "confirmationWindowSize") int confirmationWindowSize,
218 @Parameter(name = "producerWindowSize", desc = "producerWindowSize") int producerWindowSize,
219 @Parameter(name = "producerMaxRate", desc = "producerMaxRate") int producerMaxRate,
220 @Parameter(name = "blockOnAcknowledge", desc = "blockOnAcknowledge") boolean blockOnAcknowledge,
221 @Parameter(name = "blockOnDurableSend", desc = "blockOnDurableSend") boolean blockOnDurableSend,
222 @Parameter(name = "blockOnNonDurableSend", desc = "blockOnNonDurableSend") boolean blockOnNonDurableSend,
223 @Parameter(name = "autoGroup", desc = "autoGroup") boolean autoGroup,
224 @Parameter(name = "preAcknowledge", desc = "preAcknowledge") boolean preAcknowledge,
225 @Parameter(name = "loadBalancingPolicyClassName", desc = "loadBalancingPolicyClassName (null or blank mean use the default value)") String loadBalancingPolicyClassName,
226 @Parameter(name = "transactionBatchSize", desc = "transactionBatchSize") int transactionBatchSize,
227 @Parameter(name = "dupsOKBatchSize", desc = "dupsOKBatchSize") int dupsOKBatchSize,
228 @Parameter(name = "useGlobalPools", desc = "useGlobalPools") boolean useGlobalPools,
229 @Parameter(name = "scheduledThreadPoolMaxSize", desc = "scheduledThreadPoolMaxSize") int scheduledThreadPoolMaxSize,
230 @Parameter(name = "threadPoolMaxSize", desc = "threadPoolMaxSize") int threadPoolMaxSize,
231 @Parameter(name = "retryInterval", desc = "retryInterval") long retryInterval,
232 @Parameter(name = "retryIntervalMultiplier", desc = "retryIntervalMultiplier") double retryIntervalMultiplier,
233 @Parameter(name = "maxRetryInterval", desc = "maxRetryInterval") long maxRetryInterval,
234 @Parameter(name = "reconnectAttempts", desc = "reconnectAttempts") int reconnectAttempts,
235 @Parameter(name = "failoverOnInitialConnection", desc = "failoverOnInitialConnection") boolean failoverOnInitialConnection,
236 @Parameter(name = "groupId", desc = "groupId") String groupId) throws Exception;
237
238
239
240 @Operation(desc = "Destroy a JMS ConnectionFactory", impact = MBeanOperationInfo.ACTION)
241 void destroyConnectionFactory(@Parameter(name = "name", desc = "Name of the ConnectionFactory to destroy") String name) throws Exception;
242
243 /**
244 * Lists the addresses of all the clients connected to this address.
245 */
246 @Operation(desc = "List the client addresses", impact = MBeanOperationInfo.INFO)
247 String[] listRemoteAddresses() throws Exception;
248
249 /**
250 * Lists the addresses of the clients connected to this address which matches the specified IP address.
251 */
252 @Operation(desc = "List the client addresses which match the given IP Address", impact = MBeanOperationInfo.INFO)
253 String[] listRemoteAddresses(@Parameter(desc = "an IP address", name = "ipAddress") String ipAddress) throws Exception;
254
255 /**
256 * Closes all the connections of clients connected to this server which matches the specified IP address.
257 */
258 @Operation(desc = "Closes all the connections for the given IP Address", impact = MBeanOperationInfo.INFO)
259 boolean closeConnectionsForAddress(@Parameter(desc = "an IP address", name = "ipAddress") String ipAddress) throws Exception;
260
261 /**
262 * Lists all the IDs of the connections connected to this server.
263 */
264 @Operation(desc = "List all the connection IDs", impact = MBeanOperationInfo.INFO)
265 String[] listConnectionIDs() throws Exception;
266
267 /**
268 * Lists all the connections connected to this server.
269 * The returned String is a JSON string containing an array of JMSConnectionInfo objects.
270 *
271 * @see JMSConnectionInfo#from(String)
272 */
273 @Operation(desc = "List all JMS connections")
274 String listConnectionsAsJSON() throws Exception;
275
276 /**
277 * Lists all the sessions IDs for the specified connection ID.
278 */
279 @Operation(desc = "List the sessions for the given connectionID", impact = MBeanOperationInfo.INFO)
280 String[] listSessions(@Parameter(desc = "a connection ID", name = "connectionID") String connectionID) throws Exception;
281
282 /**
283 * Lists all the consumers which belongs to the JMS Connection specified by the connectionID.
284 * The returned String is a JSON string containing an array of JMSConsumerInfo objects.
285 *
286 * @see JMSConsumerInfo#from(String)
287 */
288 @Operation(desc = "List all JMS consumers associated to a JMS Connection")
289 String listConsumersAsJSON(@Parameter(desc = "a connection ID", name = "connectionID") String connectionID) throws Exception;
290
291 /**
292 * Lists all the consumers
293 * The returned String is a JSON string containing an array of JMSConsumerInfo objects.
294 *
295 * @see JMSConsumerInfo#from(String)
296 */
297 @Operation(desc = "List all JMS consumers associated to a JMS Connection")
298 String listAllConsumersAsJSON() throws Exception;
299
300 /**
301 * Lists all addresses to which the designated server session has sent messages.
302 */
303 @Operation(desc = "Lists all addresses to which the designated session has sent messages", impact = MBeanOperationInfo.INFO)
304 String[] listTargetDestinations(@Parameter(desc = "a session ID", name = "sessionID") String sessionID) throws Exception;
305
306 /**
307 * Returns the last sent message's ID from the given session to an address.
308 */
309 @Operation(desc = "Returns the last sent message's ID from the given session to an address", impact = MBeanOperationInfo.INFO)
310 String getLastSentMessageID(@Parameter(desc = "session name", name = "sessionID") String sessionID,
311 @Parameter(desc = "address", name = "address") String address) throws Exception;
312
313 /**
314 * Gets the session's creation time.
315 */
316 @Operation(desc = "Gets the sessions creation time", impact = MBeanOperationInfo.INFO)
317 String getSessionCreationTime(@Parameter(desc = "session name", name = "sessionID") String sessionID) throws Exception;
318
319 /**
320 * Lists all the sessions IDs for the specified connection ID.
321 */
322 @Operation(desc = "List the sessions for the given connectionID", impact = MBeanOperationInfo.INFO)
323 String listSessionsAsJSON(@Parameter(desc = "a connection ID", name = "connectionID") String connectionID) throws Exception;
324
325 /**
326 * List all the prepared transaction, sorted by date,
327 * oldest first, with details, in text format
328 */
329 @Operation(desc = "List all the prepared transaction, sorted by date, oldest first, with details, in JSON format", impact = MBeanOperationInfo.INFO)
330 String listPreparedTransactionDetailsAsJSON() throws Exception;
331
332 /**
333 * List all the prepared transaction, sorted by date,
334 * oldest first, with details, in HTML format
335 */
336 @Operation(desc = "List all the prepared transaction, sorted by date, oldest first, with details, in HTML format", impact = MBeanOperationInfo.INFO)
337 String listPreparedTransactionDetailsAsHTML() throws Exception;
338 }