/**
  * This method return a singleton instance of __HistoryManager instance
  *
  * @return __HistoryManager
  */
 public static function &getInstance()
 {
     if (self::$_instance == null) {
         // Use "Lazy initialization"
         self::$_instance = new __HistoryManager();
     }
     return self::$_instance;
 }
 /**
  * This method dispatch the current request
  * 
  * @param __IRequest &$request The request to process to
  * @param __IResponse &$response The instance to set the response to
  *
  */
 public function processRequest(__IRequest &$request, __IResponse &$response)
 {
     //resolve action identity from request
     $action_identity = $request->getActionIdentity();
     //resolve the action controller associated to the given action identity
     $controller_definition = __ActionControllerResolver::getInstance()->getActionControllerDefinition($action_identity->getControllerCode());
     //check if action controller is requestable
     if ($controller_definition instanceof __ActionControllerDefinition && $controller_definition->isRequestable()) {
         __HistoryManager::getInstance()->addRequest($request);
         //last, execute the action controller
         __ActionDispatcher::getInstance()->dispatch($action_identity);
     } else {
         throw __ExceptionFactory::getInstance()->createException('ERR_ACTION_NON_REQUESTABLE');
     }
 }