View Javadoc
1 /*** 2 * Redistribution and use of this software and associated documentation 3 * ("Software"), with or without modification, are permitted provided 4 * that the following conditions are met: 5 * 6 * 1. Redistributions of source code must retain copyright 7 * statements and notices. Redistributions must also contain a 8 * copy of this document. 9 * 10 * 2. Redistributions in binary form must reproduce the 11 * above copyright notice, this list of conditions and the 12 * following disclaimer in the documentation and/or other 13 * materials provided with the distribution. 14 * 15 * 3. The name "Exolab" must not be used to endorse or promote 16 * products derived from this Software without prior written 17 * permission of Exoffice Technologies. For written permission, 18 * please contact info@exolab.org. 19 * 20 * 4. Products derived from this Software may not be called "Exolab" 21 * nor may "Exolab" appear in their names without prior written 22 * permission of Exoffice Technologies. Exolab is a registered 23 * trademark of Exoffice Technologies. 24 * 25 * 5. Due credit should be given to the Exolab Project 26 * (http://www.exolab.org/). 27 * 28 * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS 29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT 30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 32 * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 39 * OF THE POSSIBILITY OF SUCH DAMAGE. 40 * 41 * Copyright 2000-2003 (C) Exoffice Technologies Inc. All Rights Reserved. 42 * 43 * $Id: IpcJmsAdminConnection.java,v 1.10 2003/08/17 01:32:26 tanderson Exp $ 44 * 45 * Date Author Changes 46 * $Date jimm Created 47 */ 48 49 package org.exolab.jms.server.mipc; 50 51 import java.io.Serializable; 52 import java.util.Vector; 53 54 import javax.jms.JMSException; 55 import javax.jms.JMSSecurityException; 56 57 import org.exolab.core.ipc.NotifierIfc; 58 import org.exolab.jms.server.AdminConnection; 59 import org.exolab.jms.server.AdminConnectionManager; 60 61 62 /*** 63 * This is the server side receiver for admin requests. 64 * 65 * @version $Revision: 1.10 $ $Date: 2003/08/17 01:32:26 $ 66 * @author <a href="mailto:mourikis@exolab.org">Jim Mourikis</a> 67 * @see org.exolab.jms.administration.mipc.IpcJmsAdminConnection 68 */ 69 public class IpcJmsAdminConnection implements NotifierIfc { 70 71 /*** 72 * Default constructor. 73 * 74 */ 75 public IpcJmsAdminConnection() { 76 } 77 78 79 /*** 80 * A new request has been received. 81 * Carry out the request, and pass back any relevent data. 82 * 83 * @param ob The data received, 84 * @param id The id of the calling connection, not used by the client. 85 * @return Object Return any requested result. This must never be null. 86 * 87 */ 88 public Serializable notify(Object ob, String id) { 89 Vector v = (Vector) ob; 90 String func = (String) v.get(1); 91 Serializable result = null; 92 String identifierId = (String) v.get(2); 93 94 if (func.equals("createConnection")) { 95 result = createConnection(id, (String) v.get(3), (String) v.get(4)); 96 } else if (func.equals("addDurableConsumer")) { 97 result = addDurableConsumer((String) v.get(3), (String) v.get(4), 98 (String) v.get(2)); 99 } else if (func.equals("removeDurableConsumer")) { 100 result = removeDurableConsumer((String) v.get(3), 101 (String) v.get(2)); 102 } else if (func.equals("durableConsumerExists")) { 103 result = durableConsumerExists((String) v.get(3), 104 (String) v.get(2)); 105 } else if (func.equals("getDurableConsumers")) { 106 result = getDurableConsumers((String) v.get(3), (String) v.get(2)); 107 } else if (func.equals("unregisterConsumer")) { 108 result = unregisterConsumer((String) v.get(3), (String) v.get(2)); 109 } else if (func.equals("isConnected")) { 110 result = isConnected((String) v.get(3), (String) v.get(2)); 111 } else if (func.equals("getAllDestinations")) { 112 result = getAllDestinations((String) v.get(2)); 113 } else if (func.equals("addDestination")) { 114 result = addDestination((String) v.get(3), (Boolean) v.get(4), 115 (String) v.get(2)); 116 } else if (func.equals("removeDestination")) { 117 result = removeDestination((String) v.get(3), (String) v.get(2)); 118 } else if (func.equals("destinationExists")) { 119 result = destinationExists((String) v.get(3), (String) v.get(2)); 120 } else if (func.equals("getDurableConsumerMessageCount")) { 121 result = getDurableConsumerMessageCount((String) v.get(3), 122 (String) v.get(4), (String) v.get(2)); 123 } else if (func.equals("getQueueMessageCount")) { 124 result = getQueueMessageCount((String) v.get(3), (String) v.get(2)); 125 } else if (func.equals("stopServer")) { 126 result = stopServer((String) v.get(2)); 127 } else if (func.equals("addUser")) { 128 result = addUser((String) v.get(3), (String) v.get(4), 129 (String) v.get(2)); 130 } else if (func.equals("changePassword")) { 131 result = changePassword((String) v.get(3), (String) v.get(4), 132 (String) v.get(2)); 133 } else if (func.equals("removeUser")) { 134 result = removeUser((String) v.get(3), (String) v.get(2)); 135 } else if (func.equals("getAllUsers")) { 136 result = getAllUsers((String) v.get(2)); 137 } else if (func.equals("purgeMessages")) { 138 result = purgeMessages((String) v.get(2)); 139 } else { 140 String st = ("Unknown request received: " + func); 141 System.err.println(st); 142 result = pack(new Boolean(false), st); 143 } 144 145 return result; 146 } 147 148 /*** 149 * The connection has been broken. 150 * 151 * @param id the unique identifier of this connection. 152 * 153 */ 154 public void disconnection(String id) { 155 } 156 157 /*** 158 * A new connection request has been made. 159 * 160 * @param ipcId The unique IPC id of this connection. 161 * @param username the client's username 162 * @param password the client's password 163 * @return Vector The result of the request. 164 */ 165 private Vector createConnection(String ipcId, 166 String username, 167 String password) { 168 Vector result; 169 170 try { 171 AdminConnection connection = 172 AdminConnectionManager.instance().createConnection( 173 ipcId, username, password); 174 result = pack(Boolean.TRUE, connection.getIdentifierId()); 175 } catch (JMSException exception) { 176 result = pack(Boolean.FALSE, exception); 177 } 178 179 return result; 180 } 181 182 /*** 183 * Add a durable consumer to for a topic 184 * 185 * @param topic the name of the topic destination 186 * @param name consumer name 187 * @param identifierId the unique identifier for this connection 188 * @return Vector The result of the operation 189 */ 190 private Vector addDurableConsumer(String topic, String name, 191 String identifierId) { 192 boolean result; 193 194 try { 195 result = 196 getAdminConnection(identifierId).addDurableConsumer(topic, name); 197 return pack(Boolean.TRUE, new Boolean(result)); 198 } catch (JMSException exception) { 199 return pack(Boolean.FALSE, exception); 200 } 201 } 202 203 /*** 204 * Remove the specified durable consumer 205 * 206 * @param name - the consumer name 207 * @param identifierId the unique identifier for this connection 208 * @return Vector - the result of the operation 209 */ 210 private Vector removeDurableConsumer(String name, String identifierId) { 211 boolean result; 212 213 try { 214 result = 215 getAdminConnection(identifierId).removeDurableConsumer(name); 216 return pack(Boolean.TRUE, new Boolean(result)); 217 } catch (JMSException exception) { 218 return pack(Boolean.FALSE, exception); 219 } 220 } 221 222 /*** 223 * Determine whether the specified durable consumer exists 224 * 225 * @param name - the consumer name 226 * @param identifierId the unique identifier for this connection 227 * @return Vector - the result of the operation 228 */ 229 private Vector durableConsumerExists(String name, String identifierId) { 230 boolean result; 231 232 try { 233 result = 234 getAdminConnection(identifierId).durableConsumerExists(name); 235 return pack(Boolean.TRUE, new Boolean(result)); 236 } catch (JMSException exception) { 237 return pack(Boolean.FALSE, exception); 238 } 239 } 240 241 /*** 242 * Return a list of durable consumers for the specified topic 243 * 244 * @param topic - the queue/topic name 245 * @param identifierId the unique identifier for this connection 246 * @return Vector - the result of the operation 247 * 248 */ 249 private Vector getDurableConsumers(String topic, String identifierId) { 250 Vector consumers; 251 252 try { 253 consumers = 254 getAdminConnection(identifierId).getDurableConsumers(topic); 255 return pack(Boolean.TRUE, consumers); 256 } catch (JMSException exception) { 257 return pack(Boolean.FALSE, exception); 258 } 259 } 260 261 /*** 262 * Deactivate the specified durable consumer 263 * 264 * @param name - the name of the durable consumer 265 * @param identifierId the unique identifier for this connection 266 * @return Vector - the result of the operation 267 */ 268 private Vector unregisterConsumer(String name, String identifierId) { 269 boolean result; 270 271 try { 272 result = getAdminConnection(identifierId).unregisterConsumer(name); 273 return pack(Boolean.TRUE, new Boolean(result)); 274 } catch (JMSException exception) { 275 return pack(Boolean.FALSE, exception); 276 } 277 } 278 279 /*** 280 * Check to see if the given consumer is currently connected to the 281 * OpenJMSServer. This is only valid when in online mode. 282 * 283 * @param name - the unique consumer identifier. 284 * @param identifierId the unique identifier for this connection 285 * @return Vector - the result of the operation 286 */ 287 private Vector isConnected(String name, String identifierId) { 288 boolean result; 289 290 try { 291 result = getAdminConnection(identifierId).isConnected(name); 292 return pack(Boolean.TRUE, new Boolean(result)); 293 } catch (JMSException exception) { 294 return pack(Boolean.FALSE, exception); 295 } 296 } 297 298 /*** 299 * Add a new destination 300 * 301 * @param destination - the queue/topic name 302 * @param queue - true if this is a queue, false is a topic 303 * @param identifierId the unique identifier for this connection 304 * @return Vector - the result of the operation 305 */ 306 private Vector addDestination(String destination, Boolean queue, 307 String identifierId) { 308 boolean result; 309 310 try { 311 result = 312 getAdminConnection(identifierId).addDestination(destination, queue); 313 return pack(Boolean.TRUE, new Boolean(result)); 314 } catch (JMSException exception) { 315 return pack(Boolean.FALSE, exception); 316 } 317 } 318 319 /*** 320 * Destroy all references to a queue/topic. Remove all messages and 321 * Consumer registrations. 322 * 323 * @param destination - the queue/topic name 324 * @param identifierId the unique identifier for this connection 325 * @return Vector - result of the operation 326 */ 327 private Vector removeDestination(String destination, String identifierId) { 328 boolean result; 329 330 try { 331 result = 332 getAdminConnection(identifierId).removeDestination(destination); 333 return pack(Boolean.TRUE, new Boolean(result)); 334 } catch (JMSException exception) { 335 return pack(Boolean.FALSE, exception); 336 } 337 } 338 339 /*** 340 * Check if the specified destination exists. 341 * 342 * @param name - the destination name to check 343 * @param identifierId the unique identifier for this connection 344 * @return Vector - result of the operation 345 */ 346 private Vector destinationExists(String name, String identifierId) { 347 boolean result; 348 349 try { 350 result = getAdminConnection(identifierId).destinationExists(name); 351 return pack(Boolean.TRUE, new Boolean(result)); 352 } catch (JMSException exception) { 353 return pack(Boolean.FALSE, exception); 354 } 355 } 356 357 /*** 358 * Get a list of all the destinations 359 * 360 * @param identifierId the unique identifier for this connection 361 * @return Vector The result of the operation 362 */ 363 private Vector getAllDestinations(String identifierId) { 364 Vector result; 365 366 try { 367 result = getAdminConnection(identifierId).getAllDestinations(); 368 return pack(Boolean.TRUE, result); 369 } catch (JMSException exception) { 370 return pack(Boolean.FALSE, exception); 371 } 372 } 373 374 /*** 375 * Return the number of messages for a specific durable consumer 376 * 377 * @param topic topic name 378 * @param name consumer name 379 * @param identifierId the unique identifier for this connection 380 * @return Vector The result of the operation 381 */ 382 private Vector getDurableConsumerMessageCount(String topic, String name, 383 String identifierId) { 384 int result; 385 386 try { 387 result = getAdminConnection(identifierId). 388 getDurableConsumerMessageCount(topic, name); 389 return pack(Boolean.TRUE, new Integer(result)); 390 } catch (JMSException exception) { 391 return pack(Boolean.FALSE, exception); 392 } 393 } 394 395 /*** 396 * Return the number of messages in the given queue 397 * 398 * @param queue queue name 399 * @param identifierId the unique identifier for this connection 400 * @return Vector The result of the operation 401 */ 402 private Vector getQueueMessageCount(String queue, String identifierId) { 403 int result; 404 405 try { 406 result = 407 getAdminConnection(identifierId).getQueueMessageCount(queue); 408 return pack(Boolean.TRUE, new Integer(result)); 409 } catch (JMSException exception) { 410 return pack(Boolean.FALSE, exception); 411 } 412 } 413 414 /*** 415 * Remove all processed messages from the database. 416 * 417 * @param identifierId the unique identifier for this connection 418 * @return Vector The result of the operation 419 */ 420 private Vector purgeMessages(String identifierId) { 421 int result; 422 423 try { 424 result = getAdminConnection(identifierId).purgeMessages(); 425 return pack(Boolean.TRUE, new Integer(result)); 426 } catch (JMSException exception) { 427 return pack(Boolean.FALSE, exception); 428 } 429 } 430 431 /*** 432 * Send a stop request to the OpenJMSServer. 433 * 434 * @param identifierId the unique identifier for this connection 435 * @return Vector The result of the operation 436 */ 437 private Vector stopServer(String identifierId) { 438 try { 439 getAdminConnection(identifierId).stopServer(); 440 return pack(Boolean.TRUE, Boolean.TRUE); 441 } catch (JMSException exception) { 442 return pack(Boolean.FALSE, exception); 443 } 444 } 445 446 /*** 447 * Add a user with the specified name 448 * 449 * @param username the users name 450 * @param password the users password 451 * @param identifierId the unique identifier for this connection 452 * @return Vector The result of the operation 453 */ 454 private Vector addUser(String username, String password, 455 String identifierId) { 456 boolean result; 457 458 try { 459 result = 460 getAdminConnection(identifierId).addUser(username, password); 461 return pack(Boolean.TRUE, new Boolean(result)); 462 } catch (JMSException exception) { 463 return pack(Boolean.FALSE, exception); 464 } 465 } 466 467 /*** 468 * Change password for the specified user 469 * 470 * @param username the users name 471 * @param password the users password 472 * @param identifierId the unique identifier for this connection 473 * @return Vector The result of the operation 474 */ 475 private Vector changePassword(String username, String password, 476 String identifierId) { 477 boolean result; 478 479 try { 480 result = 481 getAdminConnection(identifierId).changePassword(username, password); 482 return pack(Boolean.TRUE, new Boolean(result)); 483 } catch (JMSException exception) { 484 return pack(Boolean.FALSE, exception); 485 } 486 } 487 488 /*** 489 * Remove the specified user 490 * 491 * @param username the users name 492 * @param identifierId the unique identifier for this connection 493 * @return Vector the result of the operation 494 */ 495 private Vector removeUser(String username, String identifierId) { 496 boolean result; 497 498 try { 499 result = getAdminConnection(identifierId).removeUser(username); 500 return pack(Boolean.TRUE, new Boolean(result)); 501 } catch (JMSException exception) { 502 return pack(Boolean.FALSE, exception); 503 } 504 } 505 506 /*** 507 * Return a list of all registered users. 508 * 509 * @param identifierId the unique identifier for this connection 510 * @return Vector The result of the operation 511 */ 512 private Vector getAllUsers(String identifierId) { 513 Vector result; 514 515 try { 516 result = getAdminConnection(identifierId).getAllUsers(); 517 return pack(Boolean.TRUE, result); 518 } catch (JMSException exception) { 519 return pack(Boolean.FALSE, exception); 520 } 521 } 522 523 /*** 524 * Pack all the data that is required by the server in a vector. 525 * Set the size of the vector to be exactly the right size for efficiency. 526 * 527 * @param success Boolean indicating success or failure of request. 528 * @param ob The Object being returned. 529 * @return Vector The vector containing all the data. 530 * 531 */ 532 private Vector pack(Boolean success, Object ob) { 533 Vector v = new Vector(2); 534 v.add(success); 535 v.add(ob); 536 return v; 537 } 538 539 /*** 540 * Get the AdminConnection for this connection. 541 * 542 * @param identifierId the unique id for this connection 543 * @return AdminConnection the connection 544 * @throws JMSSecurityException if the connection not exist 545 */ 546 private AdminConnection getAdminConnection(String identifierId) 547 throws JMSSecurityException { 548 549 AdminConnection connection = 550 AdminConnectionManager.instance().getConnection(identifierId); 551 552 if (connection == null) { 553 throw new JMSSecurityException("Not authorized for this operation"); 554 } 555 556 return connection; 557 } 558 }

This page was automatically generated by Maven