// ********************************************************************** // // Copyright (c) 2001 // MutableRealms, Inc. // Huntsville, AL, USA // // All Rights Reserved // // ********************************************************************** #include #include #include #include #include using namespace std; using namespace Ice; using namespace IceInternal; IceInternal::Direct::Direct(const ObjectAdapterPtr& adapter, const ReferencePtr& ref, const char* operation) : _adapter(adapter), _reference(ref), _operation(operation) { _servant = _adapter->identityToServant(_reference->identity); try { if (!_servant) { _locator = _adapter->getServantLocator(); if (_locator) { _servant = _locator->locate(_adapter, _reference->identity, _operation, _cookie); } } } catch(...) { if (_locator && _servant) { _locator->finished(_adapter, _reference->identity, _servant, _operation, _cookie); } throw; } if(!_servant) { throw ObjectNotExistException(__FILE__, __LINE__); } } IceInternal::Direct::~Direct() { if (_locator && _servant) { _locator->finished(_adapter, _reference->identity, _servant, _operation, _cookie); } } const ObjectPtr& IceInternal::Direct::servant() { return _servant; }