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

Reply via email to