Figure 7: Default implementation for selecting an object is based on minimum load
CORBA::Object_ptr AWSLoadBalancing::selectObject() { ServerListIterator *srvIter; Server *srvObj; Server *minSrvObj; CORBA::Object_var objVar; objVar = NULL; /* * Find the server object with the smallest load */ minSrvObj = NULL; srvIter = m_serverList.elements(); while ( srvIter->hasMoreElements( ) ) { srvObj = srvIter->nextElement( ); /* * If the server has not updated load information * within the specified update interval, then do not * consider it. */ if (srvObj->getTimeSinceLastUpdate( ) < 2*m_timer->getUpdateInterval( )) { /* * If no initial server is set or the load factor on * this server is smaller than the minimum, save this * server as the new minimum. */ if ( (minSrvObj == NULL) || (srvObj->getLoadFactor( ) < minSrvObj->getLoadFactor( )) ) minSrvObj = srvObj; } } delete srvIter; /* * Get the next object from the chosen server */ if (minSrvObj != NULL) objVar = minSrvObj->selectObject( ); return (objVar != NULL ? CORBA::Object::_duplicate( objVar ) : NULL); }