protected function _getService($key)
    {
        $cache             = $this->_getServiceCache();
        $notFoundException = null;

        try {
            return $cache->get($key, function ($key) use (&$notFoundException) {
                try {
                    $definition = $this->_get($key);
                } catch (NotFoundExceptionInterface $e) {
                    $notFoundException = $e;
                    throw $e;
                }

                 return $this->_resolveDefinition($definition);
            });
        } catch (RootException $e) {
            if ($notFoundException instanceof NotFoundExceptionInterface) {
                throw $notFoundException;
            }

            throw $this->_throwContainerException($this->__('Could not retrieve service'), null, $e, true);
        }
    }