diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2009-03-26 11:34:24 -0230 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2009-03-26 11:34:24 -0230 |
commit | 0de45cd71fa21bcb20b8a3f754ff20cdf329ff23 (patch) | |
tree | 06c0fd3304362d39a56df0a234e90b3f84687edc /java/src/IceInternal/ServantManager.java | |
parent | More fixes to FixUtil.py (diff) | |
download | ice-0de45cd71fa21bcb20b8a3f754ff20cdf329ff23.tar.bz2 ice-0de45cd71fa21bcb20b8a3f754ff20cdf329ff23.tar.xz ice-0de45cd71fa21bcb20b8a3f754ff20cdf329ff23.zip |
Bug 2511 - add default servants
Diffstat (limited to 'java/src/IceInternal/ServantManager.java')
-rw-r--r-- | java/src/IceInternal/ServantManager.java | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/java/src/IceInternal/ServantManager.java b/java/src/IceInternal/ServantManager.java index 83652e87882..7fe206c0d14 100644 --- a/java/src/IceInternal/ServantManager.java +++ b/java/src/IceInternal/ServantManager.java @@ -45,6 +45,23 @@ public final class ServantManager m.put(facet, servant); } + public synchronized void + addDefaultServant(Ice.Object servant, String category) + { + assert(_instance != null); // Must not be called after destruction + + Ice.Object obj = _defaultServantMap.get(category); + if(obj != null) + { + Ice.AlreadyRegisteredException ex = new Ice.AlreadyRegisteredException(); + ex.kindOfObject = "default servant"; + ex.id = category; + throw ex; + } + + _defaultServantMap.put(category, servant); + } + public synchronized Ice.Object removeServant(Ice.Identity ident, String facet) { @@ -76,6 +93,24 @@ public final class ServantManager return obj; } + public synchronized Ice.Object + removeDefaultServant(String category) + { + assert(_instance != null); // Must not be called after destruction. + + Ice.Object obj = _defaultServantMap.get(category); + if(obj == null) + { + Ice.NotRegisteredException ex = new Ice.NotRegisteredException(); + ex.kindOfObject = "default servant"; + ex.id = category; + throw ex; + } + + _defaultServantMap.remove(category); + return obj; + } + public synchronized java.util.Map<String, Ice.Object> removeAllFacets(Ice.Identity ident) { @@ -113,7 +148,15 @@ public final class ServantManager java.util.Map<String, Ice.Object> m = _servantMapMap.get(ident); Ice.Object obj = null; - if(m != null) + if(m == null) + { + obj = _defaultServantMap.get(ident.category); + if(obj == null) + { + obj = _defaultServantMap.get(""); + } + } + else { obj = m.get(facet); } @@ -121,6 +164,14 @@ public final class ServantManager return obj; } + public synchronized Ice.Object + findDefaultServant(String category) + { + assert(_instance != null); // Must not be called after destruction. + + return _defaultServantMap.get(category); + } + public synchronized java.util.Map<String, Ice.Object> findAllFacets(Ice.Identity ident) { @@ -253,5 +304,6 @@ public final class ServantManager final private String _adapterName; private java.util.Map<Ice.Identity, java.util.Map<String, Ice.Object> > _servantMapMap = new java.util.HashMap<Ice.Identity, java.util.Map<String, Ice.Object> >(); + private java.util.Map<String, Ice.Object> _defaultServantMap = new java.util.HashMap<String, Ice.Object>(); private java.util.Map<String, Ice.ServantLocator> _locatorMap = new java.util.HashMap<String, Ice.ServantLocator>(); } |