[
https://issues.apache.org/jira/browse/TINKERPOP-1230?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15449827#comment-15449827
]
Michael Pollmeier commented on TINKERPOP-1230:
----------------------------------------------
Sorry for mixing up the versions of documentation. The 'lambda' solution is
sending code as strings over the wire, that's not quite what I had in mind. It
doesn't really matter for dynamic languages, but if used with a statically
compiled language like Scala or Java you lose all the help from the compiler /
IDE.
I see what you're saying re my lambda serialisation project - not ideal.
Another option would be to allow to extend gremlin-server with some endpoints
and additional libraries - the current plugin system is not powerful enough for
that task, is it?
One of the things I'm trying to figure out is how I can use Gremlin-Scala with
DSE graph. I'm having a hard time to see how that could work, since DSE is
closed source and doesn't really allow to extend it with additional libraries.
But since DSE doesn't have a remote protocol (unlike Titan) and I can't really
send remote queries to the integrated Gremlin Server (at least not without
losing all the help from the compiler), I don't currently see a way to
integrate with it. If this is not the right place to discuss such matters, just
let me know - maybe chat is better?
> Serialising lambdas for RemoteGraph
> -----------------------------------
>
> Key: TINKERPOP-1230
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1230
> Project: TinkerPop
> Issue Type: Improvement
> Components: driver, server
> Affects Versions: 3.1.1-incubating
> Reporter: Michael Pollmeier
> Assignee: Marko A. Rodriguez
> Priority: Minor
> Fix For: 3.2.2
>
>
> I just made an attempt to serialise lambdas and send them via the
> RemoteGraph. I didn't quite get there, but wanted to share my findings:
> * it's possible to serialise lambdas on the jvm by just extending
> `Serializable`:
> http://stackoverflow.com/questions/22807912/how-to-serialize-a-lambda/22808112#22808112
> * sending a normal predicate doesn't work (this is a Scala REPL but it should
> be pretty easy to convert this to java/groovy)
> val g = RemoteGraph.open("conf/remote-graph.properties").traversal()
> val pred1 = new java.util.function.Predicate[Traverser[Vertex]] { def
> test(v: Traverser[Vertex]) = true }
> g.V().filter(pred1).toList
> // java.lang.RuntimeException: java.io.NotSerializableException: $anon$1
> // on server: nothing
>
> * simply adding Serializable let's us send it over the wire, but the server
> doesn't deserialise it
> val pred2 = new java.util.function.Predicate[Traverser[Vertex]] with
> Serializable { def test(v: Traverser[Vertex]) = true }
> g.V().filter(pred2).toList
> // on server: [WARN] OpExecutorHandler - Could not deserialize the
> Traversal instance
> org.apache.tinkerpop.gremlin.server.op.OpProcessorException: Could
> not deserialize the Traversal instance
> at
> org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.iterateOp(TraversalOpProcessor.java:135)
> at
> org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler.channelRead0(OpExecutorHandler.java:68)
> // on client:
> org.apache.tinkerpop.gremlin.driver.exception.ResponseException: $anon$1
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)