summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2016-01-20 12:51:56 -0800
committerMark Spruiell <mes@zeroc.com>2016-01-20 12:51:56 -0800
commit06c5cd74393aaa4a0c8ca0e660a35c74f705e415 (patch)
treef079732666a180e906f89bdae926eb8704008e36 /java/src
parentC++11 minor fix (don't use private default ctor) (diff)
downloadice-06c5cd74393aaa4a0c8ca0e660a35c74f705e415.tar.bz2
ice-06c5cd74393aaa4a0c8ca0e660a35c74f705e415.tar.xz
ice-06c5cd74393aaa4a0c8ca0e660a35c74f705e415.zip
interim Java fix for ValueFactoryManager
Diffstat (limited to 'java/src')
-rw-r--r--java/src/Ice/src/main/java/Ice/CommunicatorI.java20
-rw-r--r--java/src/Ice/src/main/java/Ice/InitializationData.java5
-rw-r--r--java/src/Ice/src/main/java/Ice/ValueFactoryManagerI.java30
-rw-r--r--java/src/Ice/src/main/java/IceInternal/BasicStream.java16
-rw-r--r--java/src/Ice/src/main/java/IceInternal/Instance.java52
-rw-r--r--java/src/Ice/src/main/java/IceInternal/ValueFactoryManager.java101
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>();
-}