Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin
Znav
nextPer-Proxy Request Contexts
prevRequest Contexts

Request contexts provide a means of sending an unlimited number of parameters from client to server without having to mention these parameters in the signature of an operation. For example, consider the following definition:

Wiki Markup
{zcode:slice}
struct Address {
    // ...
};

interface Person {
    string setAddress(Address a);
    // ...
};
{zcode}

Assuming that the client has a proxy to a Person object, it could do something along the following lines:

Wiki Markup
{zcode:cpp}
PersonPrx p = ...;
Address a = ...;

Ice::Context ctx;
ctx["write policy"] = "immediate";

p->setAddress(a, ctx);
{zcode}

In Java, the same code would looks as follows:

Wiki Markup
{zcode:java}
PersonPrx p = ...;
Address a = ...;

java.util.Map<String, String> ctx = new java.util.HashMap<String, String>();
ctx.put("write policy", "immediate");

p.setAddress(a, ctx);
{zcode}

In C#, the code is almost identical:

Wiki Markup
{zcode:cs}
using System.Collections.Generic;

PersonPrx p = ...;
Address a = ...;

Dictionary<string, string> ctx = new Dictionary<string, string>();
ctx["write policy"] = "immediate";

p.setAddress(a, ctx);
{zcode}

On the server side, we can extract the policy value set from the Current object to influence how the implementation of setAddress works. A C++ implementation might look like this:

Wiki Markup
{zcode:cpp}
void
PersonI::setAddress(const Address& a, const Ice::Current& c)
{
    Ice::Context::const_iterator i = c.ctx.find("write policy");
    if (i != c.ctx.end() && i->second == "immediate") {

        // Update the address details and write through to the 
        // data base immediately...

    } else {
    
        // Write policy was not set (or had a bad value), use
        // some other database write strategy.
    }
}
{zcode}

For this example, the server examines the value of the context with the key "write policy" and, if that value is "immediate", writes the update sent by the client straight away; if the write policy is not set or contains a value that is not recognized, the server presumably applies a more lenient write policy (such as caching the update in memory and writing it later).

Ztop
See Also
Zret
Znav
nextPer-Proxy Request Contexts
prevRequest Contexts