public function start()
    {
        try {
            if ($this->state == self::STATE_STARTED) {
                throw new Exception\TransactionException(__METHOD__ . " Starting transaction on an already started one is not permitted.");
            }
            $this->adapter->getDriver()->getConnection()->beginTransaction();
            $this->state = self::STATE_STARTED;
        } catch (\Exception $e) {
            throw new Exception\TransactionException(__METHOD__ . ". Cannot start transaction '{$e->getMessage()}'.");
        }
        return $this;
    }