summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2005-10-14 22:04:20 +0000
committerBernard Normier <bernard@zeroc.com>2005-10-14 22:04:20 +0000
commit570f6c64743c1bb03f8f6860d721bff5591b849d (patch)
tree8df1b0d4bccb42ec1157faff816cc34f713aca74 /java/src
parentadding ReplicaGroupId, InstanceName (bug 480), misc. cleanup (diff)
downloadice-570f6c64743c1bb03f8f6860d721bff5591b849d.tar.bz2
ice-570f6c64743c1bb03f8f6860d721bff5591b849d.tar.xz
ice-570f6c64743c1bb03f8f6860d721bff5591b849d.zip
Fixes
Diffstat (limited to 'java/src')
-rwxr-xr-xjava/src/IceGrid/AdminGUI.java19
-rwxr-xr-xjava/src/IceGrid/RegistryObserverI.java1
-rwxr-xr-xjava/src/IceGrid/TreeNode/AbstractServerEditor.java11
-rwxr-xr-xjava/src/IceGrid/TreeNode/Adapter.java52
-rwxr-xr-xjava/src/IceGrid/TreeNode/AdapterEditor.java75
-rwxr-xr-xjava/src/IceGrid/TreeNode/PropertiesHolder.java25
-rwxr-xr-xjava/src/IceGrid/TreeNode/Root.java132
-rwxr-xr-xjava/src/IceGrid/TreeNode/Server.java274
8 files changed, 402 insertions, 187 deletions
diff --git a/java/src/IceGrid/AdminGUI.java b/java/src/IceGrid/AdminGUI.java
index df6240238ba..fefa4156720 100755
--- a/java/src/IceGrid/AdminGUI.java
+++ b/java/src/IceGrid/AdminGUI.java
@@ -35,13 +35,13 @@ public class AdminGUI extends JFrame
StatusBarI()
{
super(new BorderLayout());
- setBorder(new EmptyBorder(0, 10, 5, 10));
+ setBorder(new EmptyBorder(0, 5, 5, 10));
- _connected = Utils.getIcon("/icons/active.png");
- _disconnected = Utils.getIcon("/icons/destroyed.png");
+ _connected = Utils.getIcon("/icons/connect.gif");
+ _disconnected = Utils.getIcon("/icons/error_st_obj.gif");
_connectedLabel = new JLabel(_disconnected);
- _text = new JLabel("Starting up");
+ _text = new JLabel();
_text.setHorizontalAlignment(SwingConstants.LEFT);
JPanel leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
@@ -62,7 +62,16 @@ public class AdminGUI extends JFrame
public void setConnected(boolean connected)
{
- _connectedLabel.setIcon(connected ? _connected : _disconnected);
+ if(connected)
+ {
+ _connectedLabel.setIcon(_connected);
+ _text.setText("Connected");
+ }
+ else
+ {
+ _connectedLabel.setIcon(_disconnected);
+ _text.setText("Not connected");
+ }
}
JLabel _connectedLabel;
diff --git a/java/src/IceGrid/RegistryObserverI.java b/java/src/IceGrid/RegistryObserverI.java
index dfd0b8e8355..8d7a6b62e19 100755
--- a/java/src/IceGrid/RegistryObserverI.java
+++ b/java/src/IceGrid/RegistryObserverI.java
@@ -49,7 +49,6 @@ class RegistryObserverI extends _RegistryObserverDisp
if(_initialized)
{
_model.registryInit(_serial, _applications);
- _model.getStatusBar().setText("Connected; initialized (" + _serial + ")");
}
else
{
diff --git a/java/src/IceGrid/TreeNode/AbstractServerEditor.java b/java/src/IceGrid/TreeNode/AbstractServerEditor.java
index 43813792f92..d67c54f6dac 100755
--- a/java/src/IceGrid/TreeNode/AbstractServerEditor.java
+++ b/java/src/IceGrid/TreeNode/AbstractServerEditor.java
@@ -85,6 +85,11 @@ abstract class AbstractServerEditor extends Editor
}
model.setSelectionPath(_target.getPath());
model.showActions(_target);
+ //
+ // If this new server has a known state, display it
+ //
+ ((Server)_target).fireNodeChangedEvent(this);
+
}
else if(isSimpleUpdate())
{
@@ -151,6 +156,12 @@ abstract class AbstractServerEditor extends Editor
}
model.setSelectionPath(_target.getPath());
model.showActions(_target);
+
+ //
+ // If this server has a known state, display it
+ //
+ ((Server)_target).fireNodeChangedEvent(this);
+
}
_applyButton.setEnabled(false);
diff --git a/java/src/IceGrid/TreeNode/Adapter.java b/java/src/IceGrid/TreeNode/Adapter.java
index 915b22e4068..02551d1c0f6 100755
--- a/java/src/IceGrid/TreeNode/Adapter.java
+++ b/java/src/IceGrid/TreeNode/Adapter.java
@@ -118,10 +118,11 @@ class Adapter extends Leaf
// In a server instance
//
_adapterId = _resolver.substitute(_descriptor.id);
- _proxy = _model.getRoot().registerAdapter(_resolver.find("node"),
- _adapterId,
- this);
- createToolTip();
+ Ice.ObjectPrx proxy =
+ _model.getRoot().registerAdapter(_resolver.find("node"),
+ this);
+ setCurrentEndpoints(proxy);
+
//
// No need to fire an event since this node is not yet in the tree
//
@@ -142,7 +143,7 @@ class Adapter extends Leaf
if(_adapterId != null)
{
_model.getRoot().unregisterAdapter(_resolver.find("node"),
- _adapterId, this);
+ this);
}
super.clearParent();
}
@@ -194,9 +195,7 @@ class Adapter extends Leaf
void updateProxy(Ice.ObjectPrx proxy)
{
- assert _resolver != null;
- _proxy = proxy;
- createToolTip();
+ setCurrentEndpoints(proxy);
fireNodeChangedEvent(this);
}
@@ -224,19 +223,19 @@ class Adapter extends Leaf
return ((Adapters)_parent).inIceBox();
}
- String getEndpoints()
+ String getProperty(String property)
{
PropertiesHolder ph = getParent().getParent().getPropertiesHolder();
assert ph != null;
- return ph.get(_descriptor.name + ".Endpoints");
+ return ph.get(_descriptor.name + "." + property);
}
- void setEndpoints(String newName, String newEndpoints)
+ void setProperty(String property, String newName, String newValue)
{
PropertiesHolder ph = getParent().getParent().getPropertiesHolder();
assert ph != null;
- ph.replace(_descriptor.name + ".Endpoints", newName + ".Endpoints",
- newEndpoints);
+ ph.replace(_descriptor.name + "." + property,
+ newName + "." + property, newValue);
}
String getAdapterId()
@@ -249,22 +248,37 @@ class Adapter extends Leaf
return _defaultAdapterId;
}
+ String getCurrentEndpoints()
+ {
+ return _currentEndpoints;
+ }
+
public boolean isEphemeral()
{
return _ephemeral;
}
-
- private void createToolTip()
+ private void setCurrentEndpoints(Ice.ObjectPrx proxy)
{
- if(_proxy == null)
+ if(proxy == null)
{
- _toolTip = null;
+ _currentEndpoints = "";
+ _toolTip = "Inactive";
}
else
{
- _toolTip = "Proxy: " + _model.getCommunicator().proxyToString(_proxy);
+ String str = _model.getCommunicator().proxyToString(proxy);
+ int index = str.indexOf(':');
+ if(index == -1 || index == str.length() - 1)
+ {
+ _currentEndpoints = "";
+ }
+ else
+ {
+ _currentEndpoints = str.substring(index + 1);
+ }
+ _toolTip = "Current endpoints: " + _currentEndpoints;
}
}
@@ -272,7 +286,7 @@ class Adapter extends Leaf
private AdapterDescriptor _descriptor;
private Utils.Resolver _resolver;
- private Ice.ObjectPrx _proxy;
+ private String _currentEndpoints;
private String _toolTip;
private String _adapterId; // resolved adapter id, null when _resolver == null
diff --git a/java/src/IceGrid/TreeNode/AdapterEditor.java b/java/src/IceGrid/TreeNode/AdapterEditor.java
index c30fd52c851..4a3378f9d93 100755
--- a/java/src/IceGrid/TreeNode/AdapterEditor.java
+++ b/java/src/IceGrid/TreeNode/AdapterEditor.java
@@ -37,7 +37,8 @@ class AdapterEditor extends ListElementEditor
AdapterEditor(JFrame parentFrame)
{
_objects.setEditable(false);
-
+ _currentEndpoints.setEditable(false);
+
//
// Create buttons
//
@@ -136,7 +137,11 @@ class AdapterEditor extends ListElementEditor
JTextField replicaGroupIdTextField = (JTextField)
_replicaGroupId.getEditor().getEditorComponent();
- replicaGroupIdTextField.getDocument().addDocumentListener(_updateListener);
+ replicaGroupIdTextField.getDocument().addDocumentListener(_updateListener);
+
+ JTextField publishedEndpointsTextField = (JTextField)
+ _publishedEndpoints.getEditor().getEditorComponent();
+ publishedEndpointsTextField.getDocument().addDocumentListener(_updateListener);
}
@@ -194,10 +199,6 @@ class AdapterEditor extends ListElementEditor
builder.append(_replicaGroupButton);
builder.nextLine();
- builder.append("Endpoints" );
- builder.append(_endpoints, 3);
- builder.nextLine();
-
builder.append("Registered Objects");
builder.append(_objects, _objectsButton);
builder.nextLine();
@@ -206,6 +207,19 @@ class AdapterEditor extends ListElementEditor
builder.nextLine();
builder.append("", _waitForActivation);
builder.nextLine();
+
+ builder.appendSeparator("Endpoints");
+ builder.append("Definition" );
+ builder.append(_endpoints, 3);
+ builder.nextLine();
+
+ builder.append("Published" );
+ builder.append(_publishedEndpoints, 3);
+ builder.nextLine();
+
+ builder.append("Current Value" );
+ builder.append(_currentEndpoints, 3);
+ builder.nextLine();
}
void postUpdate()
@@ -213,7 +227,21 @@ class AdapterEditor extends ListElementEditor
//
// Change enclosing properties after successful update
//
- getAdapter().setEndpoints(_name.getText(), _endpoints.getText());
+ getAdapter().setProperty("Endpoints", _name.getText(),
+ _endpoints.getText());
+
+ Object published = _publishedEndpoints.getSelectedItem();
+ if(published == PUBLISH_ACTUAL)
+ {
+ getAdapter().setProperty("PublishedEndpoints", _name.getText(),
+ "");
+ }
+ else
+ {
+ getAdapter().setProperty("PublishedEndpoints", _name.getText(),
+ published.toString());
+
+ }
}
void setObjectsField()
@@ -379,9 +407,26 @@ class AdapterEditor extends ListElementEditor
_replicaGroupId.setEditable(isEditable);
_endpoints.setText(
- Utils.substitute(adapter.getEndpoints(), resolver));
+ Utils.substitute(adapter.getProperty("Endpoints"), resolver));
_endpoints.setEditable(isEditable);
+ _publishedEndpoints.setEnabled(true);
+ _publishedEndpoints.setEditable(true);
+ String published =
+ Utils.substitute(adapter.getProperty("PublishedEndpoints"), resolver);
+ if(published == null || published.equals(""))
+ {
+ _publishedEndpoints.setSelectedItem(PUBLISH_ACTUAL);
+ }
+ else
+ {
+ _publishedEndpoints.setSelectedItem(published);
+ }
+ _publishedEndpoints.setEnabled(isEditable);
+ _publishedEndpoints.setEditable(isEditable);
+
+ _currentEndpoints.setText(adapter.getCurrentEndpoints());
+
//
// Objects
//
@@ -440,6 +485,12 @@ class AdapterEditor extends ListElementEditor
private JButton _replicaGroupButton;
private JTextField _endpoints = new JTextField(20);
+ private JComboBox _publishedEndpoints = new JComboBox(
+ new Object[]{PUBLISH_ACTUAL});
+ private JTextField _currentEndpoints = new JTextField(20);
+
+
+
private JCheckBox _registerProcess;
private JCheckBox _waitForActivation;
@@ -448,6 +499,14 @@ class AdapterEditor extends ListElementEditor
private TableDialog _objectsDialog;
private JButton _objectsButton;
+ static private final Object PUBLISH_ACTUAL = new Object()
+ {
+ public String toString()
+ {
+ return "Actual endpoints";
+ }
+ };
+
static private final Object DIRECT_ADAPTER = new Object()
{
public String toString()
diff --git a/java/src/IceGrid/TreeNode/PropertiesHolder.java b/java/src/IceGrid/TreeNode/PropertiesHolder.java
index 4e1de9ef5c6..a35d3e931d5 100755
--- a/java/src/IceGrid/TreeNode/PropertiesHolder.java
+++ b/java/src/IceGrid/TreeNode/PropertiesHolder.java
@@ -40,18 +40,35 @@ class PropertiesHolder
//
// Each PropertyDescriptor is considered immutable: so always remove + put
//
+ boolean oldKeyRemoved = false;
+ boolean newKeyRemoved = false;
+ if(oldKey.equals(newKey))
+ {
+ oldKeyRemoved = true;
+ }
+
java.util.Iterator p = _descriptor.properties.iterator();
- while(p.hasNext())
+ while(p.hasNext() && (!oldKeyRemoved || !newKeyRemoved))
{
PropertyDescriptor pd = (PropertyDescriptor)p.next();
- if(pd.name.equals(oldKey))
+
+ if(!oldKeyRemoved && pd.name.equals(oldKey))
{
p.remove();
- break; // done
+ oldKeyRemoved = true;
+ }
+ else if(!newKeyRemoved && pd.name.equals(newKey))
+ {
+ p.remove();
+ newKeyRemoved = true;
}
}
+
- _descriptor.properties.add(new PropertyDescriptor(newKey, newValue));
+ if(!newValue.equals(""))
+ {
+ _descriptor.properties.add(new PropertyDescriptor(newKey, newValue));
+ }
}
private CommunicatorDescriptor _descriptor;
}
diff --git a/java/src/IceGrid/TreeNode/Root.java b/java/src/IceGrid/TreeNode/Root.java
index f342f67f31e..3730d502ea3 100755
--- a/java/src/IceGrid/TreeNode/Root.java
+++ b/java/src/IceGrid/TreeNode/Root.java
@@ -33,8 +33,7 @@ public class Root extends Parent
// AdapterId to Ice.ObjectPrx
//
java.util.Map adapterInfoMap = new java.util.HashMap();
- };
-
+ }
public void paste()
{
@@ -166,8 +165,6 @@ public class Root extends Parent
for(int i = 0; i < updatedInfo.servers.length; ++i)
{
- assert(updatedInfo.servers[i].state != ServerState.Destroyed);
- assert(updatedInfo.servers[i].state != ServerState.Inactive);
info.serverInfoMap.put(updatedInfo.servers[i].id, updatedInfo.servers[i]);
}
@@ -191,11 +188,12 @@ public class Root extends Parent
info.serverInfoMap.get(server.getId());
if(serverInfo == null)
{
- server.updateDynamicInfo(ServerState.Inactive, 0);
+ server.updateDynamicInfo(ServerState.Inactive, 0, true);
}
else
{
- server.updateDynamicInfo(serverInfo.state, serverInfo.pid);
+ server.updateDynamicInfo(serverInfo.state,
+ serverInfo.pid, serverInfo.enabled);
}
}
}
@@ -238,7 +236,7 @@ public class Root extends Parent
while(p.hasNext())
{
Server server = (Server)p.next();
- server.updateDynamicInfo(null, 0);
+ server.updateDynamicInfo(null, 0, true);
}
}
@@ -266,56 +264,47 @@ public class Root extends Parent
return _dynamicInfoMap.keySet();
}
- ServerState registerServer(String nodeName, String serverId, Server server,
- Ice.IntHolder pid)
+ ServerState registerServer(String nodeName, Server server,
+ Ice.IntHolder pid, Ice.BooleanHolder enabled)
{
- java.util.List serverList = (java.util.List)_serverMap.get(serverId);
-
- if(serverList == null)
- {
- serverList = new java.util.LinkedList();
- _serverMap.put(serverId, serverList);
- }
- serverList.add(server);
-
- serverList = (java.util.List)_nodeServerMap.get(nodeName);
+ java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
if(serverList == null)
{
serverList = new java.util.LinkedList();
_nodeServerMap.put(nodeName, serverList);
}
serverList.add(server);
-
+
DynamicInfo info = (DynamicInfo)_dynamicInfoMap.get(nodeName);
if(info == null)
{
// Node is down
pid.value = 0;
+ enabled.value = true;
return null;
}
else
{
ServerDynamicInfo serverInfo =
- (ServerDynamicInfo)info.serverInfoMap.get(serverId);
+ (ServerDynamicInfo)info.serverInfoMap.get(server.getId());
if(serverInfo == null)
{
pid.value = 0;
+ enabled.value = true;
return ServerState.Inactive;
}
else
{
pid.value = serverInfo.pid;
+ enabled.value = serverInfo.enabled;
return serverInfo.state;
}
}
}
- void unregisterServer(String nodeName, String serverId, Server server)
+ void unregisterServer(String nodeName, Server server)
{
- java.util.List serverList = (java.util.List)_serverMap.get(serverId);
- serverList.remove(server);
-
- serverList = (java.util.List)_nodeServerMap.get(nodeName);
+ java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
serverList.remove(server);
}
@@ -326,35 +315,37 @@ public class Root extends Parent
//
DynamicInfo info = (DynamicInfo)_dynamicInfoMap.get(nodeName);
assert info != null;
- info.serverInfoMap.put(updatedInfo.id, updatedInfo);
+
+ if((updatedInfo.state == ServerState.Destroyed ||
+ updatedInfo.state == ServerState.Inactive) && updatedInfo.enabled)
+ {
+ info.serverInfoMap.remove(updatedInfo.id);
+ }
+ else
+ {
+ info.serverInfoMap.put(updatedInfo.id, updatedInfo);
+ }
+
+ java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
- java.util.List serverList = (java.util.List)_serverMap.get(updatedInfo.id);
if(serverList != null)
{
java.util.Iterator p = serverList.iterator();
while(p.hasNext())
{
Server server = (Server)p.next();
- server.updateDynamicInfo(updatedInfo.state, updatedInfo.pid);
+ if(server.getId().equals(updatedInfo.id))
+ {
+ server.updateDynamicInfo(updatedInfo.state,
+ updatedInfo.pid, updatedInfo.enabled);
+ }
}
}
}
-
-
- Ice.ObjectPrx registerAdapter(String nodeName, String adapterId,
- Adapter adapter)
+ Ice.ObjectPrx registerAdapter(String nodeName, Adapter adapter)
{
- java.util.List adapterList = (java.util.List)_adapterMap.get(adapterId);
-
- if(adapterList == null)
- {
- adapterList = new java.util.LinkedList();
- _adapterMap.put(adapterId, adapterList);
- }
- adapterList.add(adapter);
-
- adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
+ java.util.List adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
if(adapterList == null)
{
adapterList = new java.util.LinkedList();
@@ -370,19 +361,13 @@ public class Root extends Parent
}
else
{
- return (Ice.ObjectPrx)info.adapterInfoMap.get(adapterId);
+ return (Ice.ObjectPrx)info.adapterInfoMap.get(adapter.getAdapterId());
}
}
- void unregisterAdapter(String nodeName,
- String adapterId,
- Adapter adapter)
+ void unregisterAdapter(String nodeName, Adapter adapter)
{
- java.util.List adapterList = (java.util.List)_adapterMap.
- get(adapterId);
- adapterList.remove(adapter);
-
- adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
+ java.util.List adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
adapterList.remove(adapter);
}
@@ -396,13 +381,20 @@ public class Root extends Parent
assert info != null;
info.adapterInfoMap.put(updatedInfo.id, updatedInfo.proxy);
- //
- // Is this Adapter registered?
- //
- Adapter adapter = (Adapter)_adapterMap.get(updatedInfo.id);
- if(adapter != null)
+ java.util.List adapterList =
+ (java.util.List)_nodeAdapterMap.get(nodeName);
+
+ if(adapterList != null)
{
- adapter.updateProxy(updatedInfo.proxy);
+ java.util.Iterator p = adapterList.iterator();
+ while(p.hasNext())
+ {
+ Adapter adapter = (Adapter)p.next();
+ if(adapter.getAdapterId().equals(updatedInfo.id))
+ {
+ adapter.updateProxy(updatedInfo.proxy);
+ }
+ }
}
}
@@ -443,26 +435,18 @@ public class Root extends Parent
private java.util.Map _dynamicInfoMap = new java.util.HashMap();
//
- // AdapterId to list of Adapters
- // The registry enforces a single adapter per adapterId;
- // however in order to support copy & paste, we can have temporarily
- // an inconsistency: several adapters with the same xid.
- //
- private java.util.Map _adapterMap = new java.util.HashMap();
-
- //
- // Nodename to list of Adapter (used when a node goes down)
+ // Nodename to list of Adapters
+ // Note that we can have several adapters with the same id
+ // even on the same node
+ // (a temporary inconsistency to support copy/paste)
//
private java.util.Map _nodeAdapterMap = new java.util.HashMap();
//
- // ServerId to list of Servers
- // See _adapterMap comment above
- //
- private java.util.Map _serverMap = new java.util.HashMap();
-
- //
- // Nodename to list of Server (used when a node goes down)
+ // Nodename to list of Servers
+ // Note that we can have several servers with the same id
+ // even on the same node (but in different applications)
+ // (a temporary inconsistency to support copy/paste)
//
private java.util.Map _nodeServerMap = new java.util.HashMap();
diff --git a/java/src/IceGrid/TreeNode/Server.java b/java/src/IceGrid/TreeNode/Server.java
index 170ed37b260..5ae524ede47 100755
--- a/java/src/IceGrid/TreeNode/Server.java
+++ b/java/src/IceGrid/TreeNode/Server.java
@@ -14,10 +14,16 @@ import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
+import javax.swing.SwingUtilities;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.DefaultTreeCellRenderer;
+import IceGrid.AMI_Admin_startServer;
+import IceGrid.AMI_Admin_stopServer;
+import IceGrid.AMI_Admin_enableServer;
+import IceGrid.AMI_Admin_patchServer;
+
import IceGrid.AdapterDescriptor;
import IceGrid.DistributionDescriptor;
import IceGrid.IceBoxDescriptor;
@@ -157,16 +163,21 @@ class Server extends EditableParent
actions[DELETE] = true;
actions[SUBSTITUTE_VARS] = true;
- actions[START] = getState() == ServerState.Inactive
- && _enabled;
- actions[STOP] = getState() != ServerState.Inactive;
- actions[ENABLE] = !_enabled;
- actions[DISABLE] = _enabled;
- if(!_model.isUpdateInProgress())
+ ServerState state = getState();
+ if(state != null)
{
- actions[SERVER_INSTALL_DISTRIBUTION] =
- !_serverDescriptor.distrib.icepatch.equals("");
+ actions[START] = state == ServerState.Inactive
+ && _enabled;
+ actions[STOP] = state != ServerState.Inactive;
+ actions[ENABLE] = true || !_enabled;
+ actions[DISABLE] = true || _enabled;
+
+ if(!_model.isUpdateInProgress())
+ {
+ actions[SERVER_INSTALL_DISTRIBUTION] =
+ !_serverDescriptor.distrib.icepatch.equals("");
+ }
}
return actions;
@@ -202,90 +213,205 @@ class Server extends EditableParent
{
_parent.paste();
}
+
public void start()
{
- //
- // TODO: if this can take a long time, make the invocation in a separate thread
- //
+ final String prefix = "Starting server '" + _id + "'...";
+ _model.getStatusBar().setText(prefix);
+
+ AMI_Admin_startServer cb = new AMI_Admin_startServer()
+ {
+ //
+ // Called by another thread!
+ //
+ public void ice_response(boolean result)
+ {
+ if(result)
+ {
+ amiSuccess(prefix);
+ }
+ else
+ {
+ amiFailure(prefix, null, (String)null);
+ }
+ }
+
+ public void ice_exception(Ice.UserException e)
+ {
+ amiFailure(prefix, "Failed to start " + _id, e);
+ }
- boolean started = false;
+ public void ice_exception(Ice.LocalException e)
+ {
+ amiFailure(prefix, "Failed to start " + _id, e.toString());
+ }
+ };
+
try
- {
- _model.getStatusBar().setText("Starting server '" + _id + "'...");
- started = _model.getAdmin().startServer(_id);
- }
- catch(IceGrid.ServerNotExistException e)
- {
- _model.getStatusBar().setText("Server '" + _id + "' no longer exists.");
- }
- catch(IceGrid.NodeUnreachableException e)
- {
- _model.getStatusBar().setText("Could not reach the node for server '" + _id
- + "'.");
+ {
+ _model.getAdmin().startServer_async(cb, _id);
}
catch(Ice.LocalException e)
{
- _model.getStatusBar().setText("Starting server '" + _id + "'... failed: "
- + e.toString());
- }
- if(started)
- {
- _model.getStatusBar().setText("Starting server '" + _id + "'... success!");
- }
- else
- {
- _model.getStatusBar().setText("Starting server '" + _id + "'... failed!");
+ failure(prefix, "Failed to start " + _id, e.toString());
}
-
+
//
// Recompute actions in case this comes from popup menu
//
_model.showActions(_model.getSelectedNode());
-
}
+
public void stop()
{
+ final String prefix = "Stopping server '" + _id + "'...";
+ _model.getStatusBar().setText(prefix);
+
+ AMI_Admin_stopServer cb = new AMI_Admin_stopServer()
+ {
+ //
+ // Called by another thread!
+ //
+ public void ice_response()
+ {
+ amiSuccess(prefix);
+ }
+
+ public void ice_exception(Ice.UserException e)
+ {
+ amiFailure(prefix, "Failed to stop " + _id, e);
+ }
+
+ public void ice_exception(Ice.LocalException e)
+ {
+ amiFailure(prefix, "Failed to stop " + _id, e.toString());
+ }
+ };
+
try
- {
- _model.getStatusBar().setText("Stopping server '" + _id + "'...");
- _model.getAdmin().stopServer(_id);
- }
- catch(IceGrid.ServerNotExistException e)
- {
- _model.getStatusBar().setText("Server '" + _id + "' no longer exists.");
- }
- catch(IceGrid.NodeUnreachableException e)
- {
- _model.getStatusBar().setText("Could not reach the node for server '"
- + _id + "'.");
+ {
+ _model.getAdmin().stopServer_async(cb, _id);
}
catch(Ice.LocalException e)
{
- _model.getStatusBar().setText("Stopping server '" + _id + "'... failed: "
- + e.toString());
+ failure(prefix, "Failed to stop " + _id, e.toString());
}
- _model.getStatusBar().setText("Stopping server '" + _id + "'... done.");
-
+
//
// Recompute actions in case this comes from popup menu
//
_model.showActions(_model.getSelectedNode());
}
+
public void enable()
{
- //
- // Recompute actions in case this comes from popup menu
- //
- _model.showActions(_model.getSelectedNode());
+ enableServer(true);
}
+
public void disable()
{
+ enableServer(false);
+ }
+
+ private void amiSuccess(final String prefix)
+ {
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ _model.getStatusBar().setText(prefix + "done.");
+ }
+ });
+ }
+
+ private void amiFailure(String prefix, String title, Ice.UserException e)
+ {
+ if(e instanceof IceGrid.ServerNotExistException)
+ {
+ amiFailure(prefix, title, "This server was not registered with the IceGrid Registry");
+ }
+ else if(e instanceof IceGrid.NodeUnreachableException)
+ {
+ IceGrid.NodeUnreachableException nue = (IceGrid.NodeUnreachableException)e;
+ amiFailure(prefix, title, "Node '" + nue.name + "' is unreachable: " + nue.reason);
+ }
+ else
+ {
+ amiFailure(prefix, title, e.toString());
+ }
+ }
+
+ private void amiFailure(final String prefix, final String title, final String message)
+ {
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ failure(prefix, title, message);
+ }
+ });
+ }
+
+ private void failure(String prefix, String title, String message)
+ {
+ _model.getStatusBar().setText(prefix + "failed!");
+ if(message != null)
+ {
+ JOptionPane.showMessageDialog(
+ _model.getMainFrame(),
+ message,
+ title,
+ JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+
+ private void enableServer(boolean enable)
+ {
+ final String prefix = (enable ?
+ "Enabling" : "Disabling") + " server '" + _id + "'...";
+
+ final String action = enable ? "enable" : "disable";
+
+ _model.getStatusBar().setText(prefix);
+
+ AMI_Admin_enableServer cb = new AMI_Admin_enableServer()
+ {
+ //
+ // Called by another thread!
+ //
+ public void ice_response()
+ {
+ amiSuccess(prefix);
+ }
+
+ public void ice_exception(Ice.UserException e)
+ {
+ amiFailure(prefix, "Failed to " + action + " " + _id, e);
+ }
+
+ public void ice_exception(Ice.LocalException e)
+ {
+ amiFailure(prefix, "Failed to " + action + " " + _id, e.toString());
+ }
+ };
+
+ try
+ {
+ _model.getAdmin().enableServer_async(cb, _id, enable);
+ }
+ catch(Ice.LocalException e)
+ {
+ failure(prefix, "Failed to " + action + " " + _id, e.toString());
+ }
+
//
// Recompute actions in case this comes from popup menu
//
_model.showActions(_model.getSelectedNode());
+
}
-
+
public void displayProperties()
{
SimpleInternalFrame propertiesFrame = _model.getPropertiesFrame();
@@ -458,13 +584,6 @@ class Server extends EditableParent
super(brandNew, serverId, application.getModel());
_ephemeral = false;
rebuild(resolver, instanceDescriptor, serverDescriptor, application);
-
- if(brandNew)
- {
- _state = ServerState.Inactive;
- _toolTip = toolTip(_state, _pid);
- _stateIconIndex = _state.value() + 1;
- }
}
Server(String serverId, ServerInstanceDescriptor instanceDescriptor,
@@ -480,10 +599,6 @@ class Server extends EditableParent
{
assert false;
}
-
- _state = ServerState.Inactive;
- _toolTip = toolTip(_state, _pid);
- _stateIconIndex = _state.value() + 1;
}
//
@@ -553,13 +668,14 @@ class Server extends EditableParent
if(!_ephemeral)
{
Ice.IntHolder pid = new Ice.IntHolder();
+ Ice.BooleanHolder enabled = new Ice.BooleanHolder();
_state = _model.getRoot().registerServer(_resolver.find("node"),
- _id,
this,
- pid);
+ pid, enabled);
_pid = pid.value;
- _toolTip = toolTip(_state, _pid);
+ _enabled = enabled.value;
+ _toolTip = toolTip(_state, _pid, _enabled);
if(_state != null)
{
_stateIconIndex = _state.value() + 1;
@@ -575,7 +691,7 @@ class Server extends EditableParent
if(!_ephemeral)
{
_model.getRoot().unregisterServer(_resolver.find("node"),
- _id, this);
+ this);
}
super.clearParent();
}
@@ -602,14 +718,15 @@ class Server extends EditableParent
}
- void updateDynamicInfo(ServerState state, int pid)
+ void updateDynamicInfo(ServerState state, int pid, boolean enabled)
{
- if(state != _state || pid != _pid)
+ if(state != _state || pid != _pid || enabled != _enabled)
{
_state = state;
_pid = pid;
+ _enabled = enabled;
- _toolTip = toolTip(_state, _pid);
+ _toolTip = toolTip(_state, _pid, _enabled);
_stateIconIndex = _state.value() + 1;
//
@@ -678,9 +795,14 @@ class Server extends EditableParent
}
}
- static private String toolTip(ServerState state, int pid)
+ static private String toolTip(ServerState state, int pid, boolean enabled)
{
String result = (state == null ? "Unknown" : state.toString());
+
+ if(!enabled)
+ {
+ result += ", disabled";
+ }
if(pid != 0)
{