You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2015/04/15 19:48:09 UTC

[47/50] incubator-tinkerpop git commit: added ShellGraph so Graph.empty() is no longer needed. Its a placeholder for the graphClass and computer in OLAP situations.

added ShellGraph so Graph.empty() is no longer needed. Its a placeholder for the graphClass and computer in OLAP situations.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/23c95c3e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/23c95c3e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/23c95c3e

Branch: refs/heads/variables
Commit: 23c95c3e792d3842d2b036a1b136ceafb2c8a14b
Parents: 6318053
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Apr 15 09:26:24 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Apr 15 09:26:33 2015 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 .../traversal/TraversalScriptSupplier.java      |   3 +-
 .../process/computer/util/ShellGraph.java       | 283 +++++++++++++++++++
 .../process/traversal/TraversalStrategies.java  |  13 +-
 .../dsl/graph/GraphTraversalSource.java         |   5 +-
 .../traversal/util/DefaultTraversal.java        |   2 +-
 .../tinkerpop/gremlin/structure/Graph.java      |   8 -
 .../computer/example/TraversalSupplier1.java    |   3 +-
 .../computer/example/TraversalSupplier2.java    |   3 +-
 .../computer/example/TraversalSupplier3.java    |   3 +-
 .../gremlin/hadoop/structure/HadoopGraph.java   |   6 -
 11 files changed, 305 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 7fcf628..db78b78 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
 TinkerPop 3.0.0.M9 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* `Graph.empty()` no longer required with the introduction of `ShellGraph` which is a placeholder for a graph class and computer.
 * `VertexProperty.Cardinality` default is now vendor chosen. If the vendor has not preference, they should use `Cardinality.single`.
 * `Messenger.receiveMessages()` no longer takes a `MessageScope` and thus, consistent behavior between message-passing and message-pulling systems.
 * Changed the `gremlin.tests` environment variable for test filtering to the more standard convention of `GREMLIN_TESTS` and made it work for all test suites.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScriptSupplier.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScriptSupplier.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScriptSupplier.java
index 03e0afc..3e5179d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScriptSupplier.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalScriptSupplier.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.process.computer.traversal;
 
+import org.apache.tinkerpop.gremlin.process.computer.util.ShellGraph;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.computer.util.ScriptEngineCache;
@@ -50,7 +51,7 @@ public final class TraversalScriptSupplier<S, E> implements Supplier<Traversal.A
         try {
             final ScriptEngine engine = ScriptEngineCache.get(this.scriptEngineName);
             final Bindings bindings = engine.createBindings();
-            bindings.put("g", this.traversalContextBuilder.create(Graph.empty(this.graphClass)));
+            bindings.put("g", this.traversalContextBuilder.create(new ShellGraph(this.graphClass)));
             return (Traversal.Admin<S, E>) engine.eval(this.traversalScript, bindings);
         } catch (final ScriptException e) {
             throw new IllegalStateException(e.getMessage(), e);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/ShellGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/ShellGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/ShellGraph.java
new file mode 100644
index 0000000..e03be95
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/ShellGraph.java
@@ -0,0 +1,283 @@
+/*
+ *
+ *  * Licensed to the Apache Software Foundation (ASF) under one
+ *  * or more contributor license agreements.  See the NOTICE file
+ *  * distributed with this work for additional information
+ *  * regarding copyright ownership.  The ASF licenses this file
+ *  * to you under the Apache License, Version 2.0 (the
+ *  * "License"); you may not use this file except in compliance
+ *  * with the License.  You may obtain a copy of the License at
+ *  *
+ *  * http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing,
+ *  * software distributed under the License is distributed on an
+ *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  * KIND, either express or implied.  See the License for the
+ *  * specific language governing permissions and limitations
+ *  * under the License.
+ *
+ */
+
+package org.apache.tinkerpop.gremlin.process.computer.util;
+
+import org.apache.commons.configuration.BaseConfiguration;
+import org.apache.commons.configuration.Configuration;
+import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
+import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Transaction;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.concurrent.Future;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class ShellGraph implements Graph, Serializable {
+
+    private final Class<? extends Graph> graphClass;
+    public static final String SHELL_GRAPH_CLASS = "shell.graphClass";
+
+    public ShellGraph(final Class<? extends Graph> graphClass) {
+        this.graphClass = graphClass;
+    }
+
+    @Override
+    public Vertex addVertex(final Object... keyValues) {
+        throw Exceptions.vertexAdditionsNotSupported();
+    }
+
+    @Override
+    public <C extends GraphComputer> C compute(final Class<C> graphComputerClass) throws IllegalArgumentException {
+        return (C) ShellGraphComputer.instance();
+    }
+
+    @Override
+    public GraphComputer compute() throws IllegalArgumentException {
+        return ShellGraphComputer.instance();
+    }
+
+    @Override
+    public Iterator<Vertex> vertices(final Object... vertexIds) {
+        return Collections.emptyIterator();
+    }
+
+    @Override
+    public Iterator<Edge> edges(final Object... edgeIds) {
+        return Collections.emptyIterator();
+    }
+
+    @Override
+    public Transaction tx() {
+        throw Exceptions.transactionsNotSupported();
+    }
+
+    @Override
+    public Variables variables() {
+        throw Exceptions.variablesNotSupported();
+    }
+
+    @Override
+    public Configuration configuration() {
+        final Configuration configuration = new BaseConfiguration();
+        configuration.setProperty(Graph.GRAPH, ShellGraph.class.getName());
+        configuration.setProperty(SHELL_GRAPH_CLASS, this.graphClass);
+        return configuration;
+    }
+
+    @Override
+    public void close() throws Exception {
+
+    }
+
+    public Class<? extends Graph> getGraphClass() {
+        return this.graphClass;
+    }
+
+    public static ShellGraph open(final Configuration configuration) {
+        return new ShellGraph((Class<? extends Graph>) configuration.getProperty(SHELL_GRAPH_CLASS));
+    }
+
+    public static ShellGraph of(final Class<? extends Graph> graphClass) {
+        return new ShellGraph(graphClass);
+    }
+
+    private static class ShellGraphComputer implements GraphComputer {
+
+        private static final ShellGraphComputer INSTANCE = new ShellGraphComputer();
+
+        @Override
+        public GraphComputer isolation(final Isolation isolation) {
+            return this;
+        }
+
+        @Override
+        public GraphComputer result(final ResultGraph resultGraph) {
+            return this;
+        }
+
+        @Override
+        public GraphComputer persist(final Persist persist) {
+            return this;
+        }
+
+        @Override
+        public GraphComputer program(final VertexProgram vertexProgram) {
+            return this;
+        }
+
+        @Override
+        public GraphComputer mapReduce(final MapReduce mapReduce) {
+            return this;
+        }
+
+        @Override
+        public Future<ComputerResult> submit() {
+            throw new UnsupportedOperationException(ShellGraphComputer.class.getCanonicalName() + " can not be executed as it is simply a placeholder");
+        }
+
+        public static ShellGraphComputer instance() {
+            return INSTANCE;
+        }
+    }
+
+    public class Features implements Graph.Features {
+
+        @Override
+        public GraphFeatures graph() {
+            return new GraphFeatures() {
+                @Override
+                public boolean supportsComputer() {
+                    return true;
+                }
+
+                @Override
+                public boolean supportsPersistence() {
+                    return false;
+                }
+
+                @Override
+                public boolean supportsTransactions() {
+                    return false;
+                }
+
+                @Override
+                public boolean supportsThreadedTransactions() {
+                    return false;
+                }
+
+                @Override
+                public VariableFeatures variables() {
+                    return new VariableFeatures() {
+                        @Override
+                        public boolean supportsVariables() {
+                            return false;
+                        }
+                    };
+                }
+            };
+        }
+
+        @Override
+        public VertexFeatures vertex() {
+            return new VertexFeatures() {
+                @Override
+                public boolean supportsAddVertices() {
+                    return false;
+                }
+
+                @Override
+                public boolean supportsRemoveVertices() {
+                    return false;
+                }
+
+                @Override
+                public boolean supportsMultiProperties() {
+                    return false;
+                }
+
+                @Override
+                public boolean supportsMetaProperties() {
+                    return false;
+                }
+
+                @Override
+                public VertexPropertyFeatures properties() {
+                    return new VertexPropertyFeatures() {
+                        @Override
+                        public boolean supportsAddProperty() {
+                            return false;
+                        }
+
+                        @Override
+                        public boolean supportsRemoveProperty() {
+                            return false;
+                        }
+
+                        @Override
+                        public boolean supportsUserSuppliedIds() {
+                            return false;
+                        }
+
+                        @Override
+                        public boolean supportsNumericIds() {
+                            return false;
+                        }
+
+                        @Override
+                        public boolean supportsStringIds() {
+                            return false;
+                        }
+
+                        @Override
+                        public boolean supportsUuidIds() {
+                            return false;
+                        }
+
+                        @Override
+                        public boolean supportsCustomIds() {
+                            return false;
+                        }
+
+                        @Override
+                        public boolean supportsAnyIds() {
+                            return false;
+                        }
+                    };
+                }
+            };
+        }
+
+        @Override
+        public EdgeFeatures edge() {
+            return new EdgeFeatures() {
+                @Override
+                public boolean supportsAddEdges() {
+                    return false;
+                }
+
+                @Override
+                public boolean supportsRemoveEdges() {
+                    return false;
+                }
+
+                @Override
+                public EdgePropertyFeatures properties() {
+                    return new EdgePropertyFeatures() {
+                        @Override
+                        public boolean supportsProperties() {
+                            return false;
+                        }
+                    };
+                }
+            };
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index 8bd3446..92bc7b5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@ -18,18 +18,19 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal;
 
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComparatorHolderRemovalStrategy;
+import org.apache.tinkerpop.gremlin.process.computer.util.ShellGraph;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ConjunctionStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.DedupOptimizerStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EngineDependentStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LabeledEndStepStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchWhereStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProfileStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RangeByIsCountStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComparatorHolderRemovalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EngineDependentStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LabeledEndStepStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.TraversalVerificationStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserGeneratorFactory;
+import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
 import org.apache.tinkerpop.gremlin.util.tools.MultiMap;
@@ -190,6 +191,10 @@ public interface TraversalStrategies extends Serializable, Cloneable {
             }
             return traversalStrategies;
         }
+
+        public static Class<? extends Graph> getGraphClass(final Graph graph) {
+            return graph instanceof ShellGraph ? ((ShellGraph) graph).getGraphClass() : graph.getClass();
+        }
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index 00090e8..0dd884f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -68,7 +68,7 @@ public class GraphTraversalSource implements TraversalSource {
         this.engine = engine;
         this.withStrategies = withStrategies;
         this.withoutStrategies = withoutStrategies;
-        final TraversalStrategies tempStrategies = TraversalStrategies.GlobalCache.getStrategies(this.graph.getClass());
+        final TraversalStrategies tempStrategies = TraversalStrategies.GlobalCache.getStrategies(TraversalStrategies.GlobalCache.getGraphClass(this.graph));
         this.strategies = withStrategies.isEmpty() && withoutStrategies.isEmpty() ?
                 tempStrategies :
                 tempStrategies.clone()
@@ -137,7 +137,8 @@ public class GraphTraversalSource implements TraversalSource {
         private List<TraversalStrategy> withStrategies = null;
         private List<Class<? extends TraversalStrategy>> withoutStrategies = null;
 
-        private Builder() {}
+        private Builder() {
+        }
 
         @Override
         public Builder engine(final TraversalEngine.Builder engineBuilder) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
index 71e286d..6e9f653 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
@@ -58,7 +58,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
 
     public DefaultTraversal(final Graph graph) {
         this.graph = graph;
-        this.setStrategies(TraversalStrategies.GlobalCache.getStrategies(this.graph.getClass()));
+        this.setStrategies(TraversalStrategies.GlobalCache.getStrategies(TraversalStrategies.GlobalCache.getGraphClass(this.graph)));
         this.traversalEngine = StandardTraversalEngine.instance(); // TODO: remove and then clean up v.outE
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
index 8c0acf5..f01441c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
@@ -108,14 +108,6 @@ public interface Graph extends AutoCloseable {
         }
     }
 
-    public static <G extends Graph> G empty(final Class<G> graphClass) {
-        try {
-            return (G) graphClass.getMethod("empty").invoke(null);
-        } catch (final Exception e) {
-            throw new IllegalArgumentException(e.getMessage(), e);
-        }
-    }
-
     /**
      * Add a {@link Vertex} to the graph given an optional series of key/value pairs.  These key/values
      * must be provided in an even number where the odd numbered arguments are {@link String} property keys and the

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier1.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier1.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier1.java
index 4429a4b..f5d19c2 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier1.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier1.java
@@ -19,6 +19,7 @@
 package org.apache.tinkerpop.gremlin.hadoop.process.computer.example;
 
 import org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph;
+import org.apache.tinkerpop.gremlin.process.computer.util.ShellGraph;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 
 import java.util.function.Supplier;
@@ -29,6 +30,6 @@ import java.util.function.Supplier;
 public class TraversalSupplier1 implements Supplier<Traversal> {
     @Override
     public Traversal get() {
-        return HadoopGraph.empty().traversal().V().out().out().values("name");
+        return ShellGraph.of(HadoopGraph.class).traversal().V().out().out().values("name");
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier2.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier2.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier2.java
index 2bb0cf2..7636495 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier2.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier2.java
@@ -19,6 +19,7 @@
 package org.apache.tinkerpop.gremlin.hadoop.process.computer.example;
 
 import org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph;
+import org.apache.tinkerpop.gremlin.process.computer.util.ShellGraph;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 
 import java.util.function.Supplier;
@@ -29,6 +30,6 @@ import java.util.function.Supplier;
 public class TraversalSupplier2 implements Supplier<Traversal> {
     @Override
     public Traversal get() {
-        return HadoopGraph.empty().traversal().V().<String>values("name").map(s -> s.get().length()).groupCount().<Integer>by(i -> i + 100);
+        return ShellGraph.of(HadoopGraph.class).traversal().V().<String>values("name").map(s -> s.get().length()).groupCount().<Integer>by(i -> i + 100);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier3.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier3.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier3.java
index 1d768f2..296937f 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier3.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/example/TraversalSupplier3.java
@@ -19,6 +19,7 @@
 package org.apache.tinkerpop.gremlin.hadoop.process.computer.example;
 
 import org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph;
+import org.apache.tinkerpop.gremlin.process.computer.util.ShellGraph;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 
 import java.util.Collection;
@@ -30,6 +31,6 @@ import java.util.function.Supplier;
 public class TraversalSupplier3 implements Supplier<Traversal> {
     @Override
     public Traversal get() {
-        return HadoopGraph.empty().traversal().V().<String>values("name").group().<String>by(s -> s.substring(1, 2)).by(v -> v).<Collection>by(Collection::size);
+        return ShellGraph.of(HadoopGraph.class).traversal().V().<String>values("name").group().<String>by(s -> s.substring(1, 2)).by(v -> v).<Collection>by(Collection::size);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/23c95c3e/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
index e1fa5b3..3999d80 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
@@ -126,8 +126,6 @@ public class HadoopGraph implements Graph {
 
     public static final Logger LOGGER = LoggerFactory.getLogger(HadoopGraph.class);
 
-    private static final HadoopGraph EMPTY = HadoopGraph.open();
-
     private static final Configuration EMPTY_CONFIGURATION = new BaseConfiguration() {{
         this.setProperty(Graph.GRAPH, HadoopGraph.class.getName());
     }};
@@ -138,10 +136,6 @@ public class HadoopGraph implements Graph {
         this.configuration = new HadoopConfiguration(configuration);
     }
 
-    public static HadoopGraph empty() {
-        return EMPTY;
-    }
-
     public static HadoopGraph open() {
         return HadoopGraph.open(null);
     }