[ 
https://issues.apache.org/jira/browse/TINKERPOP-1230?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael Pollmeier updated TINKERPOP-1230:
-----------------------------------------
    Description: 
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 


  was:
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 



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

Reply via email to