diff options
author | Bernard Normier <bernard@zeroc.com> | 2006-10-18 15:31:40 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2006-10-18 15:31:40 +0000 |
commit | 69c99ec49155767c56e9d7e041a802f3adf0a806 (patch) | |
tree | d044245599997c901aece021b017d80b56810b5d /java/src | |
parent | Removed nonmutating metadata from new operations (diff) | |
download | ice-69c99ec49155767c56e9d7e041a802f3adf0a806.tar.bz2 ice-69c99ec49155767c56e9d7e041a802f3adf0a806.tar.xz ice-69c99ec49155767c56e9d7e041a802f3adf0a806.zip |
Support for replicated registries
Diffstat (limited to 'java/src')
-rwxr-xr-x | java/src/IceGridGUI/Coordinator.java | 164 | ||||
-rwxr-xr-x | java/src/IceGridGUI/LiveActions.java | 8 | ||||
-rwxr-xr-x | java/src/IceGridGUI/LiveDeployment/Root.java | 79 | ||||
-rwxr-xr-x | java/src/IceGridGUI/LiveDeployment/TreeNode.java | 12 | ||||
-rwxr-xr-x | java/src/IceGridGUI/RegistryObserverI.java | 43 | ||||
-rwxr-xr-x | java/src/IceGridGUI/SessionKeeper.java | 40 |
6 files changed, 235 insertions, 111 deletions
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(); |