summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2006-10-18 15:31:40 +0000
committerBernard Normier <bernard@zeroc.com>2006-10-18 15:31:40 +0000
commit69c99ec49155767c56e9d7e041a802f3adf0a806 (patch)
treed044245599997c901aece021b017d80b56810b5d /java
parentRemoved nonmutating metadata from new operations (diff)
downloadice-69c99ec49155767c56e9d7e041a802f3adf0a806.tar.bz2
ice-69c99ec49155767c56e9d7e041a802f3adf0a806.tar.xz
ice-69c99ec49155767c56e9d7e041a802f3adf0a806.zip
Support for replicated registries
Diffstat (limited to 'java')
-rw-r--r--java/build.xml1
-rwxr-xr-xjava/src/IceGridGUI/Coordinator.java164
-rwxr-xr-xjava/src/IceGridGUI/LiveActions.java8
-rwxr-xr-xjava/src/IceGridGUI/LiveDeployment/Root.java79
-rwxr-xr-xjava/src/IceGridGUI/LiveDeployment/TreeNode.java12
-rwxr-xr-xjava/src/IceGridGUI/RegistryObserverI.java43
-rwxr-xr-xjava/src/IceGridGUI/SessionKeeper.java40
7 files changed, 236 insertions, 111 deletions
diff --git a/java/build.xml b/java/build.xml
index 2246591cf31..6f349e836c1 100644
--- a/java/build.xml
+++ b/java/build.xml
@@ -111,6 +111,7 @@
<include name="Exception.ice" />
<include name="FileParser.ice"/>
<include name="Observer.ice" />
+ <include name="PerfTypes.ice" />
<include name="Locator.ice" />
<include name="Query.ice" />
<include name="Registry.ice" />
diff --git a/java/src/IceGridGUI/Coordinator.java b/java/src/IceGridGUI/Coordinator.java
index 37b042a6dae..a21a0c291a9 100755
--- a/java/src/IceGridGUI/Coordinator.java
+++ b/java/src/IceGridGUI/Coordinator.java
@@ -247,6 +247,8 @@ public class Coordinator
_registryMenu.setEnabled(false);
toolsMenu.add(_registryMenu);
_registryMenu.add(_liveActionsForMenu.get(IceGridGUI.LiveDeployment.TreeNode.ADD_OBJECT));
+ _registryMenu.addSeparator();
+ _registryMenu.add(_liveActionsForMenu.get(IceGridGUI.LiveDeployment.TreeNode.SHUTDOWN_REGISTRY));
//
// Server sub-menu
@@ -745,6 +747,22 @@ public class Coordinator
}
}
+
+ //
+ // From the Registry observer:
+ //
+ void registryUp(RegistryInfo info)
+ {
+ _liveDeploymentRoot.registryUp(info);
+ _liveDeploymentPane.refresh();
+ }
+
+ void registryDown(String registry)
+ {
+ _liveDeploymentRoot.registryDown(registry);
+ _liveDeploymentPane.refresh();
+ }
+
//
// From the Node observer:
//
@@ -804,7 +822,8 @@ public class Coordinator
_saveToRegistry.setEnabled(false);
}
- AdminSessionPrx login(SessionKeeper.LoginInfo info, Component parent)
+ AdminSessionPrx login(SessionKeeper.LoginInfo info, Component parent,
+ Ice.LongHolder keepAlivePeriodHolder)
{
_liveDeploymentRoot.clear();
@@ -849,7 +868,6 @@ public class Coordinator
// Router
//
-
Ice.Identity routerId = new Ice.Identity();
routerId.category = info.routerInstanceName;
routerId.name = "router";
@@ -911,6 +929,9 @@ public class Coordinator
}
session = AdminSessionPrxHelper.uncheckedCast(s);
+ keepAlivePeriodHolder.value = router.getSessionTimeout() * 1000 / 2;
+ _statusBar.setText("Routed session established");
+
}
catch(Glacier2.PermissionDeniedException e)
{
@@ -946,6 +967,17 @@ public class Coordinator
}
else
{
+ if(info.registryEndpoints.equals(""))
+ {
+ JOptionPane.showMessageDialog(
+ parent,
+ "You need to provide one or more endpoint for the Registry",
+ "Login failed",
+ JOptionPane.ERROR_MESSAGE);
+
+ return null;
+ }
+
//
// The client uses the locator only without routing
//
@@ -953,15 +985,16 @@ public class Coordinator
locatorId.category = info.registryInstanceName;
locatorId.name = "Locator";
String str = "\"" + _communicator.identityToString(locatorId) + "\"";
- if(!info.registryEndpoints.equals(""))
- {
- str += ":" + info.registryEndpoints;
- }
+ str += ":" + info.registryEndpoints;
+ RegistryPrx localRegistry = null;
+
try
{
- Ice.LocatorPrx defaultLocator = Ice.LocatorPrxHelper.
- checkedCast(_communicator.stringToProxy(str));
+ IceGrid.LocatorPrx defaultLocator = IceGrid.LocatorPrxHelper.
+ uncheckedCast(_communicator.stringToProxy(str));
+ localRegistry = defaultLocator.getLocalRegistry();
+
_communicator.setDefaultLocator(defaultLocator);
}
catch(Ice.LocalException e)
@@ -974,50 +1007,92 @@ public class Coordinator
return null;
}
- //
- // Local session
- //
- Ice.Identity registryId = new Ice.Identity();
- registryId.category = info.registryInstanceName;
- registryId.name = "Registry";
-
- RegistryPrx registry = RegistryPrxHelper.
- uncheckedCast(_communicator.stringToProxy("\"" + _communicator.identityToString(registryId) + "\""));
+ RegistryPrx registry = localRegistry;
+
+ if(info.connectToMaster)
+ {
+ Ice.Identity masterRegistryId = new Ice.Identity();
+ masterRegistryId.category = info.registryInstanceName;
+ masterRegistryId.name = "Registry";
+
+ registry = RegistryPrxHelper.
+ uncheckedCast(_communicator.stringToProxy("\"" +
+ _communicator.identityToString(masterRegistryId) + "\""));
+ }
- try
+ do
{
- if(info.registryUseSSL)
+ try
{
- registry = RegistryPrxHelper.
- uncheckedCast(registry.ice_secure(true));
-
- session = AdminSessionPrxHelper.uncheckedCast(
- registry.createAdminSessionFromSecureConnection());
+ if(info.registryUseSSL)
+ {
+ registry = RegistryPrxHelper.
+ uncheckedCast(registry.ice_secure(true));
+
+ session = registry.createAdminSessionFromSecureConnection();
+ assert session != null;
+ }
+ else
+ {
+ session = registry.createAdminSession(info.registryUsername,
+ new String(info.registryPassword));
+ assert session != null;
+ }
+ keepAlivePeriodHolder.value = registry.getSessionTimeout() * 1000 / 2;
}
- else
+ catch(IceGrid.PermissionDeniedException e)
{
- session = AdminSessionPrxHelper.uncheckedCast(
- registry.createAdminSession(info.registryUsername,
- new String(info.registryPassword)));
+ JOptionPane.showMessageDialog(parent,
+ "Permission denied: "
+ + e.reason,
+ "Login failed",
+ JOptionPane.ERROR_MESSAGE);
+ return null;
}
- }
- catch(IceGrid.PermissionDeniedException e)
+ catch(Ice.LocalException e)
+ {
+ if(registry.ice_getIdentity().equals(localRegistry.ice_getIdentity()))
+ {
+ JOptionPane.showMessageDialog(parent,
+ "Could not create session: "
+ + e.toString(),
+ "Login failed",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ else
+ {
+ if(JOptionPane.showConfirmDialog(
+ parent,
+ "Unable to connect to the Master Registry; do you want to connect to a Slave Registry?",
+ "Master Registry down",
+ JOptionPane.YES_NO_OPTION,
+ JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION)
+ {
+
+ registry = localRegistry;
+ }
+ else
+ {
+ return null;
+ }
+ }
+ }
+ } while(session == null);
+
+ if(registry.ice_getIdentity().name.equals("Registry"))
{
- JOptionPane.showMessageDialog(parent,
- "Permission denied: "
- + e.reason,
- "Login failed",
- JOptionPane.ERROR_MESSAGE);
- return null;
+ _statusBar.setText("Logged into Master Registry");
}
- catch(Ice.LocalException e)
+ else
{
- JOptionPane.showMessageDialog(parent,
- "Could not create session: "
- + e.toString(),
- "Login failed",
- JOptionPane.ERROR_MESSAGE);
- return null;
+ String name = registry.ice_getIdentity().name;
+ String prefix = "Registry-";
+ if(name.startsWith(prefix))
+ {
+ name = name.substring(prefix.length());
+ }
+
+ _statusBar.setText("Logged into Slave Registry '" + name + "'");
}
}
@@ -1887,7 +1962,8 @@ public class Coordinator
availableActions[IceGridGUI.LiveDeployment.TreeNode.SHUTDOWN_NODE]);
_registryMenu.setEnabled(
- availableActions[IceGridGUI.LiveDeployment.TreeNode.ADD_OBJECT]);
+ availableActions[IceGridGUI.LiveDeployment.TreeNode.ADD_OBJECT] ||
+ availableActions[IceGridGUI.LiveDeployment.TreeNode.SHUTDOWN_REGISTRY]);
_serverMenu.setEnabled(
availableActions[IceGridGUI.LiveDeployment.TreeNode.START] ||
diff --git a/java/src/IceGridGUI/LiveActions.java b/java/src/IceGridGUI/LiveActions.java
index 27194bfa333..d2eaee0832a 100755
--- a/java/src/IceGridGUI/LiveActions.java
+++ b/java/src/IceGridGUI/LiveActions.java
@@ -102,6 +102,14 @@ public class LiveActions
_target.shutdownNode();
}
};
+
+ _array[TreeNode.SHUTDOWN_REGISTRY] = new AbstractAction("Shutdown")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ _target.shutdownRegistry();
+ }
+ };
_array[TreeNode.PATCH_SERVER] =
new AbstractAction("Patch distribution")
diff --git a/java/src/IceGridGUI/LiveDeployment/Root.java b/java/src/IceGridGUI/LiveDeployment/Root.java
index 27336574fee..6b5eafb78e1 100755
--- a/java/src/IceGridGUI/LiveDeployment/Root.java
+++ b/java/src/IceGridGUI/LiveDeployment/Root.java
@@ -28,12 +28,14 @@ import IceGridGUI.*;
//
// The Root node of the Live Deployment view
//
-public class Root extends ListTreeNode
+public class Root extends ListArrayTreeNode
{
public Root(Coordinator coordinator)
{
- super(null, "Root");
+ super(null, "Root", 2);
_coordinator = coordinator;
+ _childrenArray[0] = _registries;
+ _childrenArray[1] = _nodes;
_tree = new JTree(this, true);
_treeModel = (DefaultTreeModel)_tree.getModel();
@@ -133,7 +135,8 @@ public class Root extends ListTreeNode
_objects.clear();
_descriptorMap.clear();
- _children.clear();
+ _nodes.clear();
+ _registries.clear();
_treeModel.nodeStructureChanged(this);
_tree.setRootVisible(false);
}
@@ -230,16 +233,16 @@ public class Root extends ListTreeNode
_descriptorMap.remove(name);
java.util.List toRemove = new java.util.LinkedList();
- int[] toRemoveIndices = new int[_children.size()];
+ int[] toRemoveIndices = new int[_nodes.size()];
int i = 0;
- for(int index = 0; index < _children.size(); ++index)
+ for(int index = 0; index < _nodes.size(); ++index)
{
- Node node = (Node)_children.get(index);
+ Node node = (Node)_nodes.get(index);
if(node.remove(name))
{
toRemove.add(node);
- toRemoveIndices[i++] = index;
+ toRemoveIndices[i++] = _registries.size() + index;
}
}
@@ -333,7 +336,7 @@ public class Root extends ListTreeNode
if(node.remove(update.name))
{
int index = getIndex(node);
- _children.remove(node);
+ _nodes.remove(node);
_treeModel.nodesWereRemoved(this, new int[]{index}, new Object[]{node});
}
}
@@ -368,7 +371,7 @@ public class Root extends ListTreeNode
//
if(variablesChanged || !update.serviceTemplates.isEmpty() || !update.serverTemplates.isEmpty())
{
- p = _children.iterator();
+ p = _nodes.iterator();
while(p.hasNext())
{
Node node = (Node)p.next();
@@ -383,9 +386,6 @@ public class Root extends ListTreeNode
public void adapterInit(AdapterInfo[] adapters)
{
- //
- // TODO: XXX: REVIEW
- //
for(int i = 0; i < adapters.length; ++i)
{
_adapters.put(adapters[i].id, adapters[i]);
@@ -409,9 +409,6 @@ public class Root extends ListTreeNode
public void objectInit(ObjectInfo[] objects)
{
- //
- // TODO: XXX: REVIEW
- //
for(int i = 0; i < objects.length; ++i)
{
_objects.put(Ice.Util.identityToString(objects[i].proxy.ice_getIdentity()), objects[i]);
@@ -435,6 +432,38 @@ public class Root extends ListTreeNode
//
+ // From the Registry Observer:
+ //
+ public void registryUp(RegistryInfo info)
+ {
+ RegistryReplica newReplica = new RegistryReplica(this, info);
+
+ int i;
+ for(i = 0; i < _registries.size(); ++i)
+ {
+ String otherName = _registries.get(i).toString();
+ if(info.name.compareTo(otherName) > 0)
+ {
+ i++;
+ break;
+ }
+ }
+ _registries.add(i, newReplica);
+ _treeModel.nodesWereInserted(this, new int[]{i});
+ }
+
+ public void registryDown(String name)
+ {
+ TreeNodeBase registry = find(name, _registries);
+ if(registry != null)
+ {
+ int index = getIndex(registry);
+ _registries.remove(registry);
+ _treeModel.nodesWereRemoved(this, new int[]{index}, new Object[]{registry});
+ }
+ }
+
+ //
// From the Node Observer:
//
public void nodeUp(NodeDynamicInfo updatedInfo)
@@ -458,7 +487,7 @@ public class Root extends ListTreeNode
if(node.down())
{
int index = getIndex(node);
- _children.remove(node);
+ _nodes.remove(node);
_treeModel.nodesWereRemoved(this, new int[]{index}, new Object[]{node});
}
}
@@ -752,37 +781,40 @@ public class Root extends ListTreeNode
private Node findNode(String nodeName)
{
- return (Node)find(nodeName, _children);
+ return (Node)find(nodeName, _nodes);
}
private void insertNode(Node node)
{
String nodeName = node.toString();
int i;
- for(i = 0; i < _children.size(); ++i)
+ for(i = 0; i < _nodes.size(); ++i)
{
- String otherNodeName = _children.get(i).toString();
+ String otherNodeName = _nodes.get(i).toString();
if(nodeName.compareTo(otherNodeName) > 0)
{
i++;
break;
}
}
- _children.add(i, node);
- _treeModel.nodesWereInserted(this, new int[]{i});
+ _nodes.add(i, node);
+ _treeModel.nodesWereInserted(this, new int[]{_registries.size() + i});
}
private void removeNodes(int[] toRemoveIndices, java.util.List toRemove)
{
if(toRemove.size() > 0)
{
- _children.removeAll(toRemove);
+ _nodes.removeAll(toRemove);
_treeModel.nodesWereRemoved(this, toRemoveIndices, toRemove.toArray());
}
}
private final Coordinator _coordinator;
+ private final java.util.List _nodes = new java.util.LinkedList();
+ private final java.util.List _registries = new java.util.LinkedList();
+
//
// Maps application name to current application descriptor
//
@@ -810,6 +842,5 @@ public class Root extends ListTreeNode
static private RegistryEditor _editor;
static private JPopupMenu _popup;
- static private DefaultTreeCellRenderer _cellRenderer;
-
+ static private DefaultTreeCellRenderer _cellRenderer;
}
diff --git a/java/src/IceGridGUI/LiveDeployment/TreeNode.java b/java/src/IceGridGUI/LiveDeployment/TreeNode.java
index 82d64437343..09ab1652f70 100755
--- a/java/src/IceGridGUI/LiveDeployment/TreeNode.java
+++ b/java/src/IceGridGUI/LiveDeployment/TreeNode.java
@@ -38,11 +38,13 @@ public abstract class TreeNode extends TreeNodeBase
public static final int DISABLE = 3;
public static final int SHUTDOWN_NODE = 4;
- public static final int PATCH_SERVER = 5;
+ public static final int SHUTDOWN_REGISTRY = 5;
- public static final int ADD_OBJECT = 6;
+ public static final int PATCH_SERVER = 6;
- static public final int ACTION_COUNT = 7;
+ public static final int ADD_OBJECT = 7;
+
+ static public final int ACTION_COUNT = 8;
public boolean[] getAvailableActions()
{
@@ -69,6 +71,10 @@ public abstract class TreeNode extends TreeNodeBase
{
assert false;
}
+ public void shutdownRegistry()
+ {
+ assert false;
+ }
public void patchServer()
{
assert false;
diff --git a/java/src/IceGridGUI/RegistryObserverI.java b/java/src/IceGridGUI/RegistryObserverI.java
index 67193aaf714..dd48ccbc9bd 100755
--- a/java/src/IceGridGUI/RegistryObserverI.java
+++ b/java/src/IceGridGUI/RegistryObserverI.java
@@ -19,33 +19,40 @@ class RegistryObserverI extends _RegistryObserverDisp
_coordinator = coordinator;
}
- public void registryInit(final RegistryInfo[] registries, Ice.Current current)
+ public void registryInit(final RegistryInfo[] registryInfos, Ice.Current current)
{
- // TODO: XXX
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ for(int i = 0; i < registryInfos.length; ++i)
+ {
+ _coordinator.registryUp(registryInfos[i]);
+ }
+ }
+ });
}
public void registryUp(final RegistryInfo registryInfo, Ice.Current current)
{
- // TODO: XXX
-// SwingUtilities.invokeLater(new Runnable()
-// {
-// public void run()
-// {
-// _coordinator.registryUp(registryInfo);
-// }
-// });
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ _coordinator.registryUp(registryInfo);
+ }
+ });
}
public void registryDown(final String registryName, Ice.Current current)
{
- // TODO: XXX
-// SwingUtilities.invokeLater(new Runnable()
-// {
-// public void run()
-// {
-// _coordinator.registryDown(registryName);
-// }
-// });
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ _coordinator.registryDown(registryName);
+ }
+ });
}
private final Coordinator _coordinator;
diff --git a/java/src/IceGridGUI/SessionKeeper.java b/java/src/IceGridGUI/SessionKeeper.java
index fd52576c038..967084e3485 100755
--- a/java/src/IceGridGUI/SessionKeeper.java
+++ b/java/src/IceGridGUI/SessionKeeper.java
@@ -49,7 +49,7 @@ class SessionKeeper
//
private class Session
{
- Session(AdminSessionPrx session, Component parent)
+ Session(AdminSessionPrx session, long keepAliveperiod, Component parent)
{
_session = session;
@@ -68,24 +68,7 @@ class SessionKeeper
throw e;
}
- long period = 0;
-
- Glacier2.RouterPrx router = Glacier2.RouterPrxHelper.uncheckedCast(
- _coordinator.getCommunicator().getDefaultRouter());
- if(router != null)
- {
- period = router.getSessionTimeout() * 1000 / 2;
- }
- else
- {
- String str = _admin.ice_getIdentity().category + "/Registry";
- RegistryPrx registry = RegistryPrxHelper.
- uncheckedCast(_coordinator.getCommunicator().stringToProxy(str));
-
- period = registry.getSessionTimeout() * 1000 / 2;
- }
-
- _thread = new Pinger(_session, period);
+ _thread = new Pinger(_session, keepAliveperiod);
_thread.start();
try
@@ -370,6 +353,8 @@ class SessionKeeper
registryEndpoints =
_connectionPrefs.get("registry.endpoints", registryEndpoints);
}
+ connectToMaster = _connectionPrefs.getBoolean("registry.connectToMaster", connectToMaster);
+
//
// Glacier2 properties
@@ -476,6 +461,7 @@ class SessionKeeper
_connectionPrefs.putBoolean("registry.sslEnabled", registrySSLEnabled);
_connectionPrefs.put("registry.instanceName", registryInstanceName);
_connectionPrefs.put("registry.endpoints", registryEndpoints);
+ _connectionPrefs.putBoolean("registry.connectToMaster", connectToMaster);
}
//
@@ -494,6 +480,7 @@ class SessionKeeper
boolean registrySSLEnabled = false;
String registryInstanceName = "IceGrid";
String registryEndpoints = "";
+ boolean connectToMaster = true;
String routerUsername = System.getProperty("user.name");
char[] routerPassword;
@@ -537,6 +524,7 @@ class SessionKeeper
{
setVisible(false);
}
+
//
// Otherwise go back to the dialog
//
@@ -710,6 +698,8 @@ class SessionKeeper
builder.nextLine();
builder.append("IceGrid Registry Endpoint(s)", _registryEndpoints);
builder.nextLine();
+ builder.append("", _connectToMaster);
+ builder.nextLine();
directPanel = builder.getPanel();
}
@@ -848,6 +838,7 @@ class SessionKeeper
_registryInstanceName.setText(_loginInfo.registryInstanceName);
_registryEndpoints.setText(_loginInfo.registryEndpoints);
_registrySSLEnabled.setSelected(_loginInfo.registrySSLEnabled);
+ _connectToMaster.setSelected(_loginInfo.connectToMaster);
_routerUsername.setText(_loginInfo.routerUsername);
selectRouterUseSSL(_loginInfo.routerUseSSL);
@@ -895,6 +886,7 @@ class SessionKeeper
_loginInfo.registrySSLEnabled = _registrySSLEnabled.isSelected();
_loginInfo.registryInstanceName = _registryInstanceName.getText();
_loginInfo.registryEndpoints = _registryEndpoints.getText();
+ _loginInfo.connectToMaster = _connectToMaster.isSelected();
_loginInfo.routerUsername = _routerUsername.getText();
_loginInfo.routerPassword = _routerPassword.getPassword();
@@ -1057,6 +1049,7 @@ class SessionKeeper
private JCheckBox _registrySSLEnabled;
private JTextField _registryInstanceName = new JTextField(30);
private JTextField _registryEndpoints = new JTextField(30);
+ private JCheckBox _connectToMaster = new JCheckBox("Connect to Master Registry");
private JTextField _routerUsername = new JTextField(30);
private JLabel _routerUsernameLabel;
@@ -1193,7 +1186,10 @@ class SessionKeeper
{
parent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
- AdminSessionPrx session = _coordinator.login(_loginInfo, parent);
+ Ice.LongHolder keepAlivePeriodHolder = new Ice.LongHolder();
+
+ AdminSessionPrx session = _coordinator.login(_loginInfo, parent,
+ keepAlivePeriodHolder);
if(session == null)
{
return false;
@@ -1202,7 +1198,7 @@ class SessionKeeper
try
{
- _session = new Session(session, parent);
+ _session = new Session(session, keepAlivePeriodHolder.value, parent);
}
catch(Ice.LocalException e)
{
@@ -1230,7 +1226,7 @@ class SessionKeeper
void logout(boolean destroySession)
{
- if(_session != null) // TODO: XXX: Review: The Session constructor might throw
+ if(_session != null)
{
_session.close(destroySession);
_coordinator.sessionLost();