    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    }