public function initialize()
    {
        $adapter = null;
        if (is_null($this->_driver)) {
            // No name given for driver initialization
            throw new InvalidArgumentException(
                "Trying to initialize an invalid database adapter."
            );
        }

        if (class_exists($this->_driver)) {
            // Class name given, check if it is an adapter
            $reflection = new ReflectionClass($this->_driver);
            if (
                !$reflection->implementsInterface(
                    'Slick\Database\Adapter\AdapterInterface'
                )
            ) {
                throw new InvalidArgumentException(
                    "The adapter class name {$this->_driver} does not " .
                    "implement Slick\Database\Adapter\AdapterInterface " .
                    "interface."
                );
            }

            return $reflection->newInstanceArgs([$this->_options]);
        }

        switch (strtolower($this->_driver)) {
            case 'mysql':
                $adapter = $this->_createAdapter('mysql');
                break;

            case 'sqlite':
                $adapter = $this->_createAdapter('sqlite');
                break;

            default:
                throw new InvalidArgumentException(
                    "Trying to initialize an unknown database adapter."
                );
        }

        return $adapter;
    }