/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2000-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
/*
* @(#)BrokerAdminHandler.java 1.73 06/27/07
*/
package com.sun.messaging.jmq.admin.apps.console;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.jms.JMSSecurityException;
import com.sun.messaging.AdministeredObject;
import com.sun.messaging.jmq.util.DestType;
import com.sun.messaging.jmq.util.DestState;
import com.sun.messaging.jmq.util.admin.ServiceInfo;
import com.sun.messaging.jmq.util.admin.DestinationInfo;
import com.sun.messaging.jmq.util.admin.MessageType;
import com.sun.messaging.jmq.admin.util.Globals;
import com.sun.messaging.jmq.admin.resources.AdminConsoleResources;
import com.sun.messaging.jmq.admin.resources.AdminResources;
import com.sun.messaging.jmq.admin.apps.console.event.AdminEvent;
import com.sun.messaging.jmq.admin.apps.console.event.DialogEvent;
import com.sun.messaging.jmq.admin.apps.console.event.BrokerAdminEvent;
import com.sun.messaging.jmq.admin.apps.console.event.BrokerErrorEvent;
import com.sun.messaging.jmq.admin.apps.console.event.BrokerCmdStatusEvent;
import com.sun.messaging.jmq.admin.apps.console.event.AdminEventListener;
import com.sun.messaging.jmq.admin.apps.console.event.ConsoleActionEvent;
import com.sun.messaging.jmq.admin.bkrutil.BrokerAdmin;
import com.sun.messaging.jmq.admin.bkrutil.BrokerAdminConn;
import com.sun.messaging.jmq.admin.bkrutil.BrokerAdminException;
/**
* Handles the broker administration tasks delegated by the
* AController class.
*
* @see AController
*/
public class BrokerAdminHandler implements AdminEventListener {
private static AdminConsoleResources acr = Globals.getAdminConsoleResources();
private static AdminResources ar = Globals.getAdminResources();
private static String close[] = {acr.getString(acr.I_DIALOG_CLOSE)};
private static String BROKERLIST_FILENAME = "brokerlist.properties";
/*
* Reconnect attributes.
* Currently not being used.
*/
public static final boolean JMQ_RECONNECT = false;
public static final int JMQ_RECONNECT_RETRIES = BrokerAdmin.RECONNECT_RETRIES;
public static final long JMQ_RECONNECT_DELAY = BrokerAdmin.RECONNECT_DELAY;
private AdminApp app;
private AController controller;
private BrokerAddDialog brokerAddDialog = null;
private BrokerDestAddDialog brokerDestAddDialog = null;
private BrokerDestPropsDialog brokerDestPropsDialog = null;
private BrokerServicePropsDialog brokerSvcPropsDialog = null;
private BrokerPropsDialog brokerBkrPropsDialog = null;
private BrokerQueryDialog brokerBkrQueryDialog = null;
private BrokerPasswdDialog brokerPasswdDialog = null;
/**
* Create/initialize the admin explorer GUI component.
*/
public BrokerAdminHandler(AdminApp app, AController controller) {
this.app = app;
this.controller = controller;
}
public void init() {
loadBrokerList();
}
/*
* BEGIN INTERFACE AdminEventListener
*/
public void adminEventDispatched(AdminEvent e) {
int id;
ConsoleObj selObj;
if (e instanceof DialogEvent) {
handleDialogEvents((DialogEvent)e);
} else if (e instanceof BrokerAdminEvent) {
handleBrokerAdminEvents((BrokerAdminEvent)e);
} else if (e instanceof BrokerErrorEvent) {
handleBrokerErrorEvents((BrokerErrorEvent)e);
} else if (e instanceof BrokerCmdStatusEvent) {
handleBrokerCmdStatusEvent((BrokerCmdStatusEvent)e);
}
}
/*
* END INTERFACE AdminEventListener
*/
public void handleDialogEvents(DialogEvent de) {
ConsoleObj selObj = app.getSelectedObj();
int dialogType = de.getDialogType();
switch (dialogType) {
case DialogEvent.ADD_DIALOG:
if (selObj instanceof BrokerListCObj) {
if (brokerAddDialog == null) {
brokerAddDialog = new BrokerAddDialog(app.getFrame(),
(BrokerListCObj)selObj);
brokerAddDialog.addAdminEventListener(this);
brokerAddDialog.setLocationRelativeTo(app.getFrame());
}
brokerAddDialog.show();
} else if (selObj instanceof BrokerDestListCObj) {
if (brokerDestAddDialog == null) {
brokerDestAddDialog =
new BrokerDestAddDialog(app.getFrame());
brokerDestAddDialog.addAdminEventListener(this);
brokerDestAddDialog.setLocationRelativeTo(app.getFrame());
}
brokerDestAddDialog.show();
}
break;
case DialogEvent.DELETE_DIALOG:
if (selObj instanceof BrokerCObj)
doDeleteBroker((BrokerCObj)selObj);
else if (selObj instanceof BrokerDestCObj)
doDeleteDestination((BrokerDestCObj)selObj);
break;
case DialogEvent.PURGE_DIALOG:
if (selObj instanceof BrokerDestCObj)
doPurgeDestination((BrokerDestCObj)selObj);
break;
case DialogEvent.PROPS_DIALOG:
if (selObj instanceof BrokerDestCObj) {
BrokerDestCObj bDestCObj;
if (brokerDestPropsDialog == null) {
brokerDestPropsDialog = new BrokerDestPropsDialog(app.getFrame());
brokerDestPropsDialog.addAdminEventListener(this);
brokerDestPropsDialog.setLocationRelativeTo(app.getFrame());
}
bDestCObj = (BrokerDestCObj)selObj;
if (refreshBrokerDestCObj(bDestCObj)) {
app.getInspector().selectedObjectUpdated();
brokerDestPropsDialog.show
(bDestCObj.getDestinationInfo(), bDestCObj.getDurables());
}
} else if (selObj instanceof BrokerServiceCObj) {
BrokerServiceCObj bSvcCObj;
if (brokerSvcPropsDialog == null) {
brokerSvcPropsDialog = new BrokerServicePropsDialog(app.getFrame());
brokerSvcPropsDialog.addAdminEventListener(this);
brokerSvcPropsDialog.setLocationRelativeTo(app.getFrame());
}
bSvcCObj = (BrokerServiceCObj)selObj;
if (refreshBrokerServiceCObj(bSvcCObj)) {
app.getInspector().selectedObjectUpdated();
brokerSvcPropsDialog.show(bSvcCObj.getServiceInfo());
}
} else if (selObj instanceof BrokerCObj) {
if (brokerBkrPropsDialog == null) {
brokerBkrPropsDialog = new BrokerPropsDialog(app.getFrame());
brokerBkrPropsDialog.addAdminEventListener(this);
brokerBkrPropsDialog.setLocationRelativeTo(app.getFrame());
}
BrokerCObj bCObj = (BrokerCObj)selObj;
brokerBkrPropsDialog.setBrokerCObj(bCObj);
brokerBkrPropsDialog.show();
}
break;
case DialogEvent.CONNECT_DIALOG:
if (selObj instanceof BrokerCObj)
doConnectToBroker((BrokerCObj)selObj);
break;
case DialogEvent.DISCONNECT_DIALOG:
if (selObj instanceof BrokerCObj)
doDisconnectFromBroker((BrokerCObj)selObj);
break;
case DialogEvent.SHUTDOWN_DIALOG:
if (selObj instanceof BrokerCObj)
doShutdownBroker((BrokerCObj)selObj);
break;
case DialogEvent.RESTART_DIALOG:
if (selObj instanceof BrokerCObj)
doRestartBroker((BrokerCObj)selObj);
break;
case DialogEvent.PAUSE_DIALOG:
if (selObj instanceof BrokerServiceCObj)
doPauseService((BrokerServiceCObj)selObj);
else if (selObj instanceof BrokerCObj)
doPauseBroker((BrokerCObj)selObj);
else if (selObj instanceof BrokerDestCObj)
doPauseDest((BrokerDestCObj)selObj);
else if (selObj instanceof BrokerDestListCObj)
doPauseAllDests((BrokerDestListCObj)selObj);
break;
case DialogEvent.RESUME_DIALOG:
if (selObj instanceof BrokerServiceCObj)
doResumeService((BrokerServiceCObj)selObj);
else if (selObj instanceof BrokerCObj)
doResumeBroker((BrokerCObj)selObj);
else if (selObj instanceof BrokerDestCObj)
doResumeDest((BrokerDestCObj)selObj);
else if (selObj instanceof BrokerDestListCObj)
doResumeAllDests((BrokerDestListCObj)selObj);
break;
case DialogEvent.HELP_DIALOG:
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.I_NO_HELP),
acr.getString(acr.I_HELP_TEXT),
JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE, null, close, close[0]);
break;
}
}
public void handleBrokerAdminEvents(BrokerAdminEvent bae) {
int type = bae.getType();
ConsoleBrokerAdminManager baMgr = app.getBrokerListCObj().getBrokerAdminManager();
ConsoleObj selObj = app.getSelectedObj();
BrokerAdmin ba;
BrokerCObj bCObj;
switch (type) {
case BrokerAdminEvent.ADD_BROKER:
if (selObj instanceof BrokerListCObj) {
try {
ba = new BrokerAdmin(bae.getHost(),
bae.getPort(),
bae.getUsername(),
bae.getPassword(),
-1,
JMQ_RECONNECT,
JMQ_RECONNECT_RETRIES,
JMQ_RECONNECT_DELAY
);
ba.setKey(bae.getBrokerName());
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_ADD_BROKER, bae.getBrokerName()) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_ADD_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_ADD_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return;
} catch (Exception e) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_ADD_BROKER, bae.getBrokerName()) +
e.toString(),
acr.getString(acr.I_ADD_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_ADD_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return;
}
if (baMgr.exist(ba.getKey())) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_EXISTS, ba.getKey()),
acr.getString(acr.I_ADD_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_EXISTS),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return;
}
bCObj = new BrokerCObj(ba);
/*
* bae.isConnectAttempt() is always false, since we no longer
* allow users to 'connect after add'.
if (bae.isConnectAttempt()) {
if (connectToBroker(ba)) {
baMgr.addBrokerAdmin(ba);
app.getExplorer().addBroker(bCObj);
if (!refreshBrokerCObj(bCObj)) return;
if (!populateBrokerServices(bCObj)) return;
if (!populateBrokerDestinations(bCObj)) return;
app.getInspector().refresh();
saveBrokerList();
} else
return;
} else {
*/
baMgr.addBrokerAdmin(ba);
app.getExplorer().addBroker(bCObj);
app.getInspector().refresh();
saveBrokerList();
/*
}
*/
if (bae.isOKAction())
brokerAddDialog.hide();
}
break;
case BrokerAdminEvent.ADD_DEST:
if (selObj instanceof BrokerDestListCObj) {
BrokerDestCObj bDestCObj = null;
bCObj = ((BrokerDestListCObj)selObj).getBrokerCObj();
if ((bDestCObj = addDestination(bCObj, bae)) == null)
return;
// Update the table entry
app.getExplorer().addToParent(selObj, bDestCObj);
app.getInspector().refresh();
if (bae.isOKAction())
brokerDestAddDialog.hide();
}
break;
case BrokerAdminEvent.UPDATE_LOGIN:
doUpdateLogin(bae, selObj);
break;
case BrokerAdminEvent.UPDATE_BROKER:
doUpdateBroker(bae, selObj);
break;
case BrokerAdminEvent.DELETE_DUR:
doDeleteDurable(bae, selObj);
break;
case BrokerAdminEvent.PURGE_DUR:
doPurgeDurable(bae, selObj);
break;
case BrokerAdminEvent.UPDATE_SVC:
doUpdateService(bae, selObj);
break;
case BrokerAdminEvent.UPDATE_DEST:
doUpdateDestination(bae, selObj);
break;
case BrokerAdminEvent.QUERY_BROKER:
doQueryBroker(bae, selObj);
break;
case BrokerAdminEvent.UPDATE_BROKER_ENTRY:
doUpdateBrokerEntry(bae, selObj);
break;
}
}
private void handleBrokerErrorEvents(BrokerErrorEvent bee) {
int type = bee.getType();
BrokerListCObj blCObj = app.getBrokerListCObj();
String brokerHost = bee.getBrokerHost();
String brokerPort = bee.getBrokerPort();
String brokerName = bee.getBrokerName();
String[] args = {brokerHost, brokerPort, brokerName};
switch (type) {
/*
* Handle cases where:
* - Broker initiated connection close.
* - Broker unexpectedly shutdown.
* the same way. See bug:
* 4431955 - jmqadmin:show different msg when ctrl-C broker
* depending on JDK used to run bkr
* Until we figure out a way to distinguish between all the
* possible ways of broker shutdown (graceful and non-graceful)
* we'll just report this in the generic "connection has been lost"
* fashion.
*/
case BrokerErrorEvent.ALT_SHUTDOWN:
case BrokerErrorEvent.UNEXPECTED_SHUTDOWN:
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_ERR_SHUTDOWN, args),
acr.getString(acr.I_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_ERR_SHUTDOWN),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
break;
/*
* Other misc. connection problems.
*/
case BrokerErrorEvent.CONNECTION_ERROR:
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_CONN_ERROR, args),
acr.getString(acr.I_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_CONN_ERROR),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
break;
}
/*
* Get the reference to each instance of BrokerCObj.
* Update Gui for those affected broker label(s).
*/
for (Enumeration e = blCObj.children(); e.hasMoreElements();) {
ConsoleObj node = (ConsoleObj)e.nextElement();
if (node instanceof BrokerCObj) {
BrokerCObj bCObj = (BrokerCObj)node;
if ((brokerName != null) &&
(brokerName.equals(bCObj.getExplorerLabel()))) {
bCObj.setBrokerProps(null);
clearBroker(bCObj);
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
// Update menu items, buttons.
controller.setActions(bCObj);
}
}
}
app.getInspector().refresh();
}
private void handleBrokerCmdStatusEvent(BrokerCmdStatusEvent cse) {
int type = cse.getType(),
msgType;
BrokerAdmin ba = cse.getBrokerAdmin();
boolean success = cse.getSuccess();
Exception ex = cse.getLinkedException();
String dstName = cse.getDestinationName(),
svcName = cse.getServiceName(),
clientID = cse.getClientID(),
durName = cse.getDurableName(),
bkrName = ba.getKey(),
title, msg;
DestinationInfo dstInfo = cse.getDestinationInfo();
ServiceInfo svcInfo = cse.getServiceInfo();
Object refreshObj = ba.getAssociatedObj();
if (type == BrokerCmdStatusEvent.BROKER_BUSY) {
int numRetriesAttempted = cse.getNumRetriesAttempted(),
maxNumRetries = cse.getMaxNumRetries();
long retryTimeount = cse.getRetryTimeount();
Object args[] = new Object [ 3 ];
args[0] = Integer.toString(numRetriesAttempted);
args[1] = Integer.toString(maxNumRetries);
args[2] = Long.toString(retryTimeount);
/*
* This string is of the form:
* Broker not responding, retrying [1 of 5 attempts, timeout=20 seconds]
*/
String s = ar.getString(ar.I_JMQCMD_BROKER_BUSY, args);
app.getStatusArea().appendText(s + "\n");
return;
}
/*
* Do not bring up the result dialog for
* 1. QUERY_SVC
* 2. QUERY_DST
* 3. LIST_DUR (for querying destination)
* 4. QUERY_BKR
*/
if ((type == BrokerCmdStatusEvent.QUERY_SVC) ||
(type == BrokerCmdStatusEvent.QUERY_DST) ||
(type == BrokerCmdStatusEvent.LIST_DUR) ||
(type == BrokerCmdStatusEvent.QUERY_BKR)) {
/*
* We need to refresh the console if 'connect' is successful
* but 'query broker' is not upon connecting to a broker.
*/
if (refreshObj instanceof BrokerCObj) {
app.getExplorer().nodeChanged((DefaultMutableTreeNode)refreshObj);
controller.setActions((BrokerCObj)refreshObj);
}
return;
}
/*
* Type of dialog depends on success/failure
*/
if (success) {
msgType = JOptionPane.INFORMATION_MESSAGE;
} else {
msgType = JOptionPane.ERROR_MESSAGE;
}
/*
* Dialog title reads:
* Status received from broker
*/
title = acr.getString(acr.I_STATUS_RECV);
switch (type) {
case BrokerCmdStatusEvent.HELLO:
if (success) {
msg = acr.getString(acr.S_BROKER_CONNECT, bkrName);
if (refreshObj instanceof BrokerCObj) {
BrokerCObj bCObj = (BrokerCObj)refreshObj;
/*
* Connection is considered created when the hello protocol
* handshake takes place successfully.
*/
ba.setIsConnected(true);
if (refreshBrokerServiceListCObj(bCObj.getBrokerServiceListCObj())) {
if (refreshBrokerDestListCObj(bCObj.getBrokerDestListCObj())) {
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
app.getInspector().refresh();
controller.setActions(bCObj);
}
}
}
} else {
msg = acr.getString(acr.E_CONNECT_BROKER, bkrName);
}
break;
case BrokerCmdStatusEvent.CREATE_DST:
if (success) {
msg = acr.getString(acr.S_BROKER_DEST_ADD, dstInfo.name, bkrName);
if (refreshObj instanceof BrokerCObj) {
BrokerCObj bCObj = (BrokerCObj)refreshObj;
BrokerDestListCObj bDestlCObj = bCObj.getBrokerDestListCObj();
BrokerDestCObj bDestCObj = new BrokerDestCObj(bCObj, dstInfo);
app.getExplorer().addToParent(bDestlCObj, bDestCObj);
app.getInspector().refresh();
}
} else {
msg = acr.getString(acr.E_ADD_DEST_BROKER, dstInfo.name, bkrName);
}
break;
case BrokerCmdStatusEvent.DESTROY_DST:
if (success) {
msg = acr.getString(acr.S_BROKER_DEST_DELETE, dstName, bkrName);
if (refreshObj instanceof BrokerDestCObj) {
app.getExplorer().removeFromParent((BrokerDestCObj)refreshObj);
app.getInspector().refresh();
}
} else {
msg = acr.getString(acr.E_BROKER_DEST_DELETE, dstName, bkrName);
}
break;
case BrokerCmdStatusEvent.UPDATE_DST:
if (success) {
msg = acr.getString(acr.S_BROKER_UPDATE_DEST, dstInfo.name);
} else {
msg = acr.getString(acr.E_UPDATE_DEST, dstInfo.name);
}
break;
case BrokerCmdStatusEvent.PURGE_DST:
if (success) {
msg = acr.getString(acr.S_BROKER_DEST_PURGE, dstName, bkrName);
} else {
msg = acr.getString(acr.E_BROKER_DEST_PURGE, dstName, bkrName);
}
break;
case BrokerCmdStatusEvent.DESTROY_DUR:
if (success) {
msg = acr.getString(acr.S_BROKER_DESTROY_DUR, durName, clientID);
if (refreshObj instanceof BrokerDestCObj) {
BrokerDestCObj bDestCObj = (BrokerDestCObj)refreshObj;
refreshBrokerDestCObj(bDestCObj, BrokerAdminEvent.DELETE_DUR);
Vector durables = bDestCObj.getDurables();
if (durables != null)
brokerDestPropsDialog.refresh(durables);
}
} else {
msg = acr.getString(acr.E_BROKER_DESTROY_DUR, durName, clientID);
}
break;
case BrokerCmdStatusEvent.LIST_DST:
if (success) {
msg = acr.getString(acr.S_BROKER_REFRESH_DESTLIST, bkrName);
Object obj = cse.getReturnedObject();
BrokerDestListCObj bDestlCObj;
if (obj instanceof Vector) {
Vector dests = (Vector)obj;
if (refreshObj instanceof BrokerDestListCObj) {
bDestlCObj = (BrokerDestListCObj)refreshObj;
} else if (refreshObj instanceof BrokerCObj) {
BrokerCObj bCObj = (BrokerCObj)refreshObj;
bDestlCObj = bCObj.getBrokerDestListCObj();
} else
return;
refreshBrokerDestList(dests, bDestlCObj);
app.getInspector().refresh();
}
} else {
msg = acr.getString(acr.E_REFRESH_DESTLIST);
}
break;
case BrokerCmdStatusEvent.PAUSE_SVC:
if (success) {
msg = acr.getString(acr.S_SERVICE_PAUSE, svcName, bkrName);
if (refreshObj instanceof BrokerServiceCObj) {
BrokerServiceCObj bSvcCObj = (BrokerServiceCObj)refreshObj;
if (refreshBrokerServiceCObj(bSvcCObj)) {
app.getInspector().refresh();
controller.setActions(bSvcCObj);
}
}
} else {
msg = acr.getString(acr.E_SERVICE_PAUSE, svcName);
}
break;
case BrokerCmdStatusEvent.RESUME_SVC:
if (success) {
msg = acr.getString(acr.S_SERVICE_RESUME, svcName, bkrName);
if (refreshObj instanceof BrokerServiceCObj) {
BrokerServiceCObj bSvcCObj = (BrokerServiceCObj)refreshObj;
if (refreshBrokerServiceCObj(bSvcCObj)) {
app.getInspector().refresh();
controller.setActions(bSvcCObj);
}
}
} else {
msg = acr.getString(acr.E_SERVICE_RESUME, svcName);
}
break;
case BrokerCmdStatusEvent.UPDATE_SVC:
if (success) {
msg = acr.getString(acr.S_BROKER_UPDATE_SVC, svcInfo.name);
if (refreshObj instanceof BrokerServiceCObj) {
if (refreshBrokerServiceCObj((BrokerServiceCObj)refreshObj))
app.getInspector().refresh();
}
} else {
msg = acr.getString(acr.E_UPDATE_SERVICE, svcInfo.name);
}
break;
case BrokerCmdStatusEvent.LIST_SVC:
if (success) {
msg = acr.getString(acr.S_BROKER_REFRESH_SVCLIST, bkrName);
Object obj = cse.getReturnedObject();
BrokerServiceListCObj bSvclCObj;
if (obj instanceof Vector) {
Vector svcs = (Vector)obj;
if (refreshObj instanceof BrokerServiceListCObj) {
bSvclCObj = (BrokerServiceListCObj)refreshObj;
} else if (refreshObj instanceof BrokerCObj) {
BrokerCObj bCObj = (BrokerCObj)refreshObj;
bSvclCObj = bCObj.getBrokerServiceListCObj();
} else
return;
refreshBrokerServiceList(svcs, bSvclCObj);
app.getInspector().refresh();
}
} else {
msg = acr.getString(acr.E_REFRESH_SVCLIST);
}
break;
case BrokerCmdStatusEvent.PAUSE_BKR:
if (success) {
msg = acr.getString(acr.S_BROKER_PAUSE, bkrName);
if (refreshObj instanceof BrokerCObj) {
BrokerCObj bCObj = (BrokerCObj)refreshObj;
if (refreshBrokerServiceListCObj(bCObj.getBrokerServiceListCObj())) {
app.getInspector().refresh();
controller.setActions(bCObj);
}
}
} else {
msg = acr.getString(acr.E_BROKER_PAUSE, bkrName);
}
break;
case BrokerCmdStatusEvent.RESUME_BKR:
if (success) {
msg = acr.getString(acr.S_BROKER_RESUME, bkrName);
if (refreshObj instanceof BrokerCObj) {
BrokerCObj bCObj = (BrokerCObj)refreshObj;
if (refreshBrokerServiceListCObj(bCObj.getBrokerServiceListCObj())) {
app.getInspector().refresh();
controller.setActions(bCObj);
}
}
} else {
msg = acr.getString(acr.E_BROKER_RESUME, bkrName);
}
break;
case BrokerCmdStatusEvent.UPDATE_BKR:
if (success) {
msg = acr.getString(acr.S_BROKER_UPDATE, bkrName);
} else {
msg = acr.getString(acr.E_UPDATE_BROKER, bkrName);
}
break;
default:
msg = acr.getString(acr.I_UNKNOWN_STATUS, bkrName);
break;
}
if (!success) {
if (ex instanceof BrokerAdminException) {
msg = msg + "\n"
+ printBrokerAdminExceptionDetails((BrokerAdminException)ex);
} else {
msg = msg + "\n" + ex.toString();
}
}
JOptionPane.showOptionDialog(app.getFrame(),
msg,
title,
JOptionPane.YES_NO_OPTION,
msgType, null, close, close[0]);
}
private void doConnectToBroker(BrokerCObj bCObj) {
BrokerAdmin ba = bCObj.getBrokerAdmin();
/*
* This value should be true only when restart is requested.
*/
ba.setReconnect(false);
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* The associated object is used when refreshing the console in
* such cases. We only set the associated object when BrokerAdmin is
* not busy; otherwise, we could be pointing to the wrong ConsoleObj.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bCObj);
boolean authenticationNeeded = false;
if (ba.getUserName().length() == 0) {
authenticationNeeded = true;
}
if (ba.getPassword().length() == 0) {
authenticationNeeded = true;
}
if (authenticationNeeded) {
if (brokerPasswdDialog == null) {
brokerPasswdDialog = new BrokerPasswdDialog(app.getFrame());
brokerPasswdDialog.addAdminEventListener(this);
brokerPasswdDialog.setLocationRelativeTo(app.getFrame());
}
brokerPasswdDialog.show(ba);
} else { // no authentication needed; everything is already provided
if (connectToBroker(ba)) {
if (!refreshBrokerCObj(bCObj)) return;
if (!populateBrokerServices(bCObj)) return;
if (!populateBrokerDestinations(bCObj)) return;
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
app.getInspector().refresh();
// Update menu items, buttons.
controller.setActions(bCObj);
} else
return;
}
}
private boolean connectToBroker(BrokerAdmin ba) {
return connectToBroker(ba, null, null, false);
}
private boolean connectToBroker(BrokerAdmin ba, String tempUsername,
String tempPassword, boolean useTempValues) {
try {
if (useTempValues) {
ba.connect(tempUsername, tempPassword);
} else {
ba.connect();
}
/*
* Add a listener to unexpected error reporting only
* after a successful connect.
* Set the initiator to false. This flag should only
* be set to true when it is ready to preform a shutdown.
*/
ba.addAdminEventListener(this);
ba.setInitiator(false);
ba.sendHelloMessage();
ba.receiveHelloReplyMessage();
/*
* This method is used in two ways:
* 1. Normal connect.
* 2. Restart with password prompting.
*
* In the latter case, we need to print a "restart successful"
* message, not a "connect successful" message.
*
* Restart without password prompting will not go here.
*/
if (ba.isReconnect()) {
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_RESTART, ba.getKey()));
} else {
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_CONNECT, ba.getKey()));
}
} catch (BrokerAdminException baex) {
/*
* Check to see if this is an invalid username / password.
*/
if (BrokerAdminException.INVALID_LOGIN == baex.getType()) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_INVALID_LOGIN),
acr.getString(acr.I_CONNECT_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_INVALID_LOGIN),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
/*
* Check to see if this is some sort of authentication problem.
*/
} else if (BrokerAdminException.SECURITY_PROB == baex.getType()) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_LOGIN_FORBIDDEN),
acr.getString(acr.I_CONNECT_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_LOGIN_FORBIDDEN),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
/*
* Display a generic error message otherwise.
*/
} else {
Object args[] = new Object [ 4 ];
args[0] = ba.getKey();
args[1] = ba.getBrokerHost();
args[2] = ba.getBrokerPort();
args[3] = printBrokerAdminExceptionDetails(baex);
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_CONNECT, args),
acr.getString(acr.I_CONNECT_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_CONNECT),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
/*
* This is not a security problem so dismiss the password dialog.
* If we do not do this then the user will have to manually
* dismiss the password dialog by clicking CANCEL.
*/
if (brokerPasswdDialog != null)
brokerPasswdDialog.hide();
}
return false;
} catch (Exception baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_CONNECT_BROKER, ba.getKey()) +
baex.toString(),
acr.getString(acr.I_CONNECT_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_CONNECT_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private void doUpdateLogin(BrokerAdminEvent bae, ConsoleObj selObj) {
if (selObj instanceof BrokerCObj) {
BrokerCObj bCObj = (BrokerCObj)selObj;
BrokerAdmin ba = bCObj.getBrokerAdmin();
String tempUsername = bae.getUsername();
String tempPasswd = bae.getPassword();
if (connectToBroker(ba, tempUsername, tempPasswd, true)) {
if (!refreshBrokerCObj(bCObj)) return;
if (!populateBrokerServices(bCObj)) return;
if (!populateBrokerDestinations(bCObj)) return;
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
app.getInspector().refresh();
// Close the login window
brokerPasswdDialog.hide();
} else
return;
// Update menu items, buttons.
controller.setActions(bCObj);
}
}
/*
* Update a running broker's properties.
*/
private void doUpdateBroker(BrokerAdminEvent bae, ConsoleObj selObj) {
Properties bkrProps = bae.getBrokerProps();
BrokerCObj bCObj;
BrokerAdmin ba;
if (!(selObj instanceof BrokerCObj)) {
/*
* REMINDER: Need to flag this error ?
*/
return;
}
bCObj = (BrokerCObj)selObj;
ba = bCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bCObj);
try {
ba.sendUpdateBrokerPropsMessage(bkrProps);
ba.receiveUpdateBrokerPropsReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_UPDATE, ba.getKey()));
if (bae.isOKAction()) {
brokerBkrQueryDialog.hide();
}
} catch (BrokerAdminException bae2) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_UPDATE_BROKER, ba.getKey()) +
printBrokerAdminExceptionDetails(bae2),
acr.getString(acr.I_QUERY_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_UPDATE_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
}
}
private void doDeleteDurable(BrokerAdminEvent bae, ConsoleObj selObj) {
BrokerDestCObj bDestCObj;
BrokerAdmin ba;
String durableName = null;
String clientID = null;
if (!(selObj instanceof BrokerDestCObj)) {
/*
* REMINDER: Need to flag this error ?
*/
return;
}
bDestCObj = (BrokerDestCObj)selObj;
ba = bDestCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bDestCObj);
durableName = bae.getDurableName();
clientID = bae.getClientID();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_BROKER_DELETE_DUR, durableName, clientID),
acr.getString(acr.I_DELETE_DURABLE),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
try {
ba.sendDestroyDurableMessage(durableName, clientID);
ba.receiveDestroyDurableReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_DESTROY_DUR, durableName, clientID));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_DESTROY_DUR, durableName, clientID) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_DELETE_DURABLE) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_DESTROY_DUR),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return;
}
/*
* Refresh the durable subscription table.
*/
refreshBrokerDestCObj(bDestCObj, bae.getType());
Vector durables = bDestCObj.getDurables();
if (durables != null)
brokerDestPropsDialog.refresh(durables);
}
private void doPurgeDurable(BrokerAdminEvent bae, ConsoleObj selObj) {
BrokerDestCObj bDestCObj;
BrokerAdmin ba;
String durableName = null;
String clientID = null;
if (!(selObj instanceof BrokerDestCObj)) {
/*
* REMINDER: Need to flag this error ?
*/
return;
}
bDestCObj = (BrokerDestCObj)selObj;
ba = bDestCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bDestCObj);
durableName = bae.getDurableName();
clientID = bae.getClientID();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_BROKER_PURGE_DUR, durableName, clientID),
acr.getString(acr.I_PURGE_DURABLE),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
try {
ba.sendPurgeDurableMessage(durableName, clientID);
ba.receivePurgeDurableReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_PURGE_DUR, durableName, clientID));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_PURGE_DUR, durableName, clientID) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_DELETE_DURABLE) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_PURGE_DUR),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return;
}
/*
* Refresh the durable subscription table.
*/
refreshBrokerDestCObj(bDestCObj, bae.getType());
Vector durables = bDestCObj.getDurables();
if (durables != null)
brokerDestPropsDialog.refresh(durables);
}
private void doUpdateService(BrokerAdminEvent bae, ConsoleObj selObj) {
BrokerServiceCObj bSvcCObj;
BrokerAdmin ba;
String serviceName = null;
int portValue = -1;
int minThreadsValue = -1;
int maxThreadsValue = -1;
if (!(selObj instanceof BrokerServiceCObj)) {
/*
* REMINDER: Need to flag this error ?
*/
return;
}
bSvcCObj = (BrokerServiceCObj)selObj;
ba = bSvcCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bSvcCObj);
serviceName = bSvcCObj.getServiceInfo().name;
portValue = bae.getPort();
minThreadsValue = bae.getMinThreads();
maxThreadsValue = bae.getMaxThreads();
ServiceInfo svcInfo = new ServiceInfo();
svcInfo.setName(serviceName);
svcInfo.setPort(portValue);
svcInfo.setMinThreads(minThreadsValue);
svcInfo.setMaxThreads(maxThreadsValue);
try {
ba.sendUpdateServiceMessage(svcInfo);
ba.receiveUpdateServiceReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_UPDATE_SVC, serviceName));
if (bae.isOKAction()) {
brokerSvcPropsDialog.hide();
}
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_UPDATE_SERVICE, serviceName) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_BROKER_SVC_PROPS) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_UPDATE_SERVICE),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return;
}
if (refreshBrokerServiceCObj(bSvcCObj)) {
app.getInspector().selectedObjectUpdated();
// Update menu items, buttons.
controller.setActions(bSvcCObj);
}
}
private void doUpdateDestination(BrokerAdminEvent bae, ConsoleObj selObj) {
BrokerDestCObj bDestCObj;
BrokerAdmin ba;
String destName = null;
int destTypeMask = -1;
if (!(selObj instanceof BrokerDestCObj)) {
/*
* REMINDER: Need to flag this error ?
*/
return;
}
bDestCObj = (BrokerDestCObj)selObj;
ba = bDestCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bDestCObj);
destName = bDestCObj.getDestinationInfo().name;
destTypeMask = bDestCObj.getDestinationInfo().type;
DestinationInfo destInfo = bae.getDestinationInfo();
destInfo.setName(destName);
destInfo.setType(destTypeMask);
try {
ba.sendUpdateDestinationMessage(destInfo);
ba.receiveUpdateDestinationReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_UPDATE_DEST, destName));
if (bae.isOKAction()) {
brokerDestPropsDialog.hide();
}
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_UPDATE_DEST, destName) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_BROKER_DEST_PROPS) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_UPDATE_DEST),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return;
}
if (refreshBrokerDestCObj(bDestCObj, bae.getType())) {
app.getInspector().selectedObjectUpdated();
// Update menu items, buttons.
controller.setActions(bDestCObj);
}
}
private void doQueryBroker(BrokerAdminEvent bae, ConsoleObj selObj) {
if (!(selObj instanceof BrokerCObj)) {
return;
}
if (brokerBkrQueryDialog == null) {
brokerBkrQueryDialog = new BrokerQueryDialog(app.getFrame());
brokerBkrQueryDialog.addAdminEventListener(this);
brokerBkrQueryDialog.setLocationRelativeTo(app.getFrame());
}
BrokerCObj bCObj = (BrokerCObj)selObj;
if (refreshBrokerCObj(bCObj))
brokerBkrQueryDialog.show(bCObj);
}
/*
* Update brokerlist entry in admin console.
* This is *not* updating a running broker's properties.
*/
private void doUpdateBrokerEntry(BrokerAdminEvent bae, ConsoleObj selObj) {
ConsoleBrokerAdminManager baMgr =
app.getBrokerListCObj().getBrokerAdminManager();
BrokerCObj bCObj;
BrokerAdmin ba;
String oldPasswd, oldUserName, oldHost, oldPort, oldName,
newName = bae.getBrokerName();
if (!(selObj instanceof BrokerCObj)) {
return;
}
bCObj = (BrokerCObj)selObj;
ba = bCObj.getBrokerAdmin();
/*
* Get old/current values.
*/
oldName = ba.getKey();
oldHost = ba.getBrokerHost();
oldPort = ba.getBrokerPort();
oldUserName = ba.getUserName();
oldPasswd = ba.getPassword();
if (!oldName.equals(newName)) {
if (baMgr.exist(newName)) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_EXISTS, newName),
acr.getString(acr.I_BROKER_PROPS) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_EXISTS),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return;
}
}
try {
ba.setKey(bae.getBrokerName());
ba.setBrokerHost(bae.getHost());
ba.setBrokerPort(Integer.toString(bae.getPort()));
ba.setUserName(bae.getUsername());
ba.setPassword(bae.getPassword());
} catch(BrokerAdminException baex) {
int type = baex.getType();
String badVal = baex.getBadValue(),
errorStrId = acr.E_INVALID_PORT;
/*
* Revert to old values
*/
try {
ba.setKey(oldName);
ba.setBrokerHost(oldHost);
ba.setBrokerPort(oldPort);
ba.setUserName(oldUserName);
ba.setPassword(oldPasswd);
} catch (Exception e) {
/*
* Don't check for any errors since these were
* the original values
*/
}
switch (type) {
case BrokerAdminException.BAD_HOSTNAME_SPECIFIED:
errorStrId = acr.E_INVALID_HOSTNAME;
break;
case BrokerAdminException.BAD_PORT_SPECIFIED:
errorStrId = acr.E_INVALID_PORT;
break;
}
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(errorStrId, badVal),
acr.getString(acr.I_BROKER_PROPS) + ": " +
acr.getString(acr.I_ERROR_CODE, errorStrId),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return;
}
app.getExplorer().nodeChanged(selObj);
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_ENTRY_UPDATE, selObj.toString()));
app.getInspector().selectedObjectUpdated();
saveBrokerList();
if (bae.isOKAction())
brokerBkrPropsDialog.hide();
}
private boolean reconnectToBroker(BrokerCObj bCObj)
throws BrokerAdminException {
BrokerAdmin ba = bCObj.getBrokerAdmin();
boolean connected = false;
int count = 0;
while (!connected && (count < BrokerAdmin.RECONNECT_RETRIES)) {
try {
count++;
ba.connect();
ba.sendHelloMessage();
ba.receiveHelloReplyMessage();
connected = true;
/*
* Add a listener to unexpected error reporting only
* after a successful connect.
* Set the initiator to false. This flag should only
* be set to true when it is ready to preform a shutdown.
*/
ba.addAdminEventListener(this);
ba.setInitiator(false);
} catch (BrokerAdminException baex) {
// try to reconnect based on RECONNECT attributes
if (baex.getType() == BrokerAdminException.CONNECT_ERROR) {
try {
Thread.sleep(BrokerAdmin.RECONNECT_DELAY);
} catch (InterruptedException ie) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_RECONNECT_BROKER, ba.getKey()) +
ie.toString(),
acr.getString(acr.I_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_RECONNECT_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
// Update the node
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
// Update menu items, buttons.
controller.setActions(bCObj);
}
} else {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_RECONNECT_BROKER, ba.getKey()) +
baex.toString(),
acr.getString(acr.I_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_RECONNECT_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
// Update the node
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
// Update menu items, buttons.
controller.setActions(bCObj);
}
} catch (Exception ex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_RECONNECT_BROKER, ba.getKey()) +
ex.toString(),
acr.getString(acr.I_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_RECONNECT_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
// Update the node
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
// Update menu items, buttons.
controller.setActions(bCObj);
}
if (count >= BrokerAdmin.RECONNECT_RETRIES) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_RECONNECT),
acr.getString(acr.I_CONNECT_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_RECONNECT),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
// Update the node
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
// Update menu items, buttons.
controller.setActions(bCObj);
}
}
return connected;
}
private void doDisconnectFromBroker(BrokerCObj bCObj) {
BrokerAdmin ba = bCObj.getBrokerAdmin();
if (ba == null) {
/*
* Should not get here.
*/
return;
}
/*
* If BrokerAdmin is busy, disallow disconnect.
*/
if (ba.isBusy()) {
Object args[] = new Object [ 3 ];
String busyMsg;
args[0] = ba.getKey();
args[1] = ba.getBrokerHost();
args[2] = ba.getBrokerPort();
busyMsg = acr.getString(acr.I_BUSY_WAIT_FOR_REPLY, args);
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_DISCONNECT_BROKER_NOT_POSSIBLE)
+ busyMsg,
acr.getString(acr.I_DISCONNECT_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return;
}
// Remove a listener to unexpected error reporting
ba.removeAdminEventListener(this);
/*
* This value should be true only when restart is requested.
*/
ba.setReconnect(false);
if ((ba != null) && (disconnectFromBroker(ba))) {
bCObj.setBrokerProps(null);
/*
* Remove destinations and services from this broker's node
* hierarchy.
*/
clearBroker(bCObj);
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
app.getInspector().refresh();
} else
return;
// Update menu items, buttons.
controller.setActions(bCObj);
}
// REVISIT: BrokerAdmin may need to be changed to propagage the exceptions.
private boolean disconnectFromBroker(BrokerAdmin ba) {
ba.close();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_DISCONNECT, ba.getKey()));
return true;
}
private boolean populateBrokerServices(BrokerCObj bCObj) {
BrokerServiceListCObj bSvclCObj = null;
bSvclCObj = bCObj.getBrokerServiceListCObj();
return refreshBrokerServiceListCObj(bSvclCObj);
}
private boolean refreshBrokerServiceListCObj(BrokerServiceListCObj bSvclCObj) {
BrokerCObj bCObj;
BrokerAdmin ba;
Vector svcs = null;
bCObj = bSvclCObj.getBrokerCObj();
ba = bCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bSvclCObj);
try {
ba.sendGetServicesMessage(null);
svcs = ba.receiveGetServicesReplyMessage();
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_REFRESH_SVCLIST) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_REFRESH_SVCLIST) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_REFRESH_SVCLIST),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
refreshBrokerServiceList(svcs, bSvclCObj);
return true;
}
private void refreshBrokerServiceList(Vector svcs, BrokerServiceListCObj bSvclCObj) {
BrokerCObj bCObj = bSvclCObj.getBrokerCObj();
// If there are any services, remove them all from the list, only
// if the new services is NOT null.
if (svcs != null) {
if (bSvclCObj != null)
bSvclCObj.removeAllChildren();
BrokerServiceCObj bSvcCObj;
int i = 0;
Enumeration e = svcs.elements();
while (e.hasMoreElements()) {
ServiceInfo sInfo = (ServiceInfo)e.nextElement();
bSvcCObj = new BrokerServiceCObj(bCObj, sInfo);
bSvclCObj.insert(bSvcCObj, i++);
}
}
}
private boolean refreshBrokerServiceCObj(BrokerServiceCObj bSvcCObj) {
ServiceInfo oldSvcInfo = bSvcCObj.getServiceInfo();
BrokerAdmin ba = bSvcCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bSvcCObj);
Vector svc = null;
try {
ba.sendGetServicesMessage(oldSvcInfo.name);
/*
* False because users do not need to know whether
* or not the operation had succeeded after timeout.
*/
svc = ba.receiveGetServicesReplyMessage(false);
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_RETRIEVE_SVC, oldSvcInfo.name) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_BROKER_SVC_PROPS) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_RETRIEVE_SVC),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
if ((svc != null) && (svc.size() == 1)) {
Enumeration e = svc.elements();
ServiceInfo sInfo = (ServiceInfo)e.nextElement();
bSvcCObj.setServiceInfo(sInfo);
return true;
}
return false;
}
private boolean populateBrokerDestinations(BrokerCObj bCObj) {
BrokerDestListCObj bDestlCObj = null;
bDestlCObj = bCObj.getBrokerDestListCObj();
return refreshBrokerDestListCObj(bDestlCObj);
}
private boolean refreshBrokerDestListCObj(BrokerDestListCObj bDestlCObj) {
BrokerCObj bCObj;
BrokerAdmin ba;
Vector dests = null;
bCObj = bDestlCObj.getBrokerCObj();
ba = bDestlCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bDestlCObj);
try {
ba.sendGetDestinationsMessage(null, -1);
dests = ba.receiveGetDestinationsReplyMessage();
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_REFRESH_DESTLIST) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_REFRESH_DESTLIST) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_REFRESH_DESTLIST),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
refreshBrokerDestList(dests, bDestlCObj);
return true;
}
private void refreshBrokerDestList(Vector dests, BrokerDestListCObj bDestlCObj) {
BrokerCObj bCObj = bDestlCObj.getBrokerCObj();
// If there are any destinations, remove them all from the list, only
// if the new destinations is NOT null.
if (dests != null) {
if (bDestlCObj != null)
bDestlCObj.removeAllChildren();
BrokerDestCObj bDestCObj;
int i = 0;
Enumeration e = dests.elements();
while (e.hasMoreElements()) {
DestinationInfo dInfo = (DestinationInfo)e.nextElement();
if ((!DestType.isTemporary(dInfo.type)) &&
(!MessageType.JMQ_ADMIN_DEST.equals(dInfo.name)) &&
(!MessageType.JMQ_BRIDGE_ADMIN_DEST.equals(dInfo.name)) &&
(!DestType.isInternal(dInfo.fulltype))) {
bDestCObj = new BrokerDestCObj(bCObj, dInfo);
bDestlCObj.insert(bDestCObj, i++);
}
}
}
}
/*
* This is needed because eventType from other Event types may conflict
* with BrokerAdminEvent type.
*/
private boolean refreshBrokerDestCObj(BrokerDestCObj bDestCObj) {
return refreshBrokerDestCObj(bDestCObj, -1);
}
private boolean refreshBrokerDestCObj(BrokerDestCObj bDestCObj, int eventType) {
DestinationInfo oldDestInfo = bDestCObj.getDestinationInfo();
BrokerAdmin ba = bDestCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bDestCObj);
Vector dests = null;
Vector durables = null;
boolean succeed = false;
try {
ba.sendGetDurablesMessage(oldDestInfo.name, null);
/*
* False because users do not need to know whether
* or not the operation had succeeded after timeout.
*/
durables = ba.receiveGetDurablesReplyMessage(false);
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_RETRIEVE_DUR, oldDestInfo.name) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_BROKER_DEST_PROPS) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_RETRIEVE_DUR),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
if (durables.size() >= 0) {
bDestCObj.setDurables(durables);
succeed = true;
}
try {
ba.sendGetDestinationsMessage(oldDestInfo.name, oldDestInfo.type);
/*
* False because users do not need to know whether
* or not the operation had succeeded after timeout.
*/
dests = ba.receiveGetDestinationsReplyMessage(false);
} catch (BrokerAdminException baex) {
/*
*Do not pop up an error message, as another error message will be popped up.
*/
if (eventType == BrokerAdminEvent.DELETE_DUR ||
eventType == BrokerAdminEvent.UPDATE_DEST) {
return false;
}
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_RETRIEVE_DEST, oldDestInfo.name) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_BROKER_DEST_PROPS) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_RETRIEVE_DEST),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
if ((dests != null) && (dests.size() == 1)) {
Enumeration e = dests.elements();
DestinationInfo dInfo = (DestinationInfo)e.nextElement();
if ((!DestType.isTemporary(dInfo.type)) &&
(!DestType.isInternal(dInfo.fulltype)) &&
(!MessageType.JMQ_BRIDGE_ADMIN_DEST.equals(dInfo.name)) &&
(!MessageType.JMQ_ADMIN_DEST.equals(dInfo.name))) {
bDestCObj.setDestinationInfo(dInfo);
}
succeed = true;
}
return succeed;
}
/*
* Remove destinations and services from this broker's node
* hierarchy.
*/
private void clearBroker(BrokerCObj bCObj) {
BrokerDestListCObj bDestlCObj = null;
BrokerServiceListCObj bSvclCObj = null;
// Get the reference to the instance of BrokerDestListCObj
for (Enumeration e = bCObj.children(); e.hasMoreElements();) {
ConsoleObj node = (ConsoleObj)e.nextElement();
if (node instanceof BrokerDestListCObj) {
bDestlCObj = (BrokerDestListCObj)node;
} else if (node instanceof BrokerServiceListCObj) {
bSvclCObj = (BrokerServiceListCObj)node;
}
}
if (bDestlCObj != null) {
bDestlCObj.removeAllChildren();
}
if (bSvclCObj != null) {
bSvclCObj.removeAllChildren();
}
}
private void doDeleteBroker(BrokerCObj bCObj) {
ConsoleBrokerAdminManager baMgr = app.getBrokerListCObj().getBrokerAdminManager();
BrokerAdmin ba = bCObj.getBrokerAdmin();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_BROKER_DELETE, ba.getKey()),
acr.getString(acr.I_DELETE_BROKER),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (ba != null) {
baMgr.deleteBrokerAdmin(ba);
saveBrokerList();
ba.close();
app.getExplorer().removeFromParent(bCObj);
controller.clearSelection();
}
}
private void doPauseService(BrokerServiceCObj bSvcCObj) {
BrokerAdmin ba = bSvcCObj.getBrokerAdmin();
ServiceInfo svcInfo = bSvcCObj.getServiceInfo();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_SERVICE_PAUSE, svcInfo.name, ba.getKey()),
acr.getString(acr.I_PAUSE_SERVICE),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (ba != null) {
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bSvcCObj);
if (pauseService(ba, svcInfo.name)) {
svcInfo = queryServiceInfo(ba, svcInfo.name);
if (svcInfo != null) {
bSvcCObj.setServiceInfo(svcInfo);
app.getInspector().selectedObjectUpdated();
}
// Update menu items, buttons.
controller.setActions(bSvcCObj);
}
}
}
private boolean pauseService(BrokerAdmin ba, String svcName) {
try {
ba.sendPauseMessage(svcName);
ba.receivePauseReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_SERVICE_PAUSE, svcName, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_SERVICE_PAUSE, svcName) + "\n" +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_PAUSE_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_SERVICE_PAUSE),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private void doResumeService(BrokerServiceCObj bSvcCObj) {
BrokerAdmin ba = bSvcCObj.getBrokerAdmin();
ServiceInfo svcInfo = bSvcCObj.getServiceInfo();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_SERVICE_RESUME, svcInfo.name, ba.getKey()),
acr.getString(acr.I_RESUME_SERVICE),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (ba != null) {
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bSvcCObj);
if (resumeService(ba, svcInfo.name)) {
svcInfo = queryServiceInfo(ba, svcInfo.name);
if (svcInfo != null) {
bSvcCObj.setServiceInfo(svcInfo);
app.getInspector().selectedObjectUpdated();
}
// Update menu items, buttons.
controller.setActions(bSvcCObj);
}
}
}
private boolean resumeService(BrokerAdmin ba, String svcName) {
try {
ba.sendResumeMessage(svcName);
ba.receiveResumeReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_SERVICE_RESUME, svcName, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_SERVICE_RESUME, svcName) + "\n" +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_RESUME_SERVICE) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_SERVICE_RESUME),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private void doPauseDest(BrokerDestCObj bDestCObj) {
BrokerAdmin ba = bDestCObj.getBrokerAdmin();
DestinationInfo destInfo = bDestCObj.getDestinationInfo();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_DEST_PAUSE, destInfo.name, ba.getKey()),
acr.getString(acr.I_PAUSE_DEST),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
/*
* REVISIT:
* At this point we can ask the user what pauseType they want:
* ALL
* PRODUCERS
* CONSUMERS
* For now, we assume 'ALL' (== DestState.PAUSED).
*/
if (ba != null) {
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bDestCObj);
if (pauseDest(ba, destInfo.name, destInfo.type, DestState.PAUSED)) {
destInfo = queryDestinationInfo(ba, destInfo.name, destInfo.type);
if (destInfo != null) {
bDestCObj.setDestinationInfo(destInfo);
app.getInspector().selectedObjectUpdated();
}
// Update menu items, buttons.
controller.setActions(bDestCObj);
}
}
}
private void doPauseAllDests(BrokerDestListCObj bDestListCObj) {
BrokerAdmin ba = bDestListCObj.getBrokerAdmin();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_DEST_PAUSE_ALL, ba.getKey()),
acr.getString(acr.I_PAUSE_ALL_DESTS),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (ba != null) {
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bDestListCObj);
if (pauseAllDests(ba, DestType.DEST_TYPE_QUEUE, DestState.PAUSED)) {
if (!populateBrokerDestinations((BrokerCObj)bDestListCObj.getParent())) return;
// Update menu items, buttons.
controller.setActions(bDestListCObj);
app.getInspector().refresh();
}
}
}
private boolean pauseDest(BrokerAdmin ba, String destName,
int destTypeMask, int pauseType) {
try {
ba.sendPauseMessage(destName, destTypeMask, pauseType);
ba.receivePauseReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_DEST_PAUSE, destName, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_DEST_PAUSE, destName) + "\n" +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_PAUSE_DEST) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_DEST_PAUSE),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private boolean pauseAllDests(BrokerAdmin ba,
int destTypeMask, int pauseType) {
try {
ba.sendPauseMessage(null, destTypeMask, pauseType);
ba.receivePauseReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_DEST_ALL_PAUSE, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_DEST_ALL_PAUSE) + "\n" +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_PAUSE_ALL_DESTS) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_DEST_ALL_PAUSE),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private void doPauseBroker(BrokerCObj bCObj) {
BrokerAdmin ba = bCObj.getBrokerAdmin();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_BROKER_PAUSE, ba.getKey()),
acr.getString(acr.I_PAUSE_BROKER),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (ba != null) {
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bCObj);
if (pauseBroker(ba)) {
Enumeration e = bCObj.children();
BrokerServiceListCObj bSvclCObj = null;
while (e.hasMoreElements()) {
ConsoleObj cObj = (ConsoleObj)e.nextElement();
if (cObj instanceof BrokerServiceListCObj)
bSvclCObj = (BrokerServiceListCObj)cObj;
}
Vector svcs = queryAllServiceInfo(ba);
if (svcs != null) {
updateAllServiceInfo(bSvclCObj, svcs);
// Update menu items, buttons.
controller.setActions(bCObj);
app.getInspector().refresh();
}
}
}
}
private boolean pauseBroker(BrokerAdmin ba) {
try {
ba.sendPauseMessage(null);
ba.receivePauseReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_PAUSE, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_PAUSE, ba.getKey()) + "\n" +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_PAUSE_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_PAUSE),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private void doResumeBroker(BrokerCObj bCObj) {
BrokerAdmin ba = bCObj.getBrokerAdmin();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_BROKER_RESUME, ba.getKey()),
acr.getString(acr.I_RESUME_BROKER),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (ba != null) {
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bCObj);
if (resumeBroker(ba)) {
Enumeration e = bCObj.children();
BrokerServiceListCObj bSvclCObj = null;
while (e.hasMoreElements()) {
ConsoleObj cObj = (ConsoleObj)e.nextElement();
if (cObj instanceof BrokerServiceListCObj)
bSvclCObj = (BrokerServiceListCObj)cObj;
}
Vector svcs = queryAllServiceInfo(ba);
if (svcs != null) {
updateAllServiceInfo(bSvclCObj, svcs);
// Update menu items, buttons.
controller.setActions(bCObj);
app.getInspector().refresh();
}
}
}
}
private boolean resumeBroker(BrokerAdmin ba) {
try {
ba.sendResumeMessage(null);
ba.receiveResumeReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_RESUME, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_RESUME, ba.getKey()) + ".\n" +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_RESUME_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_RESUME),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private void doResumeAllDests(BrokerDestListCObj bDestListCObj) {
BrokerAdmin ba = bDestListCObj.getBrokerAdmin();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_DEST_RESUME_ALL, ba.getKey()),
acr.getString(acr.I_RESUME_ALL_DESTS),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (ba != null) {
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bDestListCObj);
if (resumeAllDests(ba, DestType.DEST_TYPE_QUEUE)) {
if (!populateBrokerDestinations((BrokerCObj)bDestListCObj.getParent())) return;
// Update menu items, buttons.
controller.setActions(bDestListCObj);
app.getInspector().refresh();
}
}
}
private void doResumeDest(BrokerDestCObj bDestCObj) {
BrokerAdmin ba = bDestCObj.getBrokerAdmin();
DestinationInfo destInfo = bDestCObj.getDestinationInfo();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_DEST_RESUME, destInfo.name, ba.getKey()),
acr.getString(acr.I_RESUME_DEST),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (ba != null) {
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bDestCObj);
if (resumeDest(ba, destInfo.name, destInfo.type)) {
destInfo = queryDestinationInfo(ba, destInfo.name, destInfo.type);
if (destInfo != null) {
bDestCObj.setDestinationInfo(destInfo);
app.getInspector().selectedObjectUpdated();
}
// Update menu items, buttons.
controller.setActions(bDestCObj);
}
}
}
private boolean resumeAllDests(BrokerAdmin ba,
int destTypeMask) {
try {
ba.sendResumeMessage(null, destTypeMask);
ba.receiveResumeReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_DEST_ALL_RESUME, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_DEST_ALL_RESUME) + "\n" +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_RESUME_ALL_DESTS) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_DEST_ALL_RESUME),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private boolean resumeDest(BrokerAdmin ba, String destName,
int destTypeMask) {
try {
ba.sendResumeMessage(destName, destTypeMask);
ba.receiveResumeReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_DEST_RESUME, destName, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_DEST_RESUME, destName) + "\n" +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_RESUME_DEST) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_DEST_RESUME),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private boolean refreshBrokerCObj(BrokerCObj bCObj) {
BrokerAdmin ba = bCObj.getBrokerAdmin();
Properties bkrProps = queryBrokerProps(ba);
if (bkrProps != null) {
bCObj.setBrokerProps(bkrProps);
return true;
}
return false;
}
private Properties queryBrokerProps(BrokerAdmin ba) {
Properties bkrProps = null;
try {
ba.sendGetBrokerPropsMessage();
/*
* False because users do not need to know whether
* or not the operation had succeeded after timeout.
*/
bkrProps = ba.receiveGetBrokerPropsReplyMessage(false);
} catch (BrokerAdminException bae) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_QUERY, ba.getKey()) +
printBrokerAdminExceptionDetails(bae),
acr.getString(acr.I_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_QUERY),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
}
return bkrProps;
}
private ServiceInfo queryServiceInfo(BrokerAdmin ba, String svcName) {
ServiceInfo svcInfo = null;
try {
ba.sendGetServicesMessage(svcName);
/*
* False because users do not need to know whether
* or not the operation had succeeded after timeout.
*/
Vector svc = ba.receiveGetServicesReplyMessage(false);
if ((svc != null) && (svc.size() == 1)) {
Enumeration e = svc.elements();
svcInfo = (ServiceInfo)e.nextElement();
}
} catch (BrokerAdminException bae) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_SERVICE_QUERY, svcName) +
printBrokerAdminExceptionDetails(bae),
acr.getString(acr.I_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_SERVICE_QUERY),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
}
return svcInfo;
}
private Vector queryAllServiceInfo(BrokerAdmin ba) {
Vector svcs = null;
try {
ba.sendGetServicesMessage(null);
svcs = ba.receiveGetServicesReplyMessage();
} catch (BrokerAdminException bae) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_ALL_SERVICES_QUERY) +
printBrokerAdminExceptionDetails(bae),
acr.getString(acr.I_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_ALL_SERVICES_QUERY),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
}
return svcs;
}
private void updateAllServiceInfo(BrokerServiceListCObj bSvclCObj, Vector svcs) {
if (bSvclCObj == null || svcs == null)
return;
Enumeration e = bSvclCObj.children();
while (e.hasMoreElements()) {
BrokerServiceCObj bSvcCObj = (BrokerServiceCObj)e.nextElement();
for (int i = 0; i < svcs.size(); i++) {
ServiceInfo svc = (ServiceInfo)svcs.elementAt(i);
if ((bSvcCObj.getServiceInfo().name).equals(svc.name))
bSvcCObj.setServiceInfo((ServiceInfo)svcs.elementAt(i));
}
}
}
private DestinationInfo queryDestinationInfo(BrokerAdmin ba, String name, int type) {
DestinationInfo destInfo = null;
try {
ba.sendGetDestinationsMessage(name, type);
/*
* False because users do not need to know whether
* or not the operation had succeeded after timeout.
*/
Vector dest = ba.receiveGetDestinationsReplyMessage(false);
if ((dest != null) && (dest.size() == 1)) {
Enumeration e = dest.elements();
destInfo = (DestinationInfo)e.nextElement();
}
} catch (BrokerAdminException bae) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_DEST_QUERY, name) +
printBrokerAdminExceptionDetails(bae),
acr.getString(acr.I_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_DEST_QUERY),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
}
return destInfo;
}
private void doShutdownBroker(BrokerCObj bCObj) {
BrokerAdmin ba = bCObj.getBrokerAdmin();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_BROKER_SHUTDOWN, ba.getKey()),
acr.getString(acr.I_SHUTDOWN_BROKER),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (ba != null) {
ba.setInitiator(true);
/*
* This value should be true only when restart is requested.
*/
ba.setReconnect(false);
if (shutdownBroker(ba)) {
clearBroker(bCObj);
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
app.getInspector().refresh();
// Update menu items, buttons.
controller.setActions(bCObj);
}
}
}
private boolean shutdownBroker(BrokerAdmin ba) {
try {
ba.sendShutdownMessage(false);
ba.receiveShutdownReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_SHUTDOWN, ba.getKey()));
} catch (BrokerAdminException bae) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_SHUTDOWN_BROKER, ba.getKey()) +
printBrokerAdminExceptionDetails(bae),
acr.getString(acr.I_SHUTDOWN_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_SHUTDOWN_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private void doRestartBroker(BrokerCObj bCObj) {
BrokerAdmin ba = bCObj.getBrokerAdmin();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_BROKER_RESTART, ba.getKey()),
acr.getString(acr.I_RESTART_BROKER),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (ba != null) {
ba.setInitiator(true);
/*
* This value should be true only when restart is requested.
*/
ba.setReconnect(true);
restartBroker(ba, bCObj);
}
}
private boolean restartBroker(BrokerAdmin ba, BrokerCObj bCObj) {
try {
ba.sendShutdownMessage(true);
ba.receiveShutdownReplyMessage();
clearBroker(bCObj);
boolean authenticationNeeded = false;
if (ba.getUserName().length() == 0) {
authenticationNeeded = true;
}
if (ba.getPassword().length() == 0) {
authenticationNeeded = true;
}
if (authenticationNeeded) {
if (brokerPasswdDialog == null) {
brokerPasswdDialog = new BrokerPasswdDialog(app.getFrame());
brokerPasswdDialog.addAdminEventListener(this);
brokerPasswdDialog.setLocationRelativeTo(app.getFrame());
}
brokerPasswdDialog.show(ba);
} else { // no authentication needed; everything is already provided
if (reconnectToBroker(bCObj)) {
if (!refreshBrokerCObj(bCObj)) return false;
if (!populateBrokerServices(bCObj)) return false;
if (!populateBrokerDestinations(bCObj)) return false;
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
app.getInspector().refresh();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_RESTART, ba.getKey()));
} else
return false;
// Update menu items, buttons.
controller.setActions(bCObj);
}
} catch (BrokerAdminException bae) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_RESTART_BROKER, ba.getKey()) +
printBrokerAdminExceptionDetails(bae),
acr.getString(acr.I_RESTART_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_RESTART_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
// Update the node
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
// Update menu items, buttons.
controller.setActions(bCObj);
return false;
}
return true;
}
private BrokerDestCObj addDestination(BrokerCObj bCObj, BrokerAdminEvent bae) {
BrokerDestCObj bDestCObj;
DestinationInfo destInfo = createDestination(bae);
BrokerAdmin ba = bCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bCObj);
String destName = destInfo.name;
try {
ba.sendCreateDestinationMessage(destInfo);
ba.receiveCreateDestinationReplyMessage();
bDestCObj = new BrokerDestCObj(bCObj, destInfo);
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_DEST_ADD, destInfo.name, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_ADD_DEST_BROKER, destName, ba.getKey()) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_ADD_BROKER_DEST) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_ADD_DEST_BROKER),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return null;
}
return bDestCObj;
}
private DestinationInfo createDestination(BrokerAdminEvent bae) {
DestinationInfo destInfo = new DestinationInfo();
destInfo.setName(bae.getDestinationName());
destInfo.setType(bae.getDestinationTypeMask());
if (DestType.isQueue(bae.getDestinationTypeMask())) {
destInfo.setMaxActiveConsumers(bae.getActiveConsumers());
destInfo.setMaxFailoverConsumers(bae.getFailoverConsumers());
}
destInfo.setMaxProducers(bae.getMaxProducers());
destInfo.setMaxMessageBytes(bae.getMaxMesgBytes());
destInfo.setMaxMessages(bae.getMaxMesg());
destInfo.setMaxMessageSize(bae.getMaxPerMesgSize());
return destInfo;
}
private void doDeleteDestination(BrokerDestCObj bDestCObj) {
BrokerAdmin ba = bDestCObj.getBrokerAdmin();
/*
* Broker may take more time to complete the task than the specified
* timeout value.
* This value is used when refreshing the console in such cases.
*/
if (!ba.isBusy())
ba.setAssociatedObj(bDestCObj);
DestinationInfo destInfo = bDestCObj.getDestinationInfo();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_BROKER_DELETE_DEST, destInfo.name, ba.getKey()),
acr.getString(acr.I_DELETE_BROKER_DEST),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (!deleteDestination(ba, destInfo.name, destInfo.type))
return;
BrokerDestListCObj destList = (BrokerDestListCObj)bDestCObj.getParent();
app.getExplorer().removeFromParent(bDestCObj);
// Force selection of BrokerDestListCObj
app.getExplorer().select(((ConsoleObj)destList));
app.getInspector().refresh();
}
private boolean deleteDestination(BrokerAdmin ba, String name, int type) {
try {
ba.sendDestroyDestinationMessage(name, type);
ba.receiveDestroyDestinationReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_DEST_DELETE, name, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_DEST_DELETE, name, ba.getKey()) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_DELETE_BROKER_DEST) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_DEST_DELETE),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private void doPurgeDestination(BrokerDestCObj bDestCObj) {
BrokerAdmin ba = bDestCObj.getBrokerAdmin();
DestinationInfo destInfo = bDestCObj.getDestinationInfo();
int result = JOptionPane.showConfirmDialog(app.getFrame(),
acr.getString(acr.Q_BROKER_PURGE_DEST, destInfo.name, ba.getKey()),
acr.getString(acr.I_PURGE_MESSAGES),
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION)
return;
if (!purgeDestination(ba, destInfo.name, destInfo.type))
return;
destInfo = queryDestinationInfo(ba, destInfo.name, destInfo.type);
if (destInfo != null) {
bDestCObj.setDestinationInfo(destInfo);
app.getInspector().selectedObjectUpdated();
}
}
private boolean purgeDestination(BrokerAdmin ba, String name, int type) {
try {
ba.sendPurgeDestinationMessage(name, type);
ba.receivePurgeDestinationReplyMessage();
app.getStatusArea().appendText
(acr.getString(acr.S_BROKER_DEST_PURGE, name, ba.getKey()));
} catch (BrokerAdminException baex) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_DEST_PURGE, name, ba.getKey()) +
printBrokerAdminExceptionDetails(baex),
acr.getString(acr.I_PURGE_MESSAGES) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_DEST_PURGE),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
return false;
}
return true;
}
private String printBrokerAdminExceptionDetails(BrokerAdminException bae) {
String basicMsg, detailMsg, fullMsg = null;
basicMsg = getBrokerAdminExceptionBasicMsg(bae);
detailMsg = getBrokerAdminExceptionMsgDetail(bae);
if ((basicMsg == null) && (detailMsg == null)) {
return (acr.getString(acr.E_UNKNOWN_ERROR));
}
if (basicMsg != null) {
fullMsg = basicMsg;
}
if (detailMsg != null) {
if (fullMsg == null) {
fullMsg = detailMsg;
} else {
fullMsg = fullMsg + "\n" + detailMsg;
}
}
return (fullMsg);
}
private String getBrokerAdminExceptionMsgDetail(BrokerAdminException bae) {
Exception e = bae.getLinkedException();
String s = bae.getBrokerErrorStr();
String errorMessage = null;
if (s != null) {
errorMessage = s;
}
if (e != null) {
if (errorMessage != null)
errorMessage = errorMessage + e.getMessage();
else
errorMessage = e.getMessage();
}
return (errorMessage);
}
private String getBrokerAdminExceptionBasicMsg(BrokerAdminException bae) {
int type = bae.getType();
BrokerAdminConn ba = bae.getBrokerAdminConn();
String ret, brokerName, host, port;
switch (type) {
case BrokerAdminException.MSG_SEND_ERROR:
ret = ar.getString(ar.E_JMQCMD_MSG_SEND_ERROR);
break;
case BrokerAdminException.MSG_REPLY_ERROR:
ret = ar.getString(ar.E_JMQCMD_MSG_REPLY_ERROR);
break;
case BrokerAdminException.CLOSE_ERROR:
ret = ar.getString(ar.E_JMQCMD_CLOSE_ERROR);
break;
case BrokerAdminException.PROB_GETTING_MSG_TYPE:
ret = ar.getString(ar.E_JMQCMD_PROB_GETTING_MSG_TYPE);
break;
case BrokerAdminException.PROB_GETTING_STATUS:
ret = ar.getString(ar.E_JMQCMD_PROB_GETTING_STATUS);
break;
case BrokerAdminException.REPLY_NOT_RECEIVED:
ret = acr.getString(acr.E_REPLY_NOT_RECEIVED);
break;
case BrokerAdminException.INVALID_OPERATION:
ret = ar.getString(ar.E_JMQCMD_INVALID_OPERATION);
break;
case BrokerAdminException.IGNORE_REPLY_IF_RCVD:
ret = acr.getString(acr.E_NO_REPLY_GIVEUP);
break;
case BrokerAdminException.BUSY_WAIT_FOR_REPLY:
Object args[] = new Object [ 3 ];
brokerName = ba.getKey();
host = ba.getBrokerHost();
port = ba.getBrokerPort();
args[0] = brokerName;
args[1] = host;
args[2] = port;
ret = acr.getString(acr.I_BUSY_WAIT_FOR_REPLY, args);
break;
default:
ret = null;
break;
}
return (ret);
}
/*
* Load broker list from property file. See ConsoleBrokerAdminManager and
* BrokerListProperties for details on the actual file loading.
*/
private void loadBrokerList() {
ConsoleBrokerAdminManager baMgr = app.getBrokerListCObj().getBrokerAdminManager();
try {
baMgr.setFileName(BROKERLIST_FILENAME);
baMgr.readBrokerAdminsFromFile();
} catch (Exception ex) {
String errStr = acr.getString(acr.E_LOAD_BKR_LIST) + ex.getMessage();
/*
* Show popup to indicate that the loading failed.
*/
JOptionPane.showOptionDialog(app.getFrame(),
errStr,
acr.getString(acr.I_LOAD_BKR_LIST) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_LOAD_BKR_LIST),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
/*
* At this point, should we make sure the ConsoleBrokerAdminManager
* contains no obj stores ?
*/
}
Vector v = baMgr.getBrokerAdmins();
for (int i = 0; i < v.size(); i++) {
BrokerAdmin ba = (BrokerAdmin)v.get(i);
ConsoleObj brokerCObj= new BrokerCObj(ba);
/*
* Add code to populate broker node here if connected
*/
app.getExplorer().addBroker(brokerCObj);
}
app.getInspector().refresh();
}
/*
* Save broker list to property file. See ConsoleBrokerAdminManager and
* BrokerListProperties for details on the actual file saving.
*/
private void saveBrokerList() {
ConsoleBrokerAdminManager baMgr = app.getBrokerListCObj().getBrokerAdminManager();
try {
baMgr.setFileName(BROKERLIST_FILENAME);
baMgr.writeBrokerAdminsToFile();
} catch (Exception ex) {
String errStr = acr.getString(acr.E_SAVE_BKR_LIST) + ex.getMessage();
String titles[] = {acr.getString(acr.I_DIALOG_CLOSE),
acr.getString(acr.I_DIALOG_DO_NOT_SHOW_AGAIN)};
/*
* Inform the user that the save failed.
*/
int response = JOptionPane.showOptionDialog(app.getFrame(),
errStr,
acr.getString(acr.I_BROKER) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_SAVE_BKR_LIST),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
}
}
public void handleConsoleActionEvents(ConsoleActionEvent cae) {
int type = cae.getType();
switch (type) {
case ConsoleActionEvent.REFRESH:
doRefresh();
app.getInspector().refresh();
break;
}
}
private void doRefresh() {
ConsoleObj selObj = app.getSelectedObj();
if (selObj instanceof BrokerCObj) {
BrokerCObj bCObj = (BrokerCObj)selObj;
/*
* Not necessary since the broker should always be running
* or else exception must have been caught and have been taken care of.
* if (!isLatestBrokerAvailable(bCObj)) return;
*/
/*
* Refresh BrokerServiceListCObj and BrokerDestListCObj for
* this BrokerCObj.
*
* Refresh the destination list only if the service list refresh
* was successful.
*/
if (refreshBrokerServiceListCObj(bCObj.getBrokerServiceListCObj())) {
if (refreshBrokerDestListCObj(bCObj.getBrokerDestListCObj()))
app.getStatusArea().appendText(acr.getString(acr.S_BROKER_REFRESH,
bCObj.toString()));
}
} else if (selObj instanceof BrokerServiceListCObj) {
BrokerServiceListCObj bSvclCObj = (BrokerServiceListCObj)selObj;
BrokerCObj bCObj = bSvclCObj.getBrokerCObj();
/*
* Not necessary since the broker should always be running
* or else exception must have been caught and have been taken care of.
* if (!isLatestBrokerAvailable(bCObj)) return;
*/
if (refreshBrokerServiceListCObj(bSvclCObj))
app.getStatusArea().appendText(acr.getString(acr.S_BROKER_REFRESH_SVCLIST,
bCObj.toString()));
} else if (selObj instanceof BrokerServiceCObj) {
BrokerServiceCObj bSvcCObj = (BrokerServiceCObj)selObj;
BrokerCObj bCObj = bSvcCObj.getBrokerCObj();
BrokerServiceListCObj bSvclCObj = bCObj.getBrokerServiceListCObj();
/*
* Not necessary since the broker should always be running
* or else exception must have been caught and have been taken care of.
* if (!isLatestBrokerAvailable(bCObj)) return;
*/
if (refreshBrokerServiceListCObj(bSvclCObj))
app.getStatusArea().appendText(acr.getString(acr.S_BROKER_REFRESH_SVCLIST,
bCObj.toString()));
} else if (selObj instanceof BrokerDestListCObj) {
BrokerDestListCObj bDestlCObj = (BrokerDestListCObj)selObj;
BrokerCObj bCObj = bDestlCObj.getBrokerCObj();
/*
* Not necessary since the broker should always be running
* or else exception must have been caught and have been taken care of.
* if (!isLatestBrokerAvailable(bCObj)) return;
*/
if (refreshBrokerDestListCObj(bDestlCObj))
app.getStatusArea().appendText(
acr.getString(acr.S_BROKER_REFRESH_DESTLIST, bCObj.toString()));
} else if (selObj instanceof BrokerDestCObj) {
BrokerDestCObj bDestCObj = (BrokerDestCObj)selObj;
BrokerCObj bCObj = bDestCObj.getBrokerCObj();
BrokerDestListCObj bDestlCObj = bCObj.getBrokerDestListCObj();
/*
* Not necessary since the broker should always be running
* or else exception must have been caught and have been taken care of.
* if (!isLatestBrokerAvailable(bCObj)) return;
*/
if (refreshBrokerDestListCObj(bDestlCObj))
app.getStatusArea().appendText(acr.getString(acr.S_BROKER_REFRESH_DESTLIST,
bCObj.toString()));
}
}
private boolean isLatestBrokerAvailable(BrokerCObj bCObj) {
BrokerAdmin ba = bCObj.getBrokerAdmin();
/*
* Check to see if BrokerAdmin can connect to the broker by
* sending a hello message. It acts like a ping (verified w/ Joe.)
*/
try {
ba.sendHelloMessage();
ba.receiveHelloReplyMessage();
return true;
} catch (BrokerAdminException bae) {
JOptionPane.showOptionDialog(app.getFrame(),
acr.getString(acr.E_BROKER_NOT_CONNECTED, ba.getKey()) +
printBrokerAdminExceptionDetails(bae),
acr.getString(acr.I_BROKER_REFRESH) + ": " +
acr.getString(acr.I_ERROR_CODE,
AdminConsoleResources.E_BROKER_NOT_CONNECTED),
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, close, close[0]);
ba.setIsConnected(false);
bCObj.setBrokerProps(null);
/*
* Remove destinations and services from this broker's node
* hierarchy.
*/
clearBroker(bCObj);
app.getExplorer().nodeChanged((DefaultMutableTreeNode)bCObj);
app.getInspector().refresh();
// Update menu items, buttons.
controller.setActions(bCObj);
}
return false;
}
}