There was a time when I looked into that in pretty grave detail. I don't
recall my findings exactly, but I obviously didn't come up with a nice
solution. I'm not sure that I ever became convinced that any of this groovy
import stuff behaves in a completely deterministic way. I suppose you could
try it out and see if that change helps or not....

On Wed, Feb 14, 2018 at 12:42 PM, Moore, Branden James <bjm...@sandia.gov>
wrote:

> Thanks for fixing issue #1.   I figured that one would be easy to fix.
>
> As for issue #2, I'm wondering if changing the GremlinGroovyScriptEngine
> to add it's ImportCustomizer  (line 247) to the beginning of the list of
> customizers, rather than the end, would allow DSLs (and any other imports)
> to override the default Gremlin imports.
>
> - Branden
>
> On 2/14/18, 8:23 AM, "Stephen Mallette" <spmalle...@gmail.com> wrote:
>
>     Oops - the `getAnonymousTraversalClass()` should get generated
> properly. I
>     created this issue:
>
>     https://issues.apache.org/jira/browse/TINKERPOP-1890
>
>     which i already pushed a fix for:
>
>     https://github.com/apache/tinkerpop/commit/
> 2d7113aaa166b69a8503be27aebf36a8063b82bd
>
>     your second problem....hmm - not sure what to do with that. Trying to
> think
>     of what could be done:
>
>     1. Ugly, but you could always specify the package name......super gross
>     2. You could statically import your anonymous steps in a custom import
> in
>     Gremlin Server so instead of g.persons(__.xxx()) you would do
>     g.persons(xxx()).
>     3. It would be a bit of work, but I suppose the DSL processor could be
>     modified somehow to allow you to rename the DSL double underscore
> class to
>     something else (triple underscore ??? hehe), then you could just
> import it.
>
>     Seems like option 2 would work best in the short term.
>
>
>
>
>
>     On Tue, Feb 13, 2018 at 6:50 PM, Moore, Branden James <
> bjm...@sandia.gov>
>     wrote:
>
>     > Hi all,
>     >
>     >   We are using the @GremlinDsl annotation to extend the Gremlin
> language
>     > into our own DSL.   I’ve run into two issues with anonymous
> traversals so
>     > far that I’d like to bring up.  One has a work-around, the other, I
> have
>     > not yet found a work-around.
>     >
>     > First (the one with the work-around):  The <DSL>TraversalSource
> class that
>     > is generated does not override the ‘getAnonymousTraversalClass()’
> method of
>     > GraphTraversalSource, so the returned class is
> org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
>     >  rather than the auto-generated, DSL-specific version of ‘__’.
> This can
>     > be worked around by specifying your own base class that implementes
>     > ‘getAnonymousTraversalClass()’.   However, this still requires some
>     > oddities, as the code generator interprets the method as a method to
> be
>     > auto-generated.   My solution was to create two levels of
> inheritance:
>     >
>     >   1.  MyDSLTraversalSourceDsl0 extends GraphTraversalSource, and
>     > implements ‘getAnonymousTraversalClass()’
>     >   2.  MyDSLTraversalSourceDsl1 extends MyDSLTraversalSourceDsl0, but
> does
>     > nothing else
>     >   3.  MyDSLTraversalDSL extends GraphTRaversal.Admin<S,E>, and uses
> the
>     > @GremlinDsl(traversalSource = “MyDSLTraversalDSL1”)
>     >
>     >
>     >
>     > The second issue, for which I have not yet found a work-around, is
> that
>     > when using the Gremlin-Groovy scriptEngine as a Gremlin Server, and
> sending
>     > “gremlin” to the server (rather than bytecode), anonymous traversals
> do not
>     > find my DSL’s implementation of __, but rather the TinkerPop __.
>  I’ve
>     > added my ‘__’ to the ImportGremlinPlugin’s classImports.  This is
>     > sufficient for sending bytecode and having my __ found.   However,
> when
>     > sending “gremlin” to the Session Processor, with “eval” as the OP,
> the
>     > groovy class cache finds TinkerPop’s __ rather than my __.    This is
>     > appears to be because in GremlinGroovyScriptEngine, the
> CoreGremlinPlugin’s
>     > customizers get added last to the list of ImportCustomizers.  As it
> is
>     > processed last, when building the map of class names to
> fully-qualified
>     > class names, the Gremlin ‘__’ key overwrites the ‘__’ key which was
>     > specified to be imported in the server’s YAML.   I also came across
> an
>     > interesting comment in ‘ImportGroovyCustomizer’ which forces an
> import of
>     > Tinkerpop’s ‘__’ as well.
>     >
>     > It's quite possible that I’m missing something, if so, could you
> please
>     > point me to how one is supposed to enable a custom DSL with the
>     > Gremlin-Groovy script engine?
>     >
>     > Thanks much,
>     >
>     >   *   Branden
>     >
>     >
>
>
>

Reply via email to