I am trying to determine the cause of what seems to be a discrepancy in the way rexster handles user defined Gremlin queries, compared with the gremlin shell.
I am using:
- rexster-server-2.6.0;
- gremlin-groovy-2.5.0;
- orientdb-community-1.7.9;
I have loaded in to orient a graph representing a simple hierarchy tree. Each node has an edge labeled 'parent' that points to its parent. It is a DAG.
I have defined a user-defined step in Gremlin (loaded into rexster via its init-scripts) as follows:
Gremlin.defineStep('children',
[Vertex, Pipe],
{int depth -> _().out('parent').loop(1)
{it.loops < depth}
{it.object != null}
})
When using the command-line gremlin tool in the rexster doghouse, with these commands, I get the following error (scroll to right to see entire error message):
gremlin> g.V('type', 'LSNetwork')
==>v[#9:6312]
gremlin> g.V('type', 'LSNetwork').out('parent').out('parent').name
==>Leaf 0
==>Leaf 1
==>Leaf 2
==>Leaf 3
gremlin> g.V('type', 'LSNetwork').children(2)
==>javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: com.tinkerpop.gremlin.groovy.GremlinGroovyPipeline.children() is applicable for argument types: (java.lang.Integer) values: [2]
However, if I fire up the gremlin.sh, connect to my graph, define the step, and execute it, it works perfectly:
gremlin> Gremlin.defineStep('children', [Vertex, Pipe], {int depth -> _().out('parent').loop(1){it.loops < depth}{it.object != null}})
==>null
gremlin> sg=new OrientGraph('remote:localhost/scratch')
==>orientgraph[remote:localhost/scratch]
gremlin> sg.V('type','LSNetwork').children(3).name
==>Spine 0
==>Spine 1
==>Leaf 0
==>Leaf 1
==>Leaf 2
==>Leaf 3
(Note: the names are correct and what I expect to see).
Why is my gremlin script working from the gremlin console, but not through bulbs/rexster?
Thanks in advance and any help, insights, or pointers to appropriate documentation are appreciated.
I'm not having a problem with this when using a version of the
codeveloper
step defined in the documentation:seems to work in Dog House as well. My best guess is that Rexster is not finding the script. Are you sure you have your path right for the
<init-scripts>
setting? You should see this log entry if an init script was properly specified and loaded:You won't see it until the
ScriptEngine
is started which won't happen until you make a request against it (i.e. like my curl command above).