summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorJoe George <joe@zeroc.com>2015-12-08 11:33:42 -0500
committerJoe George <joe@zeroc.com>2015-12-08 16:09:24 -0500
commit6a43686ce26de5d2d5edf4a485ecff3a242c26b6 (patch)
treed31e4f16dc9ed6e28056a7224e045a4638955f5e /java/src
parentC++11 mapping IceDiscovery plug-in (diff)
downloadice-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')
-rw-r--r--java/src/Ice/src/main/java/Ice/CommunicatorI.java14
-rw-r--r--java/src/Ice/src/main/java/Ice/InputStream.java2
-rw-r--r--java/src/Ice/src/main/java/IceInternal/BasicStream.java22
-rw-r--r--java/src/Ice/src/main/java/IceInternal/Ex.java4
-rw-r--r--java/src/Ice/src/main/java/IceInternal/Instance.java6
-rw-r--r--java/src/Ice/src/main/java/IceInternal/ObjectFactoryManager.java79
-rw-r--r--java/src/Ice/src/main/java/IceInternal/ValueFactoryManager.java100
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>();
+}