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.core.management;
015
016 import javax.management.MBeanOperationInfo;
017
018 import org.hornetq.api.core.HornetQException;
019 import org.hornetq.api.core.Interceptor;
020
021 /**
022 * A HornetQServerControl is used to manage HornetQ servers.
023 */
024 public interface HornetQServerControl
025 {
026 // Attributes ----------------------------------------------------
027
028 /**
029 * Returns the name of the connector used to connect to the live.
030 * <br>
031 * If this server is not a backup that uses shared nothing HA, it's value is null
032 */
033 String getLiveConnectorName() throws Exception;
034
035 /**
036 * Returns this server's version.
037 */
038 String getVersion();
039
040 /**
041 * Returns the number of connections connected to this server.
042 */
043 int getConnectionCount();
044
045 /**
046 * Return whether this server is started.
047 */
048 boolean isStarted();
049
050 /**
051 * Returns the list of interceptors used by this server.
052 *
053 * @see Interceptor
054 */
055 String[] getInterceptorClassNames();
056
057 /**
058 * Returns whether this server is clustered.
059 */
060 boolean isClustered();
061
062 /**
063 * Returns the maximum number of threads in the <em>scheduled</em> thread pool.
064 */
065 int getScheduledThreadPoolMaxSize();
066
067 /**
068 * Returns the maximum number of threads in the thread pool.
069 */
070 int getThreadPoolMaxSize();
071
072 /**
073 * Returns the interval time (in milliseconds) to invalidate security credentials.
074 */
075 long getSecurityInvalidationInterval();
076
077 /**
078 * Returns whether security is enabled for this server.
079 */
080 boolean isSecurityEnabled();
081
082 /**
083 * Returns the file system directory used to store bindings.
084 */
085 String getBindingsDirectory();
086
087 /**
088 * Returns the file system directory used to store journal log.
089 */
090 String getJournalDirectory();
091
092 /**
093 * Returns the type of journal used by this server (either {@code NIO} or {@code ASYNCIO}).
094 */
095 String getJournalType();
096
097 /**
098 * Returns whether the journal is synchronized when receiving transactional data.
099 */
100 boolean isJournalSyncTransactional();
101
102 /**
103 * Returns whether the journal is synchronized when receiving non-transactional data.
104 */
105 boolean isJournalSyncNonTransactional();
106
107 /**
108 * Returns the size (in bytes) of each journal files.
109 */
110 int getJournalFileSize();
111
112 /**
113 * Returns the number of journal files to pre-create.
114 */
115 int getJournalMinFiles();
116
117 /**
118 * Returns the maximum number of write requests that can be in the AIO queue at any given time.
119 */
120 int getJournalMaxIO();
121
122 /**
123 * Returns the size of the internal buffer on the journal.
124 */
125 int getJournalBufferSize();
126
127 /**
128 * Returns the timeout (in nanoseconds) used to flush internal buffers on the journal.
129 */
130 int getJournalBufferTimeout();
131
132 /**
133 * do any clients failover on a server shutdown
134 */
135 void setFailoverOnServerShutdown(boolean failoverOnServerShutdown) throws Exception;
136
137
138 /**
139 * returns if clients failover on a server shutdown
140 */
141 boolean isFailoverOnServerShutdown();
142
143 /**
144 * Returns the minimal number of journal files before compacting.
145 */
146 int getJournalCompactMinFiles();
147
148 /**
149 * Return the percentage of live data before compacting the journal.
150 */
151 int getJournalCompactPercentage();
152
153 /**
154 * Returns whether this server is using persistence and store data.
155 */
156 boolean isPersistenceEnabled();
157
158 /**
159 * Returns whether the bindings directory is created on this server startup.
160 */
161 boolean isCreateBindingsDir();
162
163 /**
164 * Returns whether the journal directory is created on this server startup.
165 */
166 boolean isCreateJournalDir();
167
168 /**
169 * Returns whether message counter is enabled for this server.
170 */
171 boolean isMessageCounterEnabled();
172
173 /**
174 * Returns the maximum number of days kept in memory for message counter.
175 */
176 int getMessageCounterMaxDayCount();
177
178 /**
179 * Sets the maximum number of days kept in memory for message counter.
180 *
181 * @param count value must be greater than 0
182 */
183 void setMessageCounterMaxDayCount(int count) throws Exception;
184
185 /**
186 * Returns the sample period (in milliseconds) to take message counter snapshot.
187 */
188 long getMessageCounterSamplePeriod();
189
190 /**
191 * Sets the sample period to take message counter snapshot.
192 *
193 * @param newPeriod value must be greater than 1000ms
194 */
195 void setMessageCounterSamplePeriod(long newPeriod) throws Exception;
196
197 /**
198 * Returns {@code true} if this server is a backup, {@code false} if it is a live server.
199 * <br>
200 * If a backup server has been activated, returns {@code false}.
201 */
202 boolean isBackup();
203
204 /**
205 * Returns whether this server shares its data store with a corresponding live or backup server.
206 */
207 boolean isSharedStore();
208
209 /**
210 * Returns the file system directory used to store paging files.
211 */
212 String getPagingDirectory();
213
214 /**
215 * Returns whether delivery count is persisted before messages are delivered to the consumers.
216 */
217 boolean isPersistDeliveryCountBeforeDelivery();
218
219 /**
220 * Returns the connection time to live.
221 * <br>
222 * This value overrides the connection time to live <em>sent by the client</em>.
223 */
224 long getConnectionTTLOverride();
225
226 /**
227 * Returns the management address of this server.
228 * <br>
229 * Clients can send management messages to this address to manage this server.
230 */
231 String getManagementAddress();
232
233 /**
234 * Returns the management notification address of this server.
235 * <br>
236 * Clients can bind queues to this address to receive management notifications emitted by this server.
237 */
238 String getManagementNotificationAddress();
239
240 /**
241 * Returns the size of the cache for pre-creating message IDs.
242 */
243 int getIDCacheSize();
244
245 /**
246 * Returns whether message ID cache is persisted.
247 */
248 boolean isPersistIDCache();
249
250 /**
251 * Returns the file system directory used to store large messages.
252 */
253 String getLargeMessagesDirectory();
254
255 /**
256 * Returns whether wildcard routing is supported by this server.
257 */
258 boolean isWildcardRoutingEnabled();
259
260 /**
261 * Returns the timeout (in milliseconds) after which transactions is removed
262 * from the resource manager after it was created.
263 */
264 long getTransactionTimeout();
265
266 /**
267 * Returns the frequency (in milliseconds) to scan transactions to detect which transactions
268 * have timed out.
269 */
270 long getTransactionTimeoutScanPeriod();
271
272 /**
273 * Returns the frequency (in milliseconds) to scan messages to detect which messages
274 * have expired.
275 */
276 long getMessageExpiryScanPeriod();
277
278 /**
279 * Returns the priority of the thread used to scan message expiration.
280 */
281 long getMessageExpiryThreadPriority();
282
283 /**
284 * Returns whether code coming from connection is executed asynchronously or not.
285 */
286 boolean isAsyncConnectionExecutionEnabled();
287
288 /**
289 * Returns the connectors configured for this server.
290 */
291 Object[] getConnectors() throws Exception;
292
293 /**
294 * Returns the connectors configured for this server using JSON serialization.
295 */
296 String getConnectorsAsJSON() throws Exception;
297
298 /**
299 * Returns the addresses created on this server.
300 */
301 String[] getAddressNames();
302
303 /**
304 * Returns the names of the queues created on this server.
305 */
306 String[] getQueueNames();
307
308 // Operations ----------------------------------------------------
309
310 /**
311 * Create a durable queue.
312 * <br>
313 * This method throws a {@link HornetQException#QUEUE_EXISTS}) exception if the queue already exits.
314 *
315 * @param address address to bind the queue to
316 * @param name name of the queue
317 */
318 @Operation(desc = "Create a queue with the specified address", impact = MBeanOperationInfo.ACTION)
319 void createQueue(@Parameter(name = "address", desc = "Address of the queue") String address,
320 @Parameter(name = "name", desc = "Name of the queue") String name) throws Exception;
321
322 /**
323 * Create a queue.
324 * <br>
325 * This method throws a {@link HornetQException#QUEUE_EXISTS}) exception if the queue already exits.
326 *
327 * @param address address to bind the queue to
328 * @param name name of the queue
329 * @param filter of the queue
330 * @param durable whether the queue is durable
331 */
332 @Operation(desc = "Create a queue", impact = MBeanOperationInfo.ACTION)
333 void createQueue(@Parameter(name = "address", desc = "Address of the queue") String address,
334 @Parameter(name = "name", desc = "Name of the queue") String name,
335 @Parameter(name = "filter", desc = "Filter of the queue") String filter,
336 @Parameter(name = "durable", desc = "Is the queue durable?") boolean durable) throws Exception;
337
338 /**
339 * Create a queue.
340 * <br>
341 * This method throws a {@link HornetQException#QUEUE_EXISTS}) exception if the queue already exits.
342 *
343 * @param address address to bind the queue to
344 * @param name name of the queue
345 * @param durable whether the queue is durable
346 */
347 @Operation(desc = "Create a queue with the specified address, name and durability", impact = MBeanOperationInfo.ACTION)
348 void createQueue(@Parameter(name = "address", desc = "Address of the queue") String address,
349 @Parameter(name = "name", desc = "Name of the queue") String name,
350 @Parameter(name = "durable", desc = "Is the queue durable?") boolean durable) throws Exception;
351
352 /**
353 * Deploy a durable queue.
354 * <br>
355 * This method will do nothing if the queue with the given name already exists on the server.
356 *
357 * @param address address to bind the queue to
358 * @param name name of the queue
359 * @param filter of the queue
360 */
361 @Operation(desc = "Deploy a queue", impact = MBeanOperationInfo.ACTION)
362 void deployQueue(@Parameter(name = "address", desc = "Address of the queue") String address,
363 @Parameter(name = "name", desc = "Name of the queue") String name,
364 @Parameter(name = "filter", desc = "Filter of the queue")String filter) throws Exception;
365
366 /**
367 * Deploy a queue.
368 * <br>
369 * This method will do nothing if the queue with the given name already exists on the server.
370 *
371 * @param address address to bind the queue to
372 * @param name name of the queue
373 * @param filter of the queue
374 * @param durable whether the queue is durable
375 */
376 @Operation(desc = "Deploy a queue", impact = MBeanOperationInfo.ACTION)
377 void deployQueue(@Parameter(name = "address", desc = "Address of the queue") String address,
378 @Parameter(name = "name", desc = "Name of the queue") String name,
379 @Parameter(name = "filter", desc = "Filter of the queue") String filter,
380 @Parameter(name = "durable", desc = "Is the queue durable?") boolean durable) throws Exception;
381
382 /**
383 * Destroys the queue corresponding to the specified name.
384 */
385 @Operation(desc = "Destroy a queue", impact = MBeanOperationInfo.ACTION)
386 void destroyQueue(@Parameter(name = "name", desc = "Name of the queue to destroy") String name) throws Exception;
387
388 /**
389 * Enables message counters for this server.
390 */
391 @Operation(desc = "Enable message counters", impact = MBeanOperationInfo.ACTION)
392 void enableMessageCounters() throws Exception;
393
394 /**
395 * Disables message counters for this server.
396 */
397 @Operation(desc = "Disable message counters", impact = MBeanOperationInfo.ACTION)
398 void disableMessageCounters() throws Exception;
399
400 /**
401 * Reset all message counters.
402 */
403 @Operation(desc = "Reset all message counters", impact = MBeanOperationInfo.ACTION)
404 void resetAllMessageCounters() throws Exception;
405
406 /**
407 * Reset histories for all message counters.
408 */
409 @Operation(desc = "Reset all message counters history", impact = MBeanOperationInfo.ACTION)
410 void resetAllMessageCounterHistories() throws Exception;
411
412 /**
413 * List all the prepared transaction, sorted by date, oldest first.
414 * <br>
415 * The Strings are Base-64 representation of the transaction XID and can be
416 * used to heuristically commit or rollback the transactions.
417 *
418 * @see #commitPreparedTransaction(String)
419 * @see #rollbackPreparedTransaction(String)
420 */
421 @Operation(desc = "List all the prepared transaction, sorted by date, oldest first")
422 String[] listPreparedTransactions() throws Exception;
423
424 /**
425 * List all the prepared transaction, sorted by date,
426 * oldest first, with details, in text format.
427 */
428 @Operation(desc = "List all the prepared transaction, sorted by date, oldest first, with details, in JSON format")
429 String listPreparedTransactionDetailsAsJSON() throws Exception;
430
431 /**
432 * List all the prepared transaction, sorted by date,
433 * oldest first, with details, in HTML format
434 */
435 @Operation(desc = "List all the prepared transaction, sorted by date, oldest first, with details, in HTML format")
436 String listPreparedTransactionDetailsAsHTML() throws Exception;
437
438 /**
439 * List transactions which have been heuristically committed.
440 */
441 String[] listHeuristicCommittedTransactions() throws Exception;
442
443 /**
444 * List transactions which have been heuristically rolled back.
445 */
446 String[] listHeuristicRolledBackTransactions() throws Exception;
447
448 /**
449 * Heuristically commits a prepared transaction.
450 *
451 * @param transactionAsBase64 base 64 representation of a prepare transaction
452 * @return {@code true} if the transaction was successfully committed, {@code false} else
453 *
454 * @see #listPreparedTransactions()
455 */
456 @Operation(desc = "Commit a prepared transaction")
457 boolean commitPreparedTransaction(@Parameter(desc = "the Base64 representation of a transaction", name = "transactionAsBase64") String transactionAsBase64) throws Exception;
458
459 /**
460 * Heuristically rolls back a prepared transaction.
461 *
462 * @param transactionAsBase64 base 64 representation of a prepare transaction
463 * @return {@code true} if the transaction was successfully rolled back, {@code false} else
464 *
465 * @see #listPreparedTransactions()
466 */
467 @Operation(desc = "Rollback a prepared transaction")
468 boolean rollbackPreparedTransaction(@Parameter(desc = "the Base64 representation of a transaction", name = "transactionAsBase64") String transactionAsBase64) throws Exception;
469
470 /**
471 * Lists the addresses of all the clients connected to this address.
472 */
473 @Operation(desc = "List the client addresses", impact = MBeanOperationInfo.INFO)
474 String[] listRemoteAddresses() throws Exception;
475
476 /**
477 * Lists the addresses of the clients connected to this address which matches the specified IP address.
478 */
479 @Operation(desc = "List the client addresses which match the given IP Address", impact = MBeanOperationInfo.INFO)
480 String[] listRemoteAddresses(@Parameter(desc = "an IP address", name = "ipAddress") String ipAddress) throws Exception;
481
482 /**
483 * Closes all the connections of clients connected to this server which matches the specified IP address.
484 */
485 @Operation(desc = "Closes all the connections for the given IP Address", impact = MBeanOperationInfo.INFO)
486 boolean closeConnectionsForAddress(@Parameter(desc = "an IP address", name = "ipAddress") String ipAddress) throws Exception;
487
488 /**
489 * Lists all the IDs of the connections connected to this server.
490 */
491 @Operation(desc = "List all the connection IDs", impact = MBeanOperationInfo.INFO)
492 String[] listConnectionIDs() throws Exception;
493
494 String listProducersInfoAsJSON() throws Exception;
495
496 /**
497 * Lists all the sessions IDs for the specified connection ID.
498 */
499 @Operation(desc = "List the sessions for the given connectionID", impact = MBeanOperationInfo.INFO)
500 String[] listSessions(@Parameter(desc = "a connection ID", name = "connectionID") String connectionID) throws Exception;
501
502 /**
503 * This method is used by HornetQ clustering and must not be called by HornetQ clients.
504 */
505 void sendQueueInfoToQueue(String queueName, String address) throws Exception;
506
507 @Operation(desc= "Add security settings for addresses matching the addressMatch", impact = MBeanOperationInfo.ACTION)
508 void addSecuritySettings(
509 @Parameter(desc="an address match", name="addressMatch") String addressMatch,
510 @Parameter(desc="a comma-separated list of roles allowed to send messages", name="send") String sendRoles,
511 @Parameter(desc="a comma-separated list of roles allowed to consume messages", name="consume") String consumeRoles,
512 @Parameter(desc="a comma-separated list of roles allowed to create durable queues", name="createDurableQueueRoles") String createDurableQueueRoles,
513 @Parameter(desc="a comma-separated list of roles allowed to delete durable queues", name="deleteDurableQueueRoles") String deleteDurableQueueRoles,
514 @Parameter(desc="a comma-separated list of roles allowed to create non durable queues", name="createNonDurableQueueRoles") String createNonDurableQueueRoles,
515 @Parameter(desc="a comma-separated list of roles allowed to delete non durable queues", name="deleteNonDurableQueueRoles") String deleteNonDurableQueueRoles,
516 @Parameter(desc="a comma-separated list of roles allowed to send management messages messages", name="manage") String manageRoles) throws Exception;
517
518 @Operation(desc = "Remove security settings for an address", impact = MBeanOperationInfo.ACTION)
519 void removeSecuritySettings(@Parameter(desc = "an address match", name = "addressMatch") String addressMatch) throws Exception;
520
521 @Operation(desc = "get roles for a specific address match", impact = MBeanOperationInfo.INFO)
522 Object[] getRoles(@Parameter(desc = "an address match", name = "addressMatch") String addressMatch) throws Exception;
523
524 @Operation(desc = "get roles (as a JSON string) for a specific address match", impact = MBeanOperationInfo.INFO)
525 String getRolesAsJSON(@Parameter(desc = "an address match", name = "addressMatch") String addressMatch) throws Exception;
526
527 /**
528 * adds a new address setting for a specific address
529 */
530 @Operation(desc= "Add address settings for addresses matching the addressMatch", impact = MBeanOperationInfo.ACTION)
531 void addAddressSettings(@Parameter(desc="an address match", name="addressMatch") String addressMatch,
532 @Parameter(desc="the dead letter address setting", name="DLA") String DLA,
533 @Parameter(desc="the expiry address setting", name="expiryAddress") String expiryAddress,
534 @Parameter(desc="are any queues created for this address a last value queue", name="lastValueQueue") boolean lastValueQueue,
535 @Parameter(desc="the delivery attempts", name="deliveryAttempts") int deliveryAttempts,
536 @Parameter(desc="the max size in bytes", name="maxSizeBytes") long maxSizeBytes,
537 @Parameter(desc="the page size in bytes", name="pageSizeBytes") int pageSizeBytes,
538 @Parameter(desc="the max number of pages in the soft memory cache", name="pageMaxCacheSize") int pageMaxCacheSize,
539 @Parameter(desc="the redelivery delay", name="redeliveryDelay") long redeliveryDelay,
540 @Parameter(desc="the redistribution delay", name="redistributionDelay") long redistributionDelay,
541 @Parameter(desc="do we send to the DLA when there is no where to route the message", name="sendToDLAOnNoRoute") boolean sendToDLAOnNoRoute,
542 @Parameter(desc="the ploicy to use when the address is full", name="addressFullMessagePolicy") String addressFullMessagePolicy) throws Exception;
543
544 void removeAddressSettings(String addressMatch) throws Exception;
545
546 /**
547 * returns the address settings as a JSON string
548 */
549 @Operation(desc = "returns the address settings as a JSON string for an address match", impact = MBeanOperationInfo.INFO)
550 String getAddressSettingsAsJSON(@Parameter(desc="an address match", name="addressMatch") String addressMatch) throws Exception;
551
552 String[] getDivertNames();
553
554 @Operation(desc= "Create a Divert", impact = MBeanOperationInfo.ACTION)
555 void createDivert(@Parameter(name="name", desc="Name of the divert") String name,
556 @Parameter(name="routingName", desc="Routing name of the divert") String routingName,
557 @Parameter(name="address", desc="Address to divert from") String address,
558 @Parameter(name="forwardingAddress", desc="Adress to divert to") String forwardingAddress,
559 @Parameter(name="exclusive", desc="Is the divert exclusive?") boolean exclusive,
560 @Parameter(name="filterString", desc="Filter of the divert") String filterString,
561 @Parameter(name="transformerClassName", desc="Class name of the divert's transformer") String transformerClassName) throws Exception;
562
563 @Operation(desc= "Destroy a Divert", impact = MBeanOperationInfo.ACTION)
564 void destroyDivert(@Parameter(name="name", desc="Name of the divert") String name) throws Exception;
565
566 String[] getBridgeNames();
567
568 @Operation(desc= "Create a Bridge", impact = MBeanOperationInfo.ACTION)
569 void createBridge(@Parameter(name="name", desc="Name of the bridge") String name,
570 @Parameter(name="queueName", desc="Name of the source queue") String queueName,
571 @Parameter(name="forwardingAddress", desc="Forwarding address") String forwardingAddress,
572 @Parameter(name="filterString", desc="Filter of the brdige") String filterString,
573 @Parameter(name="transformerClassName", desc="Class name of the bridge transformer") String transformerClassName,
574 @Parameter(name="retryInterval", desc="Connection retry interval") long retryInterval,
575 @Parameter(name="retryIntervalMultiplier", desc="Connection retry interval multiplier") double retryIntervalMultiplier,
576 @Parameter(name="reconnectAttempts", desc="Number of reconnection attempts") int reconnectAttempts,
577 @Parameter(name="useDuplicateDetection", desc="Use duplicate detection") boolean useDuplicateDetection,
578 @Parameter(name="confirmationWindowSize", desc="Confirmation window size") int confirmationWindowSize,
579 @Parameter(name="clientFailureCheckPeriod", desc="Period to check client failure") long clientFailureCheckPeriod,
580 @Parameter(name="staticConnectorNames", desc="comma separated list of connector names or name of discovery group if 'useDiscoveryGroup' is set to true") String connectorNames,
581 @Parameter(name="useDiscoveryGroup", desc="use discovery group")boolean useDiscoveryGroup,
582 @Parameter(name="ha", desc="Is it using HA") boolean ha,
583 @Parameter(name="user", desc="User name") String user,
584 @Parameter(name="password", desc="User password") String password) throws Exception;
585
586
587 @Operation(desc= "Destroy a bridge", impact = MBeanOperationInfo.ACTION)
588 void destroyBridge(@Parameter(name="name", desc="Name of the bridge") String name) throws Exception;
589
590 @Operation(desc = "force the server to stop and notify clients to failover", impact = MBeanOperationInfo.UNKNOWN)
591 void forceFailover() throws Exception;
592 }