summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Proxy.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2002-09-04 05:39:57 +0000
committerMichi Henning <michi@zeroc.com>2002-09-04 05:39:57 +0000
commita5da64185ba234ae8dfdec11764e1821bbc67a57 (patch)
tree4aa60640dbb0b01960e8aa644ef9179594e28b6d /cpp/src/Ice/Proxy.cpp
parentfix (diff)
downloadice-a5da64185ba234ae8dfdec11764e1821bbc67a57.tar.bz2
ice-a5da64185ba234ae8dfdec11764e1821bbc67a57.tar.xz
ice-a5da64185ba234ae8dfdec11764e1821bbc67a57.zip
Changed Current.ice to use enum OperationMode to distinguish between
Normal, Nonmutating, and Idempotent operations. Fixed bug introduced into Freeze with previous changes for saving object state. (State wasn't saved for idempotent operations.) Retested everything. I'm getting a failure in the Yellow (C++) tests, and another failure in the IceBox (Java) tests, but I don't think these are related to these changes.
Diffstat (limited to 'cpp/src/Ice/Proxy.cpp')
-rw-r--r--cpp/src/Ice/Proxy.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp
index 098987d2d24..bdbf6b52cbe 100644
--- a/cpp/src/Ice/Proxy.cpp
+++ b/cpp/src/Ice/Proxy.cpp
@@ -249,7 +249,7 @@ IceProxy::Ice::Object::ice_facets(const Context& __context)
bool
IceProxy::Ice::Object::ice_invoke(const string& operation,
- bool idempotent,
+ OperationMode mode,
const vector<Byte>& inParams,
vector<Byte>& outParams,
const Context& context)
@@ -260,7 +260,7 @@ IceProxy::Ice::Object::ice_invoke(const string& operation,
try
{
Handle< ::IceDelegate::Ice::Object> __del = __getDelegate();
- return __del->ice_invoke(operation, idempotent, inParams, outParams, context);
+ return __del->ice_invoke(operation, mode, inParams, outParams, context);
}
catch(const LocationForward& __ex)
{
@@ -268,7 +268,8 @@ IceProxy::Ice::Object::ice_invoke(const string& operation,
}
catch(const NonRepeatable& __ex)
{
- if(idempotent)
+ bool canRetry = mode == Nonmutating || mode == Idempotent;
+ if(canRetry)
{
__handleException(*__ex.get(), __cnt);
}
@@ -746,7 +747,7 @@ bool
IceDelegateM::Ice::Object::ice_isA(const string& __id, const Context& __context)
{
static const string __operation("ice_isA");
- Outgoing __out(__connection, __reference, __operation, true, __context);
+ Outgoing __out(__connection, __reference, __operation, ::Ice::Nonmutating, __context);
BasicStream* __is = __out.is();
BasicStream* __os = __out.os();
__os->write(__id);
@@ -763,7 +764,7 @@ void
IceDelegateM::Ice::Object::ice_ping(const Context& __context)
{
static const string __operation("ice_ping");
- Outgoing __out(__connection, __reference, __operation, true, __context);
+ Outgoing __out(__connection, __reference, __operation, ::Ice::Nonmutating, __context);
if(!__out.invoke())
{
throw ::Ice::UnknownUserException(__FILE__, __LINE__);
@@ -774,7 +775,7 @@ vector<string>
IceDelegateM::Ice::Object::ice_ids(const Context& __context)
{
static const string __operation("ice_ids");
- Outgoing __out(__connection, __reference, __operation, true, __context);
+ Outgoing __out(__connection, __reference, __operation, ::Ice::Nonmutating, __context);
BasicStream* __is = __out.is();
if(!__out.invoke())
{
@@ -789,7 +790,7 @@ string
IceDelegateM::Ice::Object::ice_id(const Context& __context)
{
static const string __operation("ice_id");
- Outgoing __out(__connection, __reference, __operation, true, __context);
+ Outgoing __out(__connection, __reference, __operation, ::Ice::Nonmutating, __context);
BasicStream* __is = __out.is();
if(!__out.invoke())
{
@@ -804,7 +805,7 @@ vector<string>
IceDelegateM::Ice::Object::ice_facets(const Context& __context)
{
static const string __operation("ice_facets");
- Outgoing __out(__connection, __reference, __operation, true, __context);
+ Outgoing __out(__connection, __reference, __operation, ::Ice::Nonmutating, __context);
BasicStream* __is = __out.is();
if(!__out.invoke())
{
@@ -817,12 +818,12 @@ IceDelegateM::Ice::Object::ice_facets(const Context& __context)
bool
IceDelegateM::Ice::Object::ice_invoke(const string& operation,
- bool idempotent,
+ ::Ice::OperationMode mode,
const vector<Byte>& inParams,
vector<Byte>& outParams,
const Context& context)
{
- Outgoing __out(__connection, __reference, operation, idempotent, context);
+ Outgoing __out(__connection, __reference, operation, mode, context);
BasicStream* __os = __out.os();
__os->writeBlob(inParams);
bool ok = __out.invoke();
@@ -1054,7 +1055,7 @@ bool
IceDelegateD::Ice::Object::ice_isA(const string& __id, const Context& __context)
{
Current __current;
- __initCurrent(__current, "ice_isA", true, __context);
+ __initCurrent(__current, "ice_isA", ::Ice::Nonmutating, __context);
while(true)
{
Direct __direct(__adapter, __current);
@@ -1082,7 +1083,7 @@ void
IceDelegateD::Ice::Object::ice_ping(const ::Ice::Context& __context)
{
Current __current;
- __initCurrent(__current, "ice_ping", true, __context);
+ __initCurrent(__current, "ice_ping", ::Ice::Nonmutating, __context);
while(true)
{
Direct __direct(__adapter, __current);
@@ -1110,7 +1111,7 @@ vector<string>
IceDelegateD::Ice::Object::ice_ids(const ::Ice::Context& __context)
{
Current __current;
- __initCurrent(__current, "ice_ids", true, __context);
+ __initCurrent(__current, "ice_ids", ::Ice::Nonmutating, __context);
while(true)
{
Direct __direct(__adapter, __current);
@@ -1138,7 +1139,7 @@ string
IceDelegateD::Ice::Object::ice_id(const ::Ice::Context& __context)
{
Current __current;
- __initCurrent(__current, "ice_id", true, __context);
+ __initCurrent(__current, "ice_id", ::Ice::Nonmutating, __context);
while(true)
{
Direct __direct(__adapter, __current);
@@ -1166,7 +1167,7 @@ vector<string>
IceDelegateD::Ice::Object::ice_facets(const ::Ice::Context& __context)
{
Current __current;
- __initCurrent(__current, "ice_facets", true, __context);
+ __initCurrent(__current, "ice_facets", ::Ice::Nonmutating, __context);
while(true)
{
Direct __direct(__adapter, __current);
@@ -1192,13 +1193,13 @@ IceDelegateD::Ice::Object::ice_facets(const ::Ice::Context& __context)
bool
IceDelegateD::Ice::Object::ice_invoke(const string& operation,
- bool idempotent,
+ ::Ice::OperationMode mode,
const vector<Byte>& inParams,
vector<Byte>& outParams,
const ::Ice::Context& context)
{
Current current;
- __initCurrent(current, operation, idempotent, context);
+ __initCurrent(current, operation, mode, context);
while(true)
{
Direct __direct(__adapter, current);
@@ -1253,12 +1254,13 @@ IceDelegateD::Ice::Object::__copyFrom(const ::IceInternal::Handle< ::IceDelegate
}
void
-IceDelegateD::Ice::Object::__initCurrent(Current& current, const string& op, bool idempotent, const Context& context)
+IceDelegateD::Ice::Object::__initCurrent(Current& current, const string& op, ::Ice::OperationMode mode,
+ const Context& context)
{
current.id = __reference->identity;
current.facet = __reference->facet;
current.operation = op;
- current.idempotent = idempotent;
+ current.mode = mode;
current.ctx = context;
}