diff options
author | Mark Spruiell <mes@zeroc.com> | 2016-01-20 12:51:56 -0800 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2016-01-20 12:51:56 -0800 |
commit | 06c5cd74393aaa4a0c8ca0e660a35c74f705e415 (patch) | |
tree | f079732666a180e906f89bdae926eb8704008e36 /java/src | |
parent | C++11 minor fix (don't use private default ctor) (diff) | |
download | ice-06c5cd74393aaa4a0c8ca0e660a35c74f705e415.tar.bz2 ice-06c5cd74393aaa4a0c8ca0e660a35c74f705e415.tar.xz ice-06c5cd74393aaa4a0c8ca0e660a35c74f705e415.zip |
interim Java fix for ValueFactoryManager
Diffstat (limited to 'java/src')
6 files changed, 88 insertions, 136 deletions
diff --git a/java/src/Ice/src/main/java/Ice/CommunicatorI.java b/java/src/Ice/src/main/java/Ice/CommunicatorI.java index 18ec854f19d..eaf69b42a27 100644 --- a/java/src/Ice/src/main/java/Ice/CommunicatorI.java +++ b/java/src/Ice/src/main/java/Ice/CommunicatorI.java @@ -123,25 +123,21 @@ public final class CommunicatorI implements Communicator } @Override @SuppressWarnings("deprecation") - public void - addObjectFactory(ObjectFactory factory, String id) { _instance.servantFactoryManager().add(factory, id); } + public synchronized void addObjectFactory(ObjectFactory factory, String id) + { + _instance.addObjectFactory(factory, id); + } @Override @SuppressWarnings("deprecation") - public ObjectFactory - findObjectFactory(String id) { return _instance.servantFactoryManager().findObjectFactory(id); } - - @Override - public void - addValueFactory(ValueFactory factory, String id) + public synchronized ObjectFactory findObjectFactory(String id) { - _instance.servantFactoryManager().add(factory, id); + return _instance.findObjectFactory(id); } @Override - public ValueFactory - findValueFactory(String id) + public ValueFactoryManager getValueFactoryManager() { - return _instance.servantFactoryManager().find(id); + return _instance.initializationData().valueFactoryManager; } @Override diff --git a/java/src/Ice/src/main/java/Ice/InitializationData.java b/java/src/Ice/src/main/java/Ice/InitializationData.java index 0244df73b8b..88c871dc8ed 100644 --- a/java/src/Ice/src/main/java/Ice/InitializationData.java +++ b/java/src/Ice/src/main/java/Ice/InitializationData.java @@ -88,4 +88,9 @@ public final class InitializationData implements Cloneable * The batch request interceptor. **/ public BatchRequestInterceptor batchRequestInterceptor; + + /** + * The value factory manager. + **/ + public ValueFactoryManager valueFactoryManager; } diff --git a/java/src/Ice/src/main/java/Ice/ValueFactoryManagerI.java b/java/src/Ice/src/main/java/Ice/ValueFactoryManagerI.java new file mode 100644 index 00000000000..9597b73d9b0 --- /dev/null +++ b/java/src/Ice/src/main/java/Ice/ValueFactoryManagerI.java @@ -0,0 +1,30 @@ +// ********************************************************************** +// +// 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 Ice; + +public class ValueFactoryManagerI implements ValueFactoryManager +{ + public synchronized void add(ValueFactory factory, String id) + { + if(_factoryMap.containsKey(id)) + { + throw new AlreadyRegisteredException("value factory", id); + } + + _factoryMap.put(id, factory); + } + + public synchronized ValueFactory find(String id) + { + return _factoryMap.get(id); + } + + private java.util.HashMap<String, ValueFactory> _factoryMap = new java.util.HashMap<String, ValueFactory>(); +} diff --git a/java/src/Ice/src/main/java/IceInternal/BasicStream.java b/java/src/Ice/src/main/java/IceInternal/BasicStream.java index 2c93207bda9..60c0ebb48ed 100644 --- a/java/src/Ice/src/main/java/IceInternal/BasicStream.java +++ b/java/src/Ice/src/main/java/IceInternal/BasicStream.java @@ -2951,11 +2951,11 @@ public class BasicStream abstract private static class EncapsDecoder { - EncapsDecoder(BasicStream stream, boolean sliceObjects, ValueFactoryManager f) + EncapsDecoder(BasicStream stream, boolean sliceObjects, Ice.ValueFactoryManager f) { _stream = stream; _sliceObjects = sliceObjects; - _servantFactoryManager = f; + _valueFactoryManager = f; _typeIdIndex = 0; _unmarshaledMap = new java.util.TreeMap<Integer, Ice.Object>(); } @@ -3013,7 +3013,7 @@ public class BasicStream // // Try to find a factory registered for the specific type. // - Ice.ValueFactory userFactory = _servantFactoryManager.find(typeId); + Ice.ValueFactory userFactory = _valueFactoryManager.find(typeId); Ice.Object v = null; if(userFactory != null) { @@ -3026,7 +3026,7 @@ public class BasicStream // if(v == null) { - userFactory = _servantFactoryManager.find(""); + userFactory = _valueFactoryManager.find(""); if(userFactory != null) { v = userFactory.create(typeId); @@ -3174,7 +3174,7 @@ public class BasicStream protected final BasicStream _stream; protected final boolean _sliceObjects; - protected ValueFactoryManager _servantFactoryManager; + protected Ice.ValueFactoryManager _valueFactoryManager; // 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, ValueFactoryManager f) + EncapsDecoder10(BasicStream stream, boolean sliceObjects, Ice.ValueFactoryManager f) { super(stream, sliceObjects, f); _sliceType = SliceType.NoSlice; @@ -3492,7 +3492,7 @@ public class BasicStream private static class EncapsDecoder11 extends EncapsDecoder { - EncapsDecoder11(BasicStream stream, boolean sliceObjects, ValueFactoryManager f) + EncapsDecoder11(BasicStream stream, boolean sliceObjects, Ice.ValueFactoryManager f) { super(stream, sliceObjects, f); _objectIdIndex = 1; @@ -4763,7 +4763,7 @@ public class BasicStream if(_readEncapsStack.decoder == null) // Lazy initialization. { - ValueFactoryManager factoryManager = _instance.servantFactoryManager(); + Ice.ValueFactoryManager factoryManager = _instance.initializationData().valueFactoryManager; if(_readEncapsStack.encoding_1_0) { _readEncapsStack.decoder = new EncapsDecoder10(this, _sliceObjects, factoryManager); diff --git a/java/src/Ice/src/main/java/IceInternal/Instance.java b/java/src/Ice/src/main/java/IceInternal/Instance.java index 48f4a304883..1e0f07be4a7 100644 --- a/java/src/Ice/src/main/java/IceInternal/Instance.java +++ b/java/src/Ice/src/main/java/IceInternal/Instance.java @@ -255,16 +255,32 @@ public final class Instance return _outgoingConnectionFactory; } - public synchronized ValueFactoryManager - servantFactoryManager() + @SuppressWarnings("deprecation") + public synchronized void addObjectFactory(final Ice.ObjectFactory factory, final String id) { - if(_state == StateDestroyed) + // + // Create a ValueFactory wrapper around the given ObjectFactory and register the wrapper + // with the value factory manager. This may raise AlreadyRegisteredException. + // + Ice.ValueFactory wrapper = new Ice.ValueFactory() { - throw new Ice.CommunicatorDestroyedException(); - } + public Ice.Object create(String id) + { + return factory.create(id); + } + }; + _initData.valueFactoryManager.add(wrapper, id); - assert(_servantFactoryManager != null); - return _servantFactoryManager; + // + // Also record the object factory in our own map. + // + _objectFactoryMap.put(id, factory); + } + + @SuppressWarnings("deprecation") + public synchronized Ice.ObjectFactory findObjectFactory(String id) + { + return _objectFactoryMap.get(id); } public synchronized ObjectAdapterFactory @@ -985,9 +1001,12 @@ public final class Instance _pluginManager = new Ice.PluginManagerI(communicator, this); - _outgoingConnectionFactory = new OutgoingConnectionFactory(communicator, this); + if(_initData.valueFactoryManager == null) + { + _initData.valueFactoryManager = new Ice.ValueFactoryManagerI(); + } - _servantFactoryManager = new ValueFactoryManager(); + _outgoingConnectionFactory = new OutgoingConnectionFactory(communicator, this); _objectAdapterFactory = new ObjectAdapterFactory(this, communicator); @@ -1032,7 +1051,6 @@ public final class Instance IceUtilInternal.Assert.FinalizerAssert(_requestHandlerFactory == null); IceUtilInternal.Assert.FinalizerAssert(_proxyFactory == null); IceUtilInternal.Assert.FinalizerAssert(_outgoingConnectionFactory == null); - IceUtilInternal.Assert.FinalizerAssert(_servantFactoryManager == null); IceUtilInternal.Assert.FinalizerAssert(_objectAdapterFactory == null); IceUtilInternal.Assert.FinalizerAssert(_clientThreadPool == null); IceUtilInternal.Assert.FinalizerAssert(_serverThreadPool == null); @@ -1241,6 +1259,7 @@ public final class Instance // // Only for use by Ice.CommunicatorI // + @SuppressWarnings("deprecation") public void destroy() { @@ -1378,14 +1397,15 @@ public final class Instance // // NOTE: at this point destroy() can't be interrupted - // anymore. The calls bellow are therefore garanteed to be + // anymore. The calls bellow are therefore guaranteed to be // called once. // - if(_servantFactoryManager != null) + for(java.util.Map.Entry<String, Ice.ObjectFactory> e : _objectFactoryMap.entrySet()) { - _servantFactoryManager.destroy(); + e.getValue().destroy(); } + _objectFactoryMap.clear(); if(_routerManager != null) { @@ -1436,7 +1456,6 @@ public final class Instance _endpointHostResolver = null; _timer = null; - _servantFactoryManager = null; _referenceFactory = null; _requestHandlerFactory = null; _proxyFactory = null; @@ -1724,7 +1743,6 @@ public final class Instance private RequestHandlerFactory _requestHandlerFactory; private ProxyFactory _proxyFactory; private OutgoingConnectionFactory _outgoingConnectionFactory; - private ValueFactoryManager _servantFactoryManager; private ObjectAdapterFactory _objectAdapterFactory; private int _protocolSupport; private boolean _preferIPv6; @@ -1751,4 +1769,8 @@ public final class Instance private static boolean _oneOfDone = false; private QueueExecutorService _queueExecutorService; private QueueExecutor _queueExecutor; + + @SuppressWarnings("deprecation") + private java.util.HashMap<String, Ice.ObjectFactory> _objectFactoryMap = + 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 deleted file mode 100644 index c0bf96148c9..00000000000 --- a/java/src/Ice/src/main/java/IceInternal/ValueFactoryManager.java +++ /dev/null @@ -1,101 +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; - -@SuppressWarnings("deprecation") -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>(); -} |