diff options
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/Ice/ObjectAdapterI.java | 24 | ||||
-rw-r--r-- | java/src/IceInternal/ServantManager.java | 54 |
2 files changed, 77 insertions, 1 deletions
diff --git a/java/src/Ice/ObjectAdapterI.java b/java/src/Ice/ObjectAdapterI.java index 49f78794cc7..ba25b1b1173 100644 --- a/java/src/Ice/ObjectAdapterI.java +++ b/java/src/Ice/ObjectAdapterI.java @@ -423,6 +423,14 @@ public final class ObjectAdapterI implements ObjectAdapter return addFacet(object, ident, facet); } + public synchronized void + addDefaultServant(Ice.Object servant, String category) + { + checkForDeactivation(); + + _servantManager.addDefaultServant(servant, category); + } + public Ice.Object remove(Identity ident) { @@ -447,6 +455,14 @@ public final class ObjectAdapterI implements ObjectAdapter return _servantManager.removeAllFacets(ident); } + public synchronized Ice.Object + removeDefaultServant(String category) + { + checkForDeactivation(); + + return _servantManager.removeDefaultServant(category); + } + public Ice.Object find(Identity ident) { @@ -480,6 +496,14 @@ public final class ObjectAdapterI implements ObjectAdapter return findFacet(ref.getIdentity(), ref.getFacet()); } + public synchronized Ice.Object + findDefaultServant(String category) + { + checkForDeactivation(); + + return _servantManager.findDefaultServant(category); + } + public synchronized void addServantLocator(ServantLocator locator, String prefix) { 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>(); } |