Michael Pollmeier created TINKERPOP-1230:
--------------------------------------------
Summary: Serialising lambdas for RemoteGraph
Key: TINKERPOP-1230
URL: https://issues.apache.org/jira/browse/TINKERPOP-1230
Project: TinkerPop
Issue Type: Improvement
Components: driver, server
Reporter: Michael Pollmeier
Priority: Minor
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)