Znav |
---|
next | Default Servants |
---|
prev | Using Identity Categories with Servant Locators |
---|
|
Occasionally, it can be useful for a servant locator to pass information between locate
and finished
. For example, the implementation of locate
could choose among a number of alternative database backends, depending on load or availability and, to properly finalize state, the implementation of finished
might need to know which database was used by locate
. To support such scenarios, you can create a cookie in your locate
implementation; the Ice run time passes the value of the cookie to finished
after the operation invocation has completed. The cookie must derive from Ice::LocalObject
and can contain whatever state and member functions are useful to your implementation:
Wiki Markup |
---|
{zcode:cpp}
class MyCookie : public virtual Ice::LocalObject {
public:
// Whatever is useful here...
};
typedef IceUtil::Handle<MyCookie> MyCookiePtr;
class MyServantLocator : public virtual Ice::ServantLocator {
public:
virtual Ice::ObjectPtr locate(const Ice::Current& c, Ice::LocalObjectPtr& cookie)
{
// Code as before...
// Allocate and initialize a cookie.
//
cookie = new MyCookie(...);
return new PhoneEntryI;
}
virtual void finished(const Ice::Current& c, const Ice::ObjectPtr& servant,
const Ice::LocalObjectPtr& cookie)
{
// Down-cast cookie to actual type.
//
MyCookiePtr mc = MyCookiePtr::dynamicCast(cookie);
// Use information in cookie to clean up...
//
// ...
}
virtual void deactivate(const std::string& category);
};
{zcode} |
See Also
Znav |
---|
next | Default Servants |
---|
prev | Using Identity Categories with Servant Locators |
---|
|