summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cppe/CHANGES2
-rwxr-xr-xcppe/include/IceE/Communicator.h2
-rwxr-xr-xcppe/src/IceE/Communicator.cpp8
-rwxr-xr-xcppe/src/IceE/Connection.cpp2
-rw-r--r--cppe/src/IceE/Instance.cpp34
-rw-r--r--cppe/src/IceE/Instance.h6
-rw-r--r--cppe/src/IceE/ObjectAdapter.cpp10
-rw-r--r--cppe/src/IceE/Proxy.cpp12
-rw-r--r--cppe/src/IceE/Reference.cpp26
-rw-r--r--cppe/src/IceE/Reference.h15
-rw-r--r--cppe/src/IceE/ReferenceFactory.cpp26
-rw-r--r--cppe/src/IceE/ReferenceFactory.h6
-rw-r--r--cppe/src/IceE/SharedContext.h47
-rw-r--r--cppe/test/IceE/operations/Twoways.cpp40
-rwxr-xr-xjavae/CHANGES2
-rw-r--r--javae/src/Ice/Communicator.java8
-rw-r--r--javae/src/IceInternal/Instance.java50
-rw-r--r--javae/src/IceInternal/Reference.java2
-rw-r--r--javae/src/IceInternal/ReferenceFactory.java10
-rw-r--r--javae/test/IceE/operations/Twoways.java83
20 files changed, 282 insertions, 109 deletions
diff --git a/cppe/CHANGES b/cppe/CHANGES
index c62a611df93..6f9277353fa 100644
--- a/cppe/CHANGES
+++ b/cppe/CHANGES
@@ -54,7 +54,7 @@ Changes since version 1.1.0
to be set during communicator creation. Currently included are
Properties, Logger, and default context. The initializeWith
communicator initialization functions have been deprecated and the
- setLogger() and setDefaultContext() methods have been removed.
+ setLogger() method has been removed.
- Added support for the "cpp:type:wstring" slice metadata. When used
generated code will use std::wstring instead of std::string. See
diff --git a/cppe/include/IceE/Communicator.h b/cppe/include/IceE/Communicator.h
index 67ba848eac3..e07b013c9da 100755
--- a/cppe/include/IceE/Communicator.h
+++ b/cppe/include/IceE/Communicator.h
@@ -41,7 +41,9 @@ public:
ObjectAdapterPtr createObjectAdapterWithRouter(const std::string&, const RouterPrx&);
#endif
+ void setDefaultContext(const Context&);
Context getDefaultContext() const;
+
PropertiesPtr getProperties() const;
LoggerPtr getLogger() const;
diff --git a/cppe/src/IceE/Communicator.cpp b/cppe/src/IceE/Communicator.cpp
index e3089448f26..8f406a4f733 100755
--- a/cppe/src/IceE/Communicator.cpp
+++ b/cppe/src/IceE/Communicator.cpp
@@ -116,10 +116,16 @@ Ice::Communicator::createObjectAdapterWithRouter(const string& name, const Route
#endif
+void
+Ice::Communicator::setDefaultContext(const Context& ctx)
+{
+ _instance->setDefaultContext(ctx);
+}
+
Ice::Context
Ice::Communicator::getDefaultContext() const
{
- return _instance->initializationData().defaultContext;
+ return _instance->getDefaultContext()->getValue();
}
PropertiesPtr
diff --git a/cppe/src/IceE/Connection.cpp b/cppe/src/IceE/Connection.cpp
index 08b13996902..57f22775c0b 100755
--- a/cppe/src/IceE/Connection.cpp
+++ b/cppe/src/IceE/Connection.cpp
@@ -866,7 +866,7 @@ Ice::Connection::createProxy(const Identity& ident) const
//
vector<ConnectionPtr> connections;
connections.push_back(const_cast<Connection*>(this));
- ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext, "",
+ ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(), "",
Reference::ModeTwoway, connections);
return _instance->proxyFactory()->referenceToProxy(ref);
}
diff --git a/cppe/src/IceE/Instance.cpp b/cppe/src/IceE/Instance.cpp
index 67dbb2750ba..5d7977c5fd0 100644
--- a/cppe/src/IceE/Instance.cpp
+++ b/cppe/src/IceE/Instance.cpp
@@ -222,6 +222,33 @@ IceInternal::Instance::flushBatchRequests()
}
#endif
+void
+IceInternal::Instance::setDefaultContext(const Context& ctx)
+{
+ IceUtil::RecMutex::Lock sync(*this);
+
+ if(_state == StateDestroyed)
+ {
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
+
+ _defaultContext = new SharedContext(ctx);
+}
+
+SharedContextPtr
+IceInternal::Instance::getDefaultContext() const
+{
+ IceUtil::RecMutex::Lock sync(*this);
+
+ if(_state == StateDestroyed)
+ {
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
+
+ return _defaultContext;
+}
+
+
Identity
IceInternal::Instance::stringToIdentity(const string& s) const
{
@@ -328,10 +355,11 @@ IceInternal::Instance::identityToString(const Identity& ident) const
IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const InitializationData& initData) :
_state(StateActive),
_initData(initData),
- _messageSizeMax(0)
+ _messageSizeMax(0),
#ifndef ICEE_PURE_BLOCKING_CLIENT
- , _threadPerConnectionStackSize(0)
+ _threadPerConnectionStackSize(0),
#endif
+ _defaultContext(new SharedContext(initData.defaultContext))
{
try
{
@@ -514,7 +542,7 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Initi
if(!_initData.wstringConverter)
{
- const_cast<WstringConverterPtr&>(_initData.wstringConverter) = new UnicodeWstringConverter();
+ _initData.wstringConverter = new UnicodeWstringConverter();
}
__setNoDelete(false);
diff --git a/cppe/src/IceE/Instance.h b/cppe/src/IceE/Instance.h
index 0b40da1ed2e..bb278faa0ac 100644
--- a/cppe/src/IceE/Instance.h
+++ b/cppe/src/IceE/Instance.h
@@ -28,6 +28,7 @@
#include <IceE/Shared.h>
#include <IceE/RecMutex.h>
#include <IceE/Initialize.h>
+#include <IceE/SharedContext.h>
#include <IceE/Identity.h>
namespace IceInternal
@@ -56,6 +57,10 @@ public:
#ifdef ICEE_HAS_BATCH
void flushBatchRequests();
#endif
+
+ void setDefaultContext(const ::Ice::Context&);
+ SharedContextPtr getDefaultContext() const;
+
#ifndef ICEE_PURE_BLOCKING_CLIENT
size_t threadPerConnectionStackSize() const;
#endif
@@ -104,6 +109,7 @@ private:
#ifndef ICEE_PURE_CLIENT
ObjectAdapterFactoryPtr _objectAdapterFactory;
#endif
+ SharedContextPtr _defaultContext;
};
class UTF8BufferI : public Ice::UTF8Buffer
diff --git a/cppe/src/IceE/ObjectAdapter.cpp b/cppe/src/IceE/ObjectAdapter.cpp
index 012d5a16b52..e9b6a88e774 100644
--- a/cppe/src/IceE/ObjectAdapter.cpp
+++ b/cppe/src/IceE/ObjectAdapter.cpp
@@ -519,7 +519,7 @@ Ice::ObjectAdapter::createReverseProxy(const Identity& ident) const
// reference.
//
vector<EndpointPtr> endpoints;
- ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext, "",
+ ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(), "",
Reference::ModeTwoway, connections);
return _instance->proxyFactory()->referenceToProxy(ref);
}
@@ -775,10 +775,10 @@ Ice::ObjectAdapter::newDirectProxy(const Identity& ident, const string& facet) c
// Create a reference and return a proxy for this reference.
//
#ifdef ICEE_HAS_ROUTER
- ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext,
+ ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(),
facet, Reference::ModeTwoway, false, endpoints, 0);
#else
- ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext,
+ ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(),
facet, Reference::ModeTwoway, false, endpoints);
#endif
return _instance->proxyFactory()->referenceToProxy(ref);
@@ -793,11 +793,11 @@ Ice::ObjectAdapter::newIndirectProxy(const Identity& ident, const string& facet,
// Create a reference with the adapter id.
//
#ifdef ICEE_HAS_ROUTER
- ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext,
+ ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(),
facet, Reference::ModeTwoway, false, id, 0, _locatorInfo);
#else
- ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->initializationData().defaultContext,
+ ReferencePtr ref = _instance->referenceFactory()->create(ident, _instance->getDefaultContext(),
facet, Reference::ModeTwoway, false, id, _locatorInfo);
#endif
diff --git a/cppe/src/IceE/Proxy.cpp b/cppe/src/IceE/Proxy.cpp
index 31ced0d3e44..da3f5a36812 100644
--- a/cppe/src/IceE/Proxy.cpp
+++ b/cppe/src/IceE/Proxy.cpp
@@ -177,7 +177,7 @@ IceProxy::Ice::Object::ice_toString() const
bool
IceProxy::Ice::Object::ice_isA(const string& __id)
{
- return ice_isA(__id, _reference->getContext());
+ return ice_isA(__id, _reference->getContext()->getValue());
}
bool
@@ -250,7 +250,7 @@ IceProxy::Ice::Object::ice_isA(const string& __id, const Context& __context)
void
IceProxy::Ice::Object::ice_ping()
{
- ice_ping(_reference->getContext());
+ ice_ping(_reference->getContext()->getValue());
}
void
@@ -312,7 +312,7 @@ IceProxy::Ice::Object::ice_ping(const Context& __context)
vector<string>
IceProxy::Ice::Object::ice_ids()
{
- return ice_ids(_reference->getContext());
+ return ice_ids(_reference->getContext()->getValue());
}
vector<string>
@@ -377,7 +377,7 @@ IceProxy::Ice::Object::ice_ids(const Context& __context)
string
IceProxy::Ice::Object::ice_id()
{
- return ice_id(_reference->getContext());
+ return ice_id(_reference->getContext()->getValue());
}
string
@@ -442,7 +442,7 @@ IceProxy::Ice::Object::ice_id(const Context& __context)
Context
IceProxy::Ice::Object::ice_getContext() const
{
- return _reference->getContext();
+ return _reference->getContext()->getValue();
}
ObjectPrx
@@ -794,7 +794,7 @@ IceProxy::Ice::Object::__checkTwowayOnly(const char* name) const
const Context&
IceProxy::Ice::Object::__defaultContext() const
{
- return _reference->getContext();
+ return _reference->getContext()->getValue();
}
void
diff --git a/cppe/src/IceE/Reference.cpp b/cppe/src/IceE/Reference.cpp
index e35e779f09e..3af3a3728b3 100644
--- a/cppe/src/IceE/Reference.cpp
+++ b/cppe/src/IceE/Reference.cpp
@@ -42,7 +42,7 @@ ReferencePtr
IceInternal::Reference::defaultContext() const
{
ReferencePtr r = _instance->referenceFactory()->copy(this);
- r->_context = _instance->initializationData().defaultContext;
+ r->_context = _instance->getDefaultContext();
return r;
}
@@ -56,7 +56,7 @@ ReferencePtr
IceInternal::Reference::changeContext(const Context& newContext) const
{
ReferencePtr r = _instance->referenceFactory()->copy(this);
- r->_context = newContext;
+ r->_context = new SharedContext(newContext);
return r;
}
@@ -134,7 +134,7 @@ Reference::hash() const
h = 5 * h + *p;
}
- for(q = _context.begin(); q != _context.end(); ++q)
+ for(q = _context->getValue().begin(); q != _context->getValue().end(); ++q)
{
for(p = q->first.begin(); p != q->first.end(); ++p)
{
@@ -303,7 +303,7 @@ IceInternal::Reference::operator==(const Reference& r) const
return false;
}
- if(_context != r._context)
+ if(_context->getValue() != r._context->getValue())
{
return false;
}
@@ -361,11 +361,11 @@ IceInternal::Reference::operator<(const Reference& r) const
return false;
}
- if(_context < r._context)
+ if(_context->getValue() < r._context->getValue())
{
return true;
}
- else if(r._context < _context)
+ else if(r._context->getValue() < _context->getValue())
{
return false;
}
@@ -403,7 +403,7 @@ IceInternal::Reference::operator<(const Reference& r) const
}
IceInternal::Reference::Reference(const InstancePtr& inst, const CommunicatorPtr& com, const Identity& ident,
- const Context& ctx, const string& fs, Mode md, bool sec) :
+ const SharedContextPtr& ctx, const string& fs, Mode md, bool sec) :
_hashInitialized(false),
_instance(inst),
_communicator(com),
@@ -450,7 +450,7 @@ void IceInternal::incRef(IceInternal::FixedReference* p) { p->__incRef(); }
void IceInternal::decRef(IceInternal::FixedReference* p) { p->__decRef(); }
IceInternal::FixedReference::FixedReference(const InstancePtr& inst, const CommunicatorPtr& com, const Identity& ident,
- const Context& ctx, const string& fs, Mode md,
+ const SharedContextPtr& ctx, const string& fs, Mode md,
const vector<ConnectionPtr>& fixedConns) :
Reference(inst, com, ident, ctx, fs, md, false),
_fixedConnections(fixedConns)
@@ -699,7 +699,7 @@ IceInternal::RoutableReference::operator<(const Reference& r) const
}
IceInternal::RoutableReference::RoutableReference(const InstancePtr& inst, const CommunicatorPtr& com,
- const Identity& ident, const Context& ctx, const string& fs,
+ const Identity& ident, const SharedContextPtr& ctx, const string& fs,
Mode md, bool sec, const RouterInfoPtr& rtrInfo) :
Reference(inst, com, ident, ctx, fs, md, sec), _routerInfo(rtrInfo)
{
@@ -717,7 +717,7 @@ void IceInternal::decRef(IceInternal::DirectReference* p) { p->__decRef(); }
#ifdef ICEE_HAS_ROUTER
IceInternal::DirectReference::DirectReference(const InstancePtr& inst, const CommunicatorPtr& com,
- const Identity& ident, const Context& ctx, const string& fs, Mode md,
+ const Identity& ident, const SharedContextPtr& ctx, const string& fs, Mode md,
bool sec, const vector<EndpointPtr>& endpts,
const RouterInfoPtr& rtrInfo) :
@@ -727,7 +727,7 @@ IceInternal::DirectReference::DirectReference(const InstancePtr& inst, const Com
}
#else
IceInternal::DirectReference::DirectReference(const InstancePtr& inst, const CommunicatorPtr& com,
- const Identity& ident, const Context& ctx, const string& fs, Mode md,
+ const Identity& ident, const SharedContextPtr& ctx, const string& fs, Mode md,
bool sec, const vector<EndpointPtr>& endpts) :
Reference(inst, com, ident, ctx, fs, md, sec),
_endpoints(endpts)
@@ -921,7 +921,7 @@ void IceInternal::decRef(IceInternal::IndirectReference* p) { p->__decRef(); }
#ifdef ICEE_HAS_ROUTER
IceInternal::IndirectReference::IndirectReference(const InstancePtr& inst, const CommunicatorPtr& com,
- const Identity& ident, const Context& ctx, const string& fs,
+ const Identity& ident, const SharedContextPtr& ctx, const string& fs,
Mode md, bool sec, const string& adptid,
const RouterInfoPtr& rtrInfo, const LocatorInfoPtr& locInfo) :
RoutableReference(inst, com, ident, ctx, fs, md, sec, rtrInfo),
@@ -931,7 +931,7 @@ IceInternal::IndirectReference::IndirectReference(const InstancePtr& inst, const
}
#else
IceInternal::IndirectReference::IndirectReference(const InstancePtr& inst, const CommunicatorPtr& com,
- const Identity& ident, const Context& ctx, const string& fs,
+ const Identity& ident, const SharedContextPtr& ctx, const string& fs,
Mode md, bool sec, const string& adptid,
const LocatorInfoPtr& locInfo) :
Reference(inst, com, ident, ctx, fs, md, sec),
diff --git a/cppe/src/IceE/Reference.h b/cppe/src/IceE/Reference.h
index e16d630c44c..5557fbcef95 100644
--- a/cppe/src/IceE/Reference.h
+++ b/cppe/src/IceE/Reference.h
@@ -25,6 +25,7 @@
#include <IceE/ConnectionF.h>
#include <IceE/Shared.h>
#include <IceE/RecMutex.h>
+#include <IceE/SharedContext.h>
#include <IceE/Identity.h>
namespace IceInternal
@@ -51,7 +52,7 @@ public:
const Ice::Identity& getIdentity() const { return _identity; }
const std::string& getFacet() const { return _facet; }
const InstancePtr& getInstance() const { return _instance; }
- const Ice::Context& getContext() const { return _context; }
+ const SharedContextPtr& getContext() const { return _context; }
ReferencePtr defaultContext() const;
@@ -108,7 +109,7 @@ public:
protected:
- Reference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const Ice::Context&,
+ Reference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&,
const std::string&, Mode, bool);
Reference(const Reference&);
@@ -126,7 +127,7 @@ private:
Mode _mode;
bool _secure;
Ice::Identity _identity;
- Ice::Context _context;
+ SharedContextPtr _context;
std::string _facet;
//
@@ -144,7 +145,7 @@ class FixedReference : public Reference
{
public:
- FixedReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const Ice::Context&,
+ FixedReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&,
const std::string&, Mode, const std::vector<Ice::ConnectionPtr>&);
const std::vector<Ice::ConnectionPtr>& getFixedConnections() const;
@@ -201,7 +202,7 @@ public:
protected:
- RoutableReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const Ice::Context&,
+ RoutableReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&,
const std::string&, Mode, bool, const RouterInfoPtr&);
RoutableReference(const RoutableReference&);
@@ -221,7 +222,7 @@ class DirectReference :
{
public:
- DirectReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const Ice::Context&,
+ DirectReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&,
const std::string&, Mode, bool, const std::vector<EndpointPtr>&
#ifdef ICEE_HAS_ROUTER
, const RouterInfoPtr&
@@ -273,7 +274,7 @@ class IndirectReference :
{
public:
- IndirectReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const Ice::Context&,
+ IndirectReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&,
const std::string&, Mode, bool, const std::string&
#ifdef ICEE_HAS_ROUTER
, const RouterInfoPtr&
diff --git a/cppe/src/IceE/ReferenceFactory.cpp b/cppe/src/IceE/ReferenceFactory.cpp
index 2d9fdee24e4..1c07371db19 100644
--- a/cppe/src/IceE/ReferenceFactory.cpp
+++ b/cppe/src/IceE/ReferenceFactory.cpp
@@ -53,7 +53,7 @@ IceInternal::ReferenceFactory::copy(const Reference* r) const
ReferencePtr
IceInternal::ReferenceFactory::create(const Identity& ident,
- const Context& context,
+ const SharedContextPtr& context,
const string& facet,
Reference::Mode mode,
bool secure,
@@ -89,7 +89,7 @@ IceInternal::ReferenceFactory::create(const Identity& ident,
ReferencePtr
IceInternal::ReferenceFactory::create(const Identity& ident,
- const Context& context,
+ const SharedContextPtr& context,
const string& facet,
Reference::Mode mode,
bool secure,
@@ -126,7 +126,7 @@ IceInternal::ReferenceFactory::create(const Identity& ident,
ReferencePtr
IceInternal::ReferenceFactory::create(const Identity& ident,
- const Context& context,
+ const SharedContextPtr& context,
const string& facet,
Reference::Mode mode,
const vector<Ice::ConnectionPtr>& fixedConnections)
@@ -441,10 +441,10 @@ IceInternal::ReferenceFactory::create(const string& str)
{
#ifdef ICEE_HAS_LOCATOR
# ifdef ICEE_HAS_ROUTER
- return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, "", routerInfo,
+ return create(ident, _instance->getDefaultContext(), facet, mode, secure, "", routerInfo,
locatorInfo);
# else
- return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, "", locatorInfo);
+ return create(ident, _instance->getDefaultContext(), facet, mode, secure, "", locatorInfo);
# endif
#else
ProxyParseException ex(__FILE__, __LINE__);
@@ -503,10 +503,10 @@ IceInternal::ReferenceFactory::create(const string& str)
}
#ifdef ICEE_HAS_ROUTER
- return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, endpoints,
+ return create(ident, _instance->getDefaultContext(), facet, mode, secure, endpoints,
routerInfo);
#else
- return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, endpoints);
+ return create(ident, _instance->getDefaultContext(), facet, mode, secure, endpoints);
#endif
break;
}
@@ -559,10 +559,10 @@ IceInternal::ReferenceFactory::create(const string& str)
}
#ifdef ICEE_HAS_ROUTER
- return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, adapter,
+ return create(ident, _instance->getDefaultContext(), facet, mode, secure, adapter,
routerInfo, locatorInfo);
#else
- return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, adapter,
+ return create(ident, _instance->getDefaultContext(), facet, mode, secure, adapter,
locatorInfo);
#endif
break;
@@ -637,10 +637,10 @@ IceInternal::ReferenceFactory::create(const Identity& ident, BasicStream* s)
endpoints.push_back(endpoint);
}
#ifdef ICEE_HAS_ROUTER
- return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, endpoints,
+ return create(ident, _instance->getDefaultContext(), facet, mode, secure, endpoints,
routerInfo);
#else
- return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, endpoints);
+ return create(ident, _instance->getDefaultContext(), facet, mode, secure, endpoints);
#endif
}
else
@@ -649,10 +649,10 @@ IceInternal::ReferenceFactory::create(const Identity& ident, BasicStream* s)
LocatorInfoPtr locatorInfo = _instance->locatorManager()->get(getDefaultLocator());
s->read(adapterId);
# ifdef ICEE_HAS_ROUTER
- return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, adapterId,
+ return create(ident, _instance->getDefaultContext(), facet, mode, secure, adapterId,
routerInfo, locatorInfo);
# else
- return create(ident, _instance->initializationData().defaultContext, facet, mode, secure, adapterId,
+ return create(ident, _instance->getDefaultContext(), facet, mode, secure, adapterId,
locatorInfo);
# endif
#else
diff --git a/cppe/src/IceE/ReferenceFactory.h b/cppe/src/IceE/ReferenceFactory.h
index 740aa9206e9..f905911fd6c 100644
--- a/cppe/src/IceE/ReferenceFactory.h
+++ b/cppe/src/IceE/ReferenceFactory.h
@@ -31,7 +31,7 @@ public:
//
// Create a direct reference.
//
- ReferencePtr create(const ::Ice::Identity&, const ::Ice::Context&, const ::std::string&,
+ ReferencePtr create(const ::Ice::Identity&, const SharedContextPtr&, const ::std::string&,
Reference::Mode, bool, const ::std::vector<EndpointPtr>&
#ifdef ICEE_HAS_ROUTER
, const RouterInfoPtr&
@@ -41,7 +41,7 @@ public:
// Create an indirect reference.
//
#ifdef ICEE_HAS_LOCATOR
- ReferencePtr create(const ::Ice::Identity&, const ::Ice::Context&, const ::std::string&,
+ ReferencePtr create(const ::Ice::Identity&, const SharedContextPtr&, const ::std::string&,
Reference::Mode, bool, const ::std::string&
#ifdef ICEE_HAS_ROUTER
, const RouterInfoPtr&
@@ -51,7 +51,7 @@ public:
//
// Create a fixed reference.
//
- ReferencePtr create(const ::Ice::Identity&, const ::Ice::Context&, const ::std::string&,
+ ReferencePtr create(const ::Ice::Identity&, const SharedContextPtr&, const ::std::string&,
Reference::Mode, const ::std::vector< ::Ice::ConnectionPtr>&);
//
diff --git a/cppe/src/IceE/SharedContext.h b/cppe/src/IceE/SharedContext.h
new file mode 100644
index 00000000000..6edf640c21d
--- /dev/null
+++ b/cppe/src/IceE/SharedContext.h
@@ -0,0 +1,47 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICEE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef ICEE_SHARED_CONTEXT_H
+#define ICEE_SHARED_CONTEXT_H
+
+#include <IceE/Shared.h>
+#include <IceE/Handle.h>
+#include <string>
+#include <map>
+
+namespace Ice
+{
+typedef ::std::map< ::std::string, ::std::string> Context;
+}
+
+namespace IceInternal
+{
+
+class SharedContext : public IceUtil::Shared
+{
+public:
+
+ SharedContext(const Ice::Context& val) :
+ _val(val)
+ {
+ }
+
+ inline const Ice::Context& getValue()
+ {
+ return _val;
+ }
+
+private:
+
+ Ice::Context _val;
+};
+typedef IceUtil::Handle<SharedContext> SharedContextPtr;
+}
+
+#endif
diff --git a/cppe/test/IceE/operations/Twoways.cpp b/cppe/test/IceE/operations/Twoways.cpp
index 5dd185dbefe..fbeb6fb8e79 100644
--- a/cppe/test/IceE/operations/Twoways.cpp
+++ b/cppe/test/IceE/operations/Twoways.cpp
@@ -646,29 +646,45 @@ twoways(const Ice::CommunicatorPtr& communicator,
//
// Test that default context is obtained correctly from communicator.
//
- Ice::InitializationData initData = initializationData;
- initData.defaultContext["a"] = "b";
- Ice::CommunicatorPtr communicator2 = Ice::initialize(initData);
+ Ice::Context dflt;
+ dflt["a"] = "b";
+ communicator->setDefaultContext(dflt);
+ test(p->opContext() != dflt);
- string ref = communicator2->getProperties()->getPropertyWithDefault(
+ Test::MyClassPrx p2 = Test::MyClassPrx::uncheckedCast(p->ice_context(Ice::Context()));
+ test(p2->opContext().empty());
+
+ p2 = Test::MyClassPrx::uncheckedCast(p->ice_defaultContext());
+ test(p2->opContext() == dflt);
+
+ communicator->setDefaultContext(Ice::Context());
+ test(!p2->opContext().empty());
+
+ communicator->setDefaultContext(dflt);
+ string ref = communicator->getProperties()->getPropertyWithDefault(
"Operations.Proxy", "test:default -p 12010 -t 10000");
- Test::MyClassPrx c = Test::MyClassPrx::checkedCast(communicator2->stringToProxy(ref));
- test(c->opContext() == initData.defaultContext);
+ Test::MyClassPrx c = Test::MyClassPrx::checkedCast(communicator->stringToProxy(ref));
+ test(c->opContext() == dflt);
- Ice::Context ctx;
- ctx["a"] = "c";
- Test::MyClassPrx c2 = Test::MyClassPrx::uncheckedCast(c->ice_context(ctx));
+ dflt["a"] = "c";
+ Test::MyClassPrx c2 = Test::MyClassPrx::uncheckedCast(c->ice_context(dflt));
test(c2->opContext()["a"] == "c");
- ctx.clear();
- Test::MyClassPrx c3 = Test::MyClassPrx::uncheckedCast(c2->ice_context(ctx));
+ dflt.clear();
+ Test::MyClassPrx c3 = Test::MyClassPrx::uncheckedCast(c2->ice_context(dflt));
Ice::Context tmp = c3->opContext();
test(tmp.find("a") == tmp.end());
Test::MyClassPrx c4 = Test::MyClassPrx::uncheckedCast(c2->ice_defaultContext());
test(c4->opContext()["a"] == "b");
- communicator2->destroy();
+ dflt["a"] = "d";
+ communicator->setDefaultContext(dflt);
+
+ Test::MyClassPrx c5 = Test::MyClassPrx::uncheckedCast(c->ice_defaultContext());
+ test(c5->opContext()["a"] == "d");
+
+ communicator->setDefaultContext(Ice::Context());
}
}
diff --git a/javae/CHANGES b/javae/CHANGES
index 676b9e81103..bb8656a17f7 100755
--- a/javae/CHANGES
+++ b/javae/CHANGES
@@ -49,7 +49,7 @@ Changes since version 1.1.0
to be set during communicator creation. Currently included are
Properties, Logger, and default context. The initializeWith
communicator initialization functions have been deprecated and the
- setLogger() and setDefaultContext() methods have been removed.
+ setLogger() method has been removed.
- Added requestId to Current.
diff --git a/javae/src/Ice/Communicator.java b/javae/src/Ice/Communicator.java
index 34787091f4e..bb383f1c8d9 100644
--- a/javae/src/Ice/Communicator.java
+++ b/javae/src/Ice/Communicator.java
@@ -107,10 +107,16 @@ public final class Communicator
_instance.referenceFactory().setDefaultLocator(locator);
}
+ public void
+ setDefaultContext(java.util.Hashtable ctx)
+ {
+ _instance.setDefaultContext(ctx);
+ }
+
public java.util.Hashtable
getDefaultContext()
{
- return _instance.initializationData().defaultContext;
+ return _instance.getDefaultContext();
}
public void
diff --git a/javae/src/IceInternal/Instance.java b/javae/src/IceInternal/Instance.java
index 7fefdd52adc..308fa853e1c 100644
--- a/javae/src/IceInternal/Instance.java
+++ b/javae/src/IceInternal/Instance.java
@@ -128,6 +128,49 @@ public class Instance
}
public void
+ setDefaultContext(java.util.Hashtable ctx)
+ {
+ if(ctx == null || ctx.isEmpty())
+ {
+ _defaultContext = _emptyContext;
+ }
+ else
+ {
+ _defaultContext = new java.util.Hashtable(ctx.size());
+ java.util.Enumeration e = ctx.keys();
+ while(e.hasMoreElements())
+ {
+ java.lang.Object key = e.nextElement();
+ _defaultContext.put(key, ctx.get(key));
+ }
+ }
+ }
+
+ public java.util.Hashtable
+ getDefaultContext()
+ {
+ //
+ // JDK 1.1 raises IllegalArgumentException if we pass 0 as the initial capacity.
+ //
+ if(_defaultContext.isEmpty())
+ {
+ return new java.util.Hashtable();
+ }
+ else
+ {
+ java.util.Hashtable result = new java.util.Hashtable(_defaultContext.size());
+ java.util.Enumeration e = _defaultContext.keys();
+ while(e.hasMoreElements())
+ {
+ java.lang.Object key = e.nextElement();
+ java.lang.Object value = _defaultContext.get(key);
+ result.put(key, value);
+ }
+ return result;
+ }
+ }
+
+ public void
flushBatchRequests()
{
OutgoingConnectionFactory connectionFactory;
@@ -221,7 +264,11 @@ public class Instance
if(_initData.defaultContext == null)
{
- _initData.defaultContext = _emptyContext;
+ _defaultContext = _emptyContext;
+ }
+ else
+ {
+ _defaultContext = _initData.defaultContext;
}
_outgoingConnectionFactory = new OutgoingConnectionFactory(this);
@@ -400,6 +447,7 @@ public class Instance
private ObjectAdapterFactory _objectAdapterFactory;
private final int _threadPerConnectionStackSize;
private EndpointFactory _endpointFactory;
+ private java.util.Hashtable _defaultContext;
private static java.util.Hashtable _emptyContext = new java.util.Hashtable();
private static boolean _oneOffDone = false;
diff --git a/javae/src/IceInternal/Reference.java b/javae/src/IceInternal/Reference.java
index 2472721612d..df719eb4b3c 100644
--- a/javae/src/IceInternal/Reference.java
+++ b/javae/src/IceInternal/Reference.java
@@ -58,7 +58,7 @@ public abstract class Reference
defaultContext()
{
Reference r = _instance.referenceFactory().copy(this);
- r._context = _instance.initializationData().defaultContext;
+ r._context = _instance.getDefaultContext();
return r;
}
diff --git a/javae/src/IceInternal/ReferenceFactory.java b/javae/src/IceInternal/ReferenceFactory.java
index ca87c4bdfbd..00f5f2aa23e 100644
--- a/javae/src/IceInternal/ReferenceFactory.java
+++ b/javae/src/IceInternal/ReferenceFactory.java
@@ -383,7 +383,7 @@ public final class ReferenceFactory
if(beg == -1)
{
- return create(ident, _instance.initializationData().defaultContext, facet, mode, secure, "", routerInfo,
+ return create(ident, _instance.getDefaultContext(), facet, mode, secure, "", routerInfo,
locatorInfo);
}
@@ -435,7 +435,7 @@ public final class ReferenceFactory
Endpoint[] endp = new Endpoint[endpoints.size()];
endpoints.copyInto(endp);
- return create(ident, _instance.initializationData().defaultContext, facet, mode, secure, endp, routerInfo);
+ return create(ident, _instance.getDefaultContext(), facet, mode, secure, endp, routerInfo);
}
else if(s.charAt(beg) == '@')
{
@@ -475,7 +475,7 @@ public final class ReferenceFactory
throw e;
}
adapter = token.value;
- return create(ident, _instance.initializationData().defaultContext, facet, mode, secure, adapter,
+ return create(ident, _instance.getDefaultContext(), facet, mode, secure, adapter,
routerInfo, locatorInfo);
}
@@ -537,14 +537,14 @@ public final class ReferenceFactory
{
endpoints[i] = _instance.endpointFactory().read(s);
}
- return create(ident, _instance.initializationData().defaultContext, facet, mode, secure, endpoints,
+ return create(ident, _instance.getDefaultContext(), facet, mode, secure, endpoints,
routerInfo);
}
else
{
endpoints = new Endpoint[0];
adapterId = s.readString();
- return create(ident, _instance.initializationData().defaultContext, facet, mode, secure, adapterId,
+ return create(ident, _instance.getDefaultContext(), facet, mode, secure, adapterId,
routerInfo, locatorInfo);
}
}
diff --git a/javae/test/IceE/operations/Twoways.java b/javae/test/IceE/operations/Twoways.java
index 66b36467f8a..8b6bc30784d 100644
--- a/javae/test/IceE/operations/Twoways.java
+++ b/javae/test/IceE/operations/Twoways.java
@@ -597,57 +597,70 @@ class Twoways
}
{
+ java.util.Hashtable ctx = new java.util.Hashtable();
+ ctx.put("one", "ONE");
+ ctx.put("two", "TWO");
+ ctx.put("three", "THREE");
{
- java.util.Hashtable ctx = new java.util.Hashtable();
- ctx.put("one", "ONE");
- ctx.put("two", "TWO");
- ctx.put("three", "THREE");
- {
- test(p.ice_getContext().isEmpty());
- java.util.Hashtable r = p.opContext();
- test(!IceUtil.Hashtable.equals(r, ctx));
- }
- {
- java.util.Hashtable r = p.opContext(ctx);
- test(p.ice_getContext().isEmpty());
- test(IceUtil.Hashtable.equals(r, ctx));
- }
- {
- Test.MyClassPrx p2 = Test.MyClassPrxHelper.checkedCast(p.ice_context(ctx));
- test(IceUtil.Hashtable.equals(p2.ice_getContext(), ctx));
- java.util.Hashtable r = p2.opContext();
- test(IceUtil.Hashtable.equals(r, ctx));
- r = p2.opContext(ctx);
- test(IceUtil.Hashtable.equals(r, ctx));
- }
+ test(p.ice_getContext().isEmpty());
+ java.util.Hashtable r = p.opContext();
+ test(!IceUtil.Hashtable.equals(r, ctx));
+ }
+ {
+ java.util.Hashtable r = p.opContext(ctx);
+ test(p.ice_getContext().isEmpty());
+ test(IceUtil.Hashtable.equals(r, ctx));
+ }
+ {
+ Test.MyClassPrx p2 = Test.MyClassPrxHelper.checkedCast(p.ice_context(ctx));
+ test(IceUtil.Hashtable.equals(p2.ice_getContext(), ctx));
+ java.util.Hashtable r = p2.opContext();
+ test(IceUtil.Hashtable.equals(r, ctx));
+ r = p2.opContext(ctx);
+ test(IceUtil.Hashtable.equals(r, ctx));
}
{
//
// Test that default context is obtained correctly from communicator.
//
- initData = (Ice.InitializationData)initData.ice_clone();
- initData.defaultContext = new java.util.Hashtable();
- initData.defaultContext.put("a", "b");
- Ice.Communicator communicator2 = Ice.Util.initialize(new String[0], initData);
+ java.util.Hashtable dflt = new java.util.Hashtable();
+ dflt.put("a", "b");
+ communicator.setDefaultContext(dflt);
+ test(!IceUtil.Hashtable.equals(p.opContext(), dflt));
+
+ Test.MyClassPrx p2 = Test.MyClassPrxHelper.uncheckedCast(p.ice_context(new java.util.Hashtable()));
+ test(p2.opContext().isEmpty());
- String ref = communicator2.getProperties().getPropertyWithDefault("Test.Proxy",
+ p2 = Test.MyClassPrxHelper.uncheckedCast(p.ice_defaultContext());
+ test(IceUtil.Hashtable.equals(p2.opContext(), dflt));
+
+ communicator.setDefaultContext(new java.util.Hashtable());
+ test(!p2.opContext().isEmpty());
+
+ communicator.setDefaultContext(dflt);
+ String ref = communicator.getProperties().getPropertyWithDefault("Test.Proxy",
"test:default -p 12010 -t 10000");
- Test.MyClassPrx c = Test.MyClassPrxHelper.checkedCast(communicator2.stringToProxy(ref));
- test(IceUtil.Hashtable.equals(c.opContext(), initData.defaultContext));
+ Test.MyClassPrx c = Test.MyClassPrxHelper.checkedCast(communicator.stringToProxy(ref));
+ test(IceUtil.Hashtable.equals(c.opContext(), dflt));
- java.util.Hashtable ctx = new java.util.Hashtable();
- ctx.put("a", "c");
- Test.MyClassPrx c2 = Test.MyClassPrxHelper.uncheckedCast(c.ice_context(ctx));
+ dflt.put("a", "c");
+ Test.MyClassPrx c2 = Test.MyClassPrxHelper.uncheckedCast(c.ice_context(dflt));
test(c2.opContext().get("a").equals("c"));
- ctx.clear();
- Test.MyClassPrx c3 = Test.MyClassPrxHelper.uncheckedCast(c2.ice_context(ctx));
+ dflt.clear();
+ Test.MyClassPrx c3 = Test.MyClassPrxHelper.uncheckedCast(c2.ice_context(dflt));
test(c3.opContext().get("a") == null);
Test.MyClassPrx c4 = Test.MyClassPrxHelper.uncheckedCast(c2.ice_defaultContext());
test(c4.opContext().get("a").equals("b"));
- communicator2.destroy();
+ dflt.put("a", "d");
+ communicator.setDefaultContext(dflt);
+
+ Test.MyClassPrx c5 = Test.MyClassPrxHelper.uncheckedCast(c2.ice_defaultContext());
+ test(c5.opContext().get("a").equals("d"));
+
+ communicator.setDefaultContext(new java.util.Hashtable());
}
}