Example #1
0
 /**
  * {@inheritDoc}
  */
 public function executeQuery(QueryInterface $query)
 {
     // ExecuteQueryCommand first! Because a queryClass _IS_ actually invoked.
     if (!is_null($this->gate->getSystemBus())) {
         $executeQueryCommand = new ExecuteQueryCommand();
         $executeQueryCommand->setMessageClass(get_class($query));
         $executeQueryCommand->setMessageVars($query->getMessageVars());
         $executeQueryCommand->setBusName($this->getName());
         $this->gate->getSystemBus()->invokeCommand($executeQueryCommand);
     }
     try {
         $response = $this->bus->executeQuery($query);
         if ($response === false) {
             return false;
         }
     } catch (BusException $ex) {
         //throw it again
         throw $ex;
     } catch (\Exception $ex) {
         throw BusException::defaultBusError($ex->getMessage(), null, $ex);
     }
     // Dispatch the QueryExecutedEvent here! If for example a query could not be executed
     // because it does not exist in the queryHandlerMap[<empty>] this Event would never
     // be dispatched!
     if (!is_null($this->gate->getSystemBus())) {
         $queryExecutedEvent = new QueryExecutedEvent();
         $queryExecutedEvent->setMessageClass(get_class($query));
         $queryExecutedEvent->setMessageVars($query->getMessageVars());
         $queryExecutedEvent->setBusName($this->getName());
         $queryExecutedEvent->setResult($response);
         $this->gate->getSystemBus()->publishEvent($queryExecutedEvent);
     }
     return $response;
 }