[ 
https://issues.apache.org/jira/browse/TINKERPOP-1230?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15449860#comment-15449860
 ] 

stephen mallette commented on TINKERPOP-1230:
---------------------------------------------

yes - i think deploying additional libs (with the lambdas in them) to gremlin 
server and to the client would work from the serialization perspective. Of 
course, we had a discussion on the dev mailing list a while back about dropping 
JVM serialization of a Traversal for communication with Gremlin Server (in 
favor of just Bytecode), so technically it won't help now. That code is easy to 
resurrect though and could be implemented as a custom {{OpProcessor}} without 
too much trouble.

With respect to DSE Graph, you would have to use the {{withRemote()}} feature 
of TinkerPop. Of course, that still doesn't make the transition seamless or 
solve all the problems you would likely have. You should be able to put libs in 
DSE's path so that Gremlin Server could pick them up. So you could at least 
move your logic to the server where the graph instances live. I imagine it 
might mean you have to refactor a bit to get that all to work nicely though.....

> 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)

Reply via email to