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 '&comma;' 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 '&comma;' 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 '&comma;' 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 '&comma;' 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&lt;String, Object&gt; 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 '&comma;' 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 '&comma;' 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 '&comma;' 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    }