public static Graph open(final Configuration configuration) {
        if (null == configuration)
            throw Graph.Exceptions.argumentCanNotBeNull("configuration");

        final String clazz = configuration.getString(Graph.GRAPH, null);
        if (null == clazz)
            throw new RuntimeException(String.format("Configuration must contain a valid '%s' setting", Graph.GRAPH));

        final Class<?> graphClass;
        try {
            graphClass = Class.forName(clazz);
        } catch (final ClassNotFoundException e) {
            throw new RuntimeException(String.format("GraphFactory could not find [%s] - Ensure that the jar is in the classpath", clazz));
        }

        // If the graph class specifies a factory class then use that instead of the specified class.
        final GraphFactoryClass factoryAnnotation = graphClass.getAnnotation(GraphFactoryClass.class);
        final Class<?> factoryClass = factoryAnnotation != null ? factoryAnnotation.value() : graphClass;

        return open(configuration, factoryClass);
    }
Open a graph.  See each {@link Graph} instance for its configuration options.

@param configuration A configuration object that specifies the minimally required properties for a
                     {@link Graph} instance. This minimum is determined by the
                     {@link Graph} instance itself.
@return A {@link Graph} instance.
@throws IllegalArgumentException if {@code configuration}
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/GraphFactory.java