diff options
author | Joe George <joe@zeroc.com> | 2015-12-08 11:33:42 -0500 |
---|---|---|
committer | Joe George <joe@zeroc.com> | 2015-12-08 16:09:24 -0500 |
commit | 6a43686ce26de5d2d5edf4a485ecff3a242c26b6 (patch) | |
tree | d31e4f16dc9ed6e28056a7224e045a4638955f5e /java/src | |
parent | C++11 mapping IceDiscovery plug-in (diff) | |
download | ice-6a43686ce26de5d2d5edf4a485ecff3a242c26b6.tar.bz2 ice-6a43686ce26de5d2d5edf4a485ecff3a242c26b6.tar.xz ice-6a43686ce26de5d2d5edf4a485ecff3a242c26b6.zip |
ICE-6908 - Add ValueFactory
ValueFactory is a replacement for ObjectFactory (which is still
available if needed). It is an interface with only one operation
and can has the "delegate" metadata.
Diffstat (limited to 'java/src')
7 files changed, 128 insertions, 99 deletions
diff --git a/java/src/Ice/src/main/java/Ice/CommunicatorI.java b/java/src/Ice/src/main/java/Ice/CommunicatorI.java index 464ca119820..de854848e34 100644 --- a/java/src/Ice/src/main/java/Ice/CommunicatorI.java +++ b/java/src/Ice/src/main/java/Ice/CommunicatorI.java @@ -124,14 +124,22 @@ public final class CommunicatorI implements Communicator @Override public void - addObjectFactory(ObjectFactory factory, String id) + addObjectFactory(ObjectFactory factory, String id) { _instance.servantFactoryManager().add(factory, id); } + + @Override + public ObjectFactory + findObjectFactory(String id) { return _instance.servantFactoryManager().findObjectFactory(id); } + + @Override + public void + addValueFactory(ValueFactory factory, String id) { _instance.servantFactoryManager().add(factory, id); } @Override - public ObjectFactory - findObjectFactory(String id) + public ValueFactory + findValueFactory(String id) { return _instance.servantFactoryManager().find(id); } diff --git a/java/src/Ice/src/main/java/Ice/InputStream.java b/java/src/Ice/src/main/java/Ice/InputStream.java index d6428c263ba..89a7c71a9d7 100644 --- a/java/src/Ice/src/main/java/Ice/InputStream.java +++ b/java/src/Ice/src/main/java/Ice/InputStream.java @@ -30,7 +30,7 @@ public interface InputStream * * @param slice If <code>true</code> (the default), slicing is enabled; if <code>false</code>, * slicing is disabled. If slicing is disabled and the stream encounters a Slice type ID - * during decoding for which no object factory is installed, it raises {@link NoObjectFactoryException}. + * during decoding for which no value factory is installed, it raises {@link NoValueFactoryException}. **/ void sliceObjects(boolean slice); diff --git a/java/src/Ice/src/main/java/IceInternal/BasicStream.java b/java/src/Ice/src/main/java/IceInternal/BasicStream.java index 9394638f3cb..2c93207bda9 100644 --- a/java/src/Ice/src/main/java/IceInternal/BasicStream.java +++ b/java/src/Ice/src/main/java/IceInternal/BasicStream.java @@ -2745,7 +2745,7 @@ public class BasicStream } catch(java.lang.Exception ex) { - throw new Ice.NoObjectFactoryException("no object factory", id, ex); + throw new Ice.NoValueFactoryException("no value factory", id, ex); } return obj; @@ -2951,7 +2951,7 @@ public class BasicStream abstract private static class EncapsDecoder { - EncapsDecoder(BasicStream stream, boolean sliceObjects, ObjectFactoryManager f) + EncapsDecoder(BasicStream stream, boolean sliceObjects, ValueFactoryManager f) { _stream = stream; _sliceObjects = sliceObjects; @@ -3013,7 +3013,7 @@ public class BasicStream // // Try to find a factory registered for the specific type. // - Ice.ObjectFactory userFactory = _servantFactoryManager.find(typeId); + Ice.ValueFactory userFactory = _servantFactoryManager.find(typeId); Ice.Object v = null; if(userFactory != null) { @@ -3174,7 +3174,7 @@ public class BasicStream protected final BasicStream _stream; protected final boolean _sliceObjects; - protected ObjectFactoryManager _servantFactoryManager; + protected ValueFactoryManager _servantFactoryManager; // Encapsulation attributes for object un-marshalling protected java.util.TreeMap<Integer, java.util.LinkedList<Patcher> > _patchMap; @@ -3188,7 +3188,7 @@ public class BasicStream private static final class EncapsDecoder10 extends EncapsDecoder { - EncapsDecoder10(BasicStream stream, boolean sliceObjects, ObjectFactoryManager f) + EncapsDecoder10(BasicStream stream, boolean sliceObjects, ValueFactoryManager f) { super(stream, sliceObjects, f); _sliceType = SliceType.NoSlice; @@ -3446,7 +3446,7 @@ public class BasicStream // if(_typeId.equals(Ice.ObjectImpl.ice_staticId())) { - throw new Ice.NoObjectFactoryException("", mostDerivedId); + throw new Ice.NoValueFactoryException("", mostDerivedId); } v = newInstance(_typeId); @@ -3464,7 +3464,7 @@ public class BasicStream // if(!_sliceObjects) { - throw new Ice.NoObjectFactoryException("no object factory found and object slicing is disabled", + throw new Ice.NoValueFactoryException("no value factory found and object slicing is disabled", _typeId); } @@ -3492,7 +3492,7 @@ public class BasicStream private static class EncapsDecoder11 extends EncapsDecoder { - EncapsDecoder11(BasicStream stream, boolean sliceObjects, ObjectFactoryManager f) + EncapsDecoder11(BasicStream stream, boolean sliceObjects, ValueFactoryManager f) { super(stream, sliceObjects, f); _objectIdIndex = 1; @@ -3787,7 +3787,7 @@ public class BasicStream { if(_current.sliceType == SliceType.ObjectSlice) { - throw new Ice.NoObjectFactoryException("no object factory found and compact format prevents " + + throw new Ice.NoValueFactoryException("no value factory found and compact format prevents " + "slicing (the sender should use the sliced format instead)", _current.typeId); } @@ -3951,7 +3951,7 @@ public class BasicStream // if(!_sliceObjects) { - throw new Ice.NoObjectFactoryException("no object factory found and object slicing is disabled", + throw new Ice.NoValueFactoryException("no value factory found and object slicing is disabled", _current.typeId); } @@ -4763,7 +4763,7 @@ public class BasicStream if(_readEncapsStack.decoder == null) // Lazy initialization. { - ObjectFactoryManager factoryManager = _instance.servantFactoryManager(); + ValueFactoryManager factoryManager = _instance.servantFactoryManager(); if(_readEncapsStack.encoding_1_0) { _readEncapsStack.decoder = new EncapsDecoder10(this, _sliceObjects, factoryManager); diff --git a/java/src/Ice/src/main/java/IceInternal/Ex.java b/java/src/Ice/src/main/java/IceInternal/Ex.java index 4e2cb28ee0c..55f746a0844 100644 --- a/java/src/Ice/src/main/java/IceInternal/Ex.java +++ b/java/src/Ice/src/main/java/IceInternal/Ex.java @@ -15,13 +15,13 @@ public class Ex { // // If the object is an unknown sliced object, we didn't find an - // object factory, in this case raise a NoObjectFactoryException + // value factory, in this case raise a NoValueFactoryException // instead. // if(v instanceof Ice.UnknownSlicedObject) { Ice.UnknownSlicedObject uso = (Ice.UnknownSlicedObject)v; - throw new Ice.NoObjectFactoryException("", uso.getUnknownTypeId()); + throw new Ice.NoValueFactoryException("", uso.getUnknownTypeId()); } String type = v.ice_id(); diff --git a/java/src/Ice/src/main/java/IceInternal/Instance.java b/java/src/Ice/src/main/java/IceInternal/Instance.java index 30698fc060d..48f4a304883 100644 --- a/java/src/Ice/src/main/java/IceInternal/Instance.java +++ b/java/src/Ice/src/main/java/IceInternal/Instance.java @@ -255,7 +255,7 @@ public final class Instance return _outgoingConnectionFactory; } - public synchronized ObjectFactoryManager + public synchronized ValueFactoryManager servantFactoryManager() { if(_state == StateDestroyed) @@ -987,7 +987,7 @@ public final class Instance _outgoingConnectionFactory = new OutgoingConnectionFactory(communicator, this); - _servantFactoryManager = new ObjectFactoryManager(); + _servantFactoryManager = new ValueFactoryManager(); _objectAdapterFactory = new ObjectAdapterFactory(this, communicator); @@ -1724,7 +1724,7 @@ public final class Instance private RequestHandlerFactory _requestHandlerFactory; private ProxyFactory _proxyFactory; private OutgoingConnectionFactory _outgoingConnectionFactory; - private ObjectFactoryManager _servantFactoryManager; + private ValueFactoryManager _servantFactoryManager; private ObjectAdapterFactory _objectAdapterFactory; private int _protocolSupport; private boolean _preferIPv6; diff --git a/java/src/Ice/src/main/java/IceInternal/ObjectFactoryManager.java b/java/src/Ice/src/main/java/IceInternal/ObjectFactoryManager.java deleted file mode 100644 index f5582759292..00000000000 --- a/java/src/Ice/src/main/java/IceInternal/ObjectFactoryManager.java +++ /dev/null @@ -1,79 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. -// -// This copy of Ice is licensed to you under the terms described in the -// ICE_LICENSE file included in this distribution. -// -// ********************************************************************** - -package IceInternal; - -public final class ObjectFactoryManager -{ - public synchronized void - add(Ice.ObjectFactory factory, String id) - { - Object o = _factoryMap.get(id); - if(o != null) - { - Ice.AlreadyRegisteredException ex = new Ice.AlreadyRegisteredException(); - ex.id = id; - ex.kindOfObject = "object factory"; - throw ex; - } - _factoryMap.put(id, factory); - } - - public void - remove(String id) - { - Ice.ObjectFactory factory = null; - - synchronized(this) - { - factory = _factoryMap.get(id); - if(factory == null) - { - Ice.NotRegisteredException ex = new Ice.NotRegisteredException(); - ex.id = id; - ex.kindOfObject = "object factory"; - throw ex; - } - _factoryMap.remove(id); - } - - factory.destroy(); - } - - public synchronized Ice.ObjectFactory - find(String id) - { - return _factoryMap.get(id); - } - - // - // Only for use by Instance - // - ObjectFactoryManager() - { - } - - void - destroy() - { - java.util.Map<String, Ice.ObjectFactory> oldMap = null; - synchronized(this) - { - oldMap = _factoryMap; - _factoryMap = new java.util.HashMap<String, Ice.ObjectFactory>(); - } - - for(Ice.ObjectFactory factory : oldMap.values()) - { - factory.destroy(); - } - } - - private java.util.Map<String, Ice.ObjectFactory> _factoryMap = new java.util.HashMap<String, Ice.ObjectFactory>(); -} diff --git a/java/src/Ice/src/main/java/IceInternal/ValueFactoryManager.java b/java/src/Ice/src/main/java/IceInternal/ValueFactoryManager.java new file mode 100644 index 00000000000..f685d088b9a --- /dev/null +++ b/java/src/Ice/src/main/java/IceInternal/ValueFactoryManager.java @@ -0,0 +1,100 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +package IceInternal; + +public final class ValueFactoryManager +{ + public synchronized void + add(Ice.ObjectFactory factory, String id) + { + Object o = _factoryMap.get(id); + if(o != null) + { + Ice.AlreadyRegisteredException ex = new Ice.AlreadyRegisteredException(); + ex.id = id; + ex.kindOfObject = "value factory"; + throw ex; + } + + _objectFactoryMap.put(id, factory); + _factoryMap.put(id, new ObjectFactoryWrapper(factory)); + } + + public synchronized void + add(Ice.ValueFactory factory, String id) + { + Object o = _factoryMap.get(id); + if(o != null) + { + Ice.AlreadyRegisteredException ex = new Ice.AlreadyRegisteredException(); + ex.id = id; + ex.kindOfObject = "value factory"; + throw ex; + } + _factoryMap.put(id, factory); + } + + public synchronized Ice.ValueFactory + find(String id) + { + return _factoryMap.get(id); + } + + public synchronized Ice.ObjectFactory + findObjectFactory(String id) + { + return _objectFactoryMap.get(id); + } + + // + // Only for use by Instance + // + ValueFactoryManager() + { + } + + void + destroy() + { + java.util.Map<String, Ice.ObjectFactory> oldMap = null; + synchronized(this) + { + _factoryMap = new java.util.HashMap<String, Ice.ValueFactory>(); + + + oldMap = _objectFactoryMap; + _objectFactoryMap = new java.util.HashMap<String, Ice.ObjectFactory>(); + + } + + for(Ice.ObjectFactory factory : oldMap.values()) + { + factory.destroy(); + } + } + + private class ObjectFactoryWrapper implements Ice.ValueFactory + { + public ObjectFactoryWrapper(Ice.ObjectFactory factory) + { + _objectFactory = factory; + } + + public Ice.Object create(String id) + { + return _objectFactory.create(id); + } + + private final Ice.ObjectFactory _objectFactory; + } + + private java.util.Map<String, Ice.ValueFactory> _factoryMap = new java.util.HashMap<String, Ice.ValueFactory>(); + private java.util.Map<String, Ice.ObjectFactory> _objectFactoryMap = new java.util.HashMap<String, Ice.ObjectFactory>(); +} |