From da731d2bb81666b9c697d9099da632e7dfcdc0f7 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 9 Sep 2014 12:13:21 +0200 Subject: Replaced int sysKey Item identifier with UUID, which is now portable. ItemPath objects are now used to identify Items throughout the kernel, replacing ints and Integers. --- .../com/c2kernel/entity/proxy/ProxyManager.java | 73 ++++++++++------------ 1 file changed, 33 insertions(+), 40 deletions(-) (limited to 'src/main/java/com/c2kernel/entity/proxy/ProxyManager.java') diff --git a/src/main/java/com/c2kernel/entity/proxy/ProxyManager.java b/src/main/java/com/c2kernel/entity/proxy/ProxyManager.java index 6a35c88..d95c86e 100644 --- a/src/main/java/com/c2kernel/entity/proxy/ProxyManager.java +++ b/src/main/java/com/c2kernel/entity/proxy/ProxyManager.java @@ -19,6 +19,7 @@ import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.DomainPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.Path; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.process.Gateway; @@ -29,7 +30,7 @@ import com.c2kernel.utils.SoftCache; public class ProxyManager { - SoftCache proxyPool = new SoftCache(50); + SoftCache proxyPool = new SoftCache(50); HashMap treeSubscribers = new HashMap(); HashMap connections = new HashMap(); @@ -42,17 +43,16 @@ public class ProxyManager Iterator servers = Gateway.getLookup().search(new DomainPath("/servers"), new Property("Type", "Server", false)); while(servers.hasNext()) { - Path thisServerPath = servers.next(); + Path thisServerResult = servers.next(); try { - Logger.msg(thisServerPath.dump()); - int syskey = thisServerPath.getSysKey(); - String remoteServer = ((Property)Gateway.getStorage().get(syskey, ClusterStorage.PROPERTY+"/Name", null)).getValue(); - String portStr = ((Property)Gateway.getStorage().get(syskey, ClusterStorage.PROPERTY+"/ProxyPort", null)).getValue(); + ItemPath thisServerPath = thisServerResult.getItemPath(); + String remoteServer = ((Property)Gateway.getStorage().get(thisServerPath, ClusterStorage.PROPERTY+"/Name", null)).getValue(); + String portStr = ((Property)Gateway.getStorage().get(thisServerPath, ClusterStorage.PROPERTY+"/ProxyPort", null)).getValue(); int remotePort = Integer.parseInt(portStr); connectToProxyServer(remoteServer, remotePort); } catch (Exception ex) { - Logger.error("Exception retrieving proxy server connection data for "+thisServerPath); + Logger.error("Exception retrieving proxy server connection data for "+thisServerResult); Logger.error(ex); } } @@ -68,8 +68,8 @@ public class ProxyManager protected void resubscribe(ProxyServerConnection conn) { synchronized (proxyPool) { - for (Integer key : proxyPool.keySet()) { - ProxyMessage sub = new ProxyMessage(key.intValue(), ProxyMessage.ADDPATH, false); + for (ItemPath key : proxyPool.keySet()) { + ProxyMessage sub = new ProxyMessage(key, ProxyMessage.ADDPATH, false); Logger.msg(5, "Subscribing to item "+key); conn.sendMessage(sub); } @@ -99,15 +99,14 @@ public class ProxyManager if (thisMessage.getPath().equals(ProxyMessage.PINGPATH)) // ping response return; - if (thisMessage.getSysKey() == ProxyMessage.NA) // must be domain path info + if (thisMessage.getItemPath() == null) // must be domain path info informTreeSubscribers(thisMessage.getState(), thisMessage.getPath()); else { // proper proxy message Logger.msg(5, "Received proxy message: "+thisMessage.toString()); - Integer key = new Integer(thisMessage.getSysKey()); - ItemProxy relevant = proxyPool.get(key); + ItemProxy relevant = proxyPool.get(thisMessage.getItemPath()); if (relevant == null) - Logger.warning("Received proxy message for sysKey "+thisMessage.getSysKey()+" which we don't have a proxy for."); + Logger.warning("Received proxy message for sysKey "+thisMessage.getItemPath()+" which we don't have a proxy for."); else try { relevant.notify(thisMessage); @@ -156,35 +155,32 @@ public class ProxyManager * **************************************************************************/ private ItemProxy createProxy( org.omg.CORBA.Object ior, - int systemKey, - boolean isAgent ) + ItemPath itemPath) throws ObjectNotFoundException { ItemProxy newProxy = null; - Logger.msg(5, "ProxyManager::creating proxy on Item " + systemKey); + Logger.msg(5, "ProxyManager::creating proxy on Item " + itemPath); - if( isAgent ) - { - newProxy = new AgentProxy(ior, systemKey); + if( itemPath instanceof AgentPath ) { + newProxy = new AgentProxy(ior, (AgentPath)itemPath); } - else - { - newProxy = new ItemProxy(ior, systemKey); + else { + newProxy = new ItemProxy(ior, itemPath); } // subscribe to changes from server - ProxyMessage sub = new ProxyMessage(systemKey, ProxyMessage.ADDPATH, false); + ProxyMessage sub = new ProxyMessage(itemPath, ProxyMessage.ADDPATH, false); sendMessage(sub); reportCurrentProxies(9); return ( newProxy ); } - protected void removeProxy( int systemKey ) + protected void removeProxy( ItemPath itemPath ) { - ProxyMessage sub = new ProxyMessage(systemKey, ProxyMessage.DELPATH, true); - Logger.msg(5,"ProxyManager.removeProxy() - Unsubscribing to proxy informer for "+systemKey); + ProxyMessage sub = new ProxyMessage(itemPath, ProxyMessage.DELPATH, true); + Logger.msg(5,"ProxyManager.removeProxy() - Unsubscribing to proxy informer for "+itemPath); sendMessage(sub); } @@ -194,20 +190,18 @@ public class ProxyManager * SystemKey **************************************************************************/ private ItemProxy getProxy( org.omg.CORBA.Object ior, - int systemKey, - boolean isAgent ) + ItemPath itemPath) throws ObjectNotFoundException { - Integer key = new Integer(systemKey); synchronized(proxyPool) { ItemProxy newProxy; // return it if it exists - newProxy = proxyPool.get(key); + newProxy = proxyPool.get(itemPath); if (newProxy == null) { // create a new one - newProxy = createProxy(ior, systemKey, isAgent ); - proxyPool.put(key, newProxy); + newProxy = createProxy(ior, itemPath); + proxyPool.put(itemPath, newProxy); } return newProxy; @@ -222,13 +216,12 @@ public class ProxyManager public ItemProxy getProxy( Path path ) throws ObjectNotFoundException { - - //convert namePath to dn format + ItemPath itemPath; + if (path instanceof ItemPath) itemPath = (ItemPath)path; + else itemPath = path.getItemPath(); Logger.msg(8,"ProxyManager::getProxy(" + path.toString() + ")"); - boolean isAgent = (path.getEntity() instanceof AgentPath); - return getProxy( Gateway.getLookup().resolve(path), - path.getSysKey(), - isAgent ); + return getProxy( Gateway.getLookup().resolve(itemPath), + itemPath ); } @@ -249,11 +242,11 @@ public class ProxyManager Logger.msg(logLevel, "Current proxies: "); try { synchronized(proxyPool) { - Iterator i = proxyPool.keySet().iterator(); + Iterator i = proxyPool.keySet().iterator(); for( int count=0; i.hasNext(); count++ ) { - Integer nextProxy = i.next(); + ItemPath nextProxy = i.next(); ItemProxy thisProxy = proxyPool.get(nextProxy); if (thisProxy != null) Logger.msg(logLevel, -- cgit v1.2.3