} else if (cmd.equals("list")) {
debugHash = new Hashtable();
if (cmdarg.equals("dst")) {
Iterator itr = Destination.getAllDestinations();
while (itr.hasNext()) {
Destination d = (Destination)itr.next();
debugHash.put(d.getDestinationUID().toString(),
DestType.toString(d.getType()) + ":" +
(d.isStored() ? "stored" : "not stored"));
}
} else if (cmdarg.equals("con")) {
debugHash = new Hashtable();
if (target == null) { // all
Iterator itr = Consumer.getAllConsumers();
if (!itr.hasNext()) {
status = Status.ERROR;
msg = "No consumers on the broker";
}
while (itr.hasNext()) {
Consumer c = (Consumer)itr.next();
if ( c == null) continue;
IMQConnection cxn = (IMQConnection)
Globals.getConnectionManager()
.getConnection(c.getConnectionUID());
ConsumerUID cuid = c.getConsumerUID();
ConnectionUID cxuid = c.getConnectionUID();
debugHash.put(String.valueOf(
(cuid == null ? 0 : cuid.longValue())),
(cxn == null ? "none" : cxn.getRemoteConnectionString())
+ " ["
+ String.valueOf( (cxuid == null ? 0 :
cxuid.longValue())) + "]");
}
} else if (targetType == null) {
msg = "Please supply targetType if you are supplying a target ";
status = Status.ERROR;
} else if (targetType.equals("t") || targetType.equals("q")) {
try {
boolean isQueue = false;
if (targetType.equals("q")) {
isQueue = true;
}
DestinationUID uid = null;
Destination d = null;
if (status != Status.ERROR) {
uid = DestinationUID.getUID(target,isQueue);
d = Destination.getDestination(uid);
}
if (status != Status.ERROR && d == null) {
status = Status.ERROR;
msg = "Error listing consumers on destination " + target +
" unknown destination";
} else if (status != Status.ERROR) {
Iterator itr = d.getConsumers();
if (!itr.hasNext()) {
status = Status.ERROR;
msg = "No consumers on destination " + target ;
}
while (itr.hasNext()) {
Consumer c = (Consumer)itr.next();
IMQConnection cxn = (IMQConnection)
Globals.getConnectionManager()
.getConnection(c.getConnectionUID());
debugHash.put(String.valueOf(
c.getConsumerUID().longValue()),
(cxn == null ? "" : cxn.getRemoteConnectionString()) + " ["
+ String.valueOf((c.getConnectionUID() == null ?
"none":c.getConnectionUID().longValue())) + "]");
}
}
} catch (Exception ex) {
status = Status.ERROR;
msg = "Error listing consumers on connection " + target +
" because " + ex.toString();
logger.logStack(Logger.INFO,msg, ex);
}
} else if (targetType.equals("ses")) {
try {
SessionUID uid = new SessionUID(
Long.parseLong(target));
Session ses = Session.getSession(uid);
if (ses == null) {
status = Status.ERROR;
msg = "Error listing consumers on session "
+ target + " unknown sessionUID";
} else {
Iterator itr = ses.getConsumers();
if (!itr.hasNext()) {
status = Status.ERROR;
msg = "No consumers on session " + target ;
}
while (ses != null && itr.hasNext()) {
Consumer c = (Consumer)itr.next();
if (uid.equals(c.getConnectionUID())) {
debugHash.put(String.valueOf(
c.getConsumerUID().longValue()),
c.getDestinationUID().toString());
}
}
}
} catch (Exception ex) {
status = Status.ERROR;
msg = "Error listing consumers on connection " + target +
" because " + ex.toString();
logger.logStack(Logger.INFO,msg, ex);
}
} else if (targetType.equals("cxn")) {
try {
ConnectionUID uid = new ConnectionUID(
Long.parseLong(target));
IMQConnection cxn = (IMQConnection)
Globals.getConnectionManager()
.getConnection(uid);
if (cxn == null) {
status = Status.ERROR;
msg = "Error listing consumers on connection " + target +
" unknown connectionUID";
} else {
Iterator itr = Consumer.getAllConsumers();
while (cxn != null && itr.hasNext()) {
Consumer c = (Consumer)itr.next();
if (uid.equals(c.getConnectionUID())) {
debugHash.put(String.valueOf(
c.getConsumerUID().longValue()),
c.getDestinationUID().toString());
}
}
}
} catch (Exception ex) {
status = Status.ERROR;
msg = "Error listing consumers on connection " + target +
" because " + ex.toString();
logger.logStack(Logger.INFO,msg, ex);
}
} else {
status = Status.ERROR;
msg = "Unknown targetType (-t) " + target
+ "\n Valid formats are of the form: "
+ "[q|t|ses|cxn]";
}
} else if (cmdarg.equals("prd")) {
debugHash = new Hashtable();
if (target == null) { // all
Iterator itr = Producer.getAllProducers();
while (itr.hasNext()) {
Producer c = (Producer)itr.next();
IMQConnection cxn = (IMQConnection)
Globals.getConnectionManager()
.getConnection(c.getConnectionUID());
debugHash.put(String.valueOf(
c.getProducerUID().longValue()),
cxn.getRemoteConnectionString() + " ["
+ String.valueOf(c.getConnectionUID()
.longValue()) + "]");
}
} else if (targetType == null) {
msg = "Please supply targetType if you are supplying a target ";
status = Status.ERROR;
} else if (targetType.equals("t") || targetType.equals("q")) {
// destination
boolean isQueue = false;
if (targetType.equals("q")) {
isQueue = true;
}
try {
DestinationUID uid = DestinationUID.getUID(target, isQueue);
Destination d = Destination.getDestination(uid);
if (d == null) {
status = Status.ERROR;
msg = "Error listing producers on destination " + target +
" unknown destination";
} else {
Iterator itr = d.getProducers();
while (itr.hasNext()) {
Producer c = (Producer)itr.next();
IMQConnection cxn = (IMQConnection)
Globals.getConnectionManager()
.getConnection(c.getConnectionUID());
debugHash.put(String.valueOf(
c.getProducerUID().longValue()),
cxn.getRemoteConnectionString() + " ["
+ String.valueOf(c.getConnectionUID()
.longValue()) + "]");
}
}
} catch (Exception ex) {
status = Status.ERROR;
msg = "Error listing producers on connection " + target +
" because " + ex.toString();
logger.logStack(Logger.INFO,msg, ex);
}
} else if (targetType.equals("cxn")) {
try {
ConnectionUID uid = new ConnectionUID(
Long.parseLong(target));
IMQConnection cxn = (IMQConnection)
Globals.getConnectionManager()
.getConnection(uid);
if (cxn == null) {
status = Status.ERROR;
msg = "Error listing producers on connection " + target +
" unknown connectionUID";
} else {
Iterator itr = Producer.getAllProducers();
while (cxn != null && itr.hasNext()) {
Producer c = (Producer)itr.next();
if (uid.equals(c.getConnectionUID())) {
debugHash.put(String.valueOf(
c.getProducerUID().longValue()),
c.getDestinationUID().toString());
}
}
}
} catch (Exception ex) {
status = Status.ERROR;
msg = "Error listing producers on connection " + target +
" because " + ex.toString();
logger.logStack(Logger.INFO,msg, ex);
}
} else {
status = Status.ERROR;
msg = "Unknown targetType (-t) " + targetType
+ "\n Valid formats are of the form: "
+ "[t|q|cxn]";
}
} else {
status = Status.ERROR;
msg = "Unknown argument " + cmdarg;
}
} else if (cmd.equals("debug")) {
String debugStr = (String) p.get("enable");
if (debugStr != null && !debugStr.equalsIgnoreCase("true")
&& !debugStr.equalsIgnoreCase("false")) {
status = Status.ERROR;
msg = "bad enable flag setting " +
debugStr + " defauling to false";
}
boolean debugOn=(debugStr == null) ? true :
Boolean.valueOf(debugStr).booleanValue();
if (cmdarg.equals("reset")) {
if (targetType == null) {
msg = "Please supply targetType (-t)\n Valid formats are of the form: [metrics|jdbcconnpool]";
status = Status.ERROR;
} else if (targetType.equalsIgnoreCase("jdbcconnpool")) {
try {
if (Globals.getStore().isJDBCStore()) {
com.sun.messaging.jmq.jmsserver.persist.jdbc.DBManager.getDBManager().resetConnectionPool();
} else {
status = Status.ERROR;
msg = "Operation is not applicable for a file-based data store.";
}
} catch (Exception ex) {
status = Status.ERROR;
msg = "Error resetting JDBC connection pool because " +
ex.toString();
logger.logStack(Logger.INFO, msg, ex);
}
} else if (targetType.equalsIgnoreCase("metrics")) {
com.sun.messaging.jmq.jmsserver.data.handlers.admin.ResetMetricsHandler.resetAllMetrics();
}
} else if (cmdarg.equals("fault")) {
// handle fault injection
String faultName = (String)p.get("name");
if (faultName == null)
faultName = target;
String faultSelector = (String)p.get("selector");
FaultInjection fi = FaultInjection.getInjection();
boolean faultOn = true;
// ok only turn off fault injection if no name pair
if (debugStr != null && debugStr.equalsIgnoreCase("false")) {
if (faultName == null) {
fi.setFaultInjection(false);
} else {
fi.unsetFault(faultName);
}
} else {
fi.setFaultInjection(true);
if (faultName != null) {
try {
fi.setFault(faultName, faultSelector, p);
} catch (Exception ex) {
status = Status.ERROR;
msg = "Bad Selector " + faultSelector;
}
}
}
} else if (cmdarg.equals("gc")) {
logger.log(Logger.INFO,"GC'ing the system");
com.sun.messaging.jmq.jmsserver.Broker.runGC();
long usedMem = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory());
msg = "Used memory is " +
(usedMem/1024l) + "k, " +
" this is " + (usedMem*100/Runtime.getRuntime().maxMemory())
+ "% of " + (Runtime.getRuntime().maxMemory()/1024l)
+ "k";
logger.log(Logger.INFO,msg);
if (debugHash == null) debugHash = new Hashtable();
debugHash.put("Memory", msg);
debugHash.put("Used", (usedMem/1024l)+"k");
debugHash.put("Total", ((Runtime.getRuntime().totalMemory()/1024l)+"k"));
debugHash.put("Free", ((Runtime.getRuntime().freeMemory()/1024l)+"k"));
debugHash.put("Max", ((Runtime.getRuntime().maxMemory()/1024l)+"k"));
} else if (cmdarg.equals("threads")) {
// log
try {
debugHash = new Hashtable();
debugHash.put("threads", "dumped to log");
} catch (Exception ex) {
status = Status.ERROR;
msg = "Error "+cmd+"ing " + cmdarg + " because "
+ ex.getMessage() + "";
logger.logStack(Logger.INFO,msg, ex);
}
logger.log(Logger.INFO,"Dumping threads:\n" + SupportUtil.getAllStackTraces("\t"));
} else if (cmdarg.equals("pkt")) {
IMQBasicConnection.dumpPacket(debugOn);
} else if (cmdarg.equals("pktin")) {
IMQBasicConnection.dumpInPacket(debugOn);
} else if (cmdarg.equals("pktout")) {
IMQBasicConnection.dumpOutPacket(debugOn);
} else if (cmdarg.equals("class")) {
try {
Class cl = Class.forName(target);
Field[] fields = cl.getDeclaredFields();
boolean found = false;
for (int i = 0; i < fields.length; i++) {
if (fields[i].getName().equals(Debug.debugFieldName)) {
fields[i].setAccessible(true);
fields[i].setBoolean(null, debugOn);
found = true;
break;
}
}
if (!found) throw new NoSuchFieldException(Debug.debugFieldName);
} catch (Exception ex) {
status = Status.ERROR;
msg = "Unable to set DEBUG on class " + target +
" because " + ex.toString();
logger.logStack(Logger.INFO,msg, ex);
}
} else {
status = Status.ERROR;
msg = "Unknown debug argument " + cmdarg;
}
} else if (cmd.equals("resume")) {
// session, connection, consumerUID, producer
if (cmdarg.equals("prd")) {
try {
ProducerUID pid = new ProducerUID(
Long.parseLong(target));
Producer pr = Producer.getProducer(pid);
Destination d = Destination.getDestination(
pr.getDestinationUID());
logger.log(Logger.INFO,"Resuming " + pr);
d.forceResumeFlow(pr);
} catch (Exception ex) {
status = Status.ERROR;
msg = "Error resuming flow from producer " + target +
" because " + ex.toString();