2017-06-20 5 views
2

リモートGremlinサーバでトラバーサルを使って頂点を修正しようとしていますが、頂点が作成されたトラバーサルでしか見えないようです。新しいトラバーサルIプロパティは追加されません。Java/Scalaを使ったリモートGremlinサーバグラフの変異

スカラ座/ Javaのクラスタ接続のセットアップコード:

val mapper = GryoMapper.build() 
val cluster = Cluster.build().serializer(new GryoMessageSerializerV1d0(mapper)).create 
val client = cluster.connect[org.apache.tinkerpop.gremlin.driver.Client.ClusteredClient]() 
val graph = EmptyGraph.instance() 
val g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster, "g")) 

この作品:

val v1 = g.addV("person").property("name","stephen").next() 

これにはないが:

g.V(v1.id()).property("age","27") 

これはどちらかとさえjavaのスローしません。 lang.IllegalStateException(propertyAdditionNotSupported)頂点がorg.apache.tinkerpop.gremlin.structure.utであるためil.reference.ReferenceVertex:私はグレムリンコンソールを使用してリモート私は何の問題もなく両方を行うグレムリンServerに接続する場合は

v1.property("age","27") 

:remote connect tinkerpop.server conf/remote.yaml 
gremlin> :> g.addV('person').property('name','stephen') 
==>v[82128] 
gremlin> :> g.V(82128).property('age','27') 
==>v[82128] 
gremlin> :> g.V(82128).valueMap() 
==>[name:[stephen],age:[27]] 

Javaリモート実装が盗難されていますか、何か不足していますか?

+0

は、解決策を見つけなければなりませんでしたトラバーサルの後ろに.iterate()を追加して、まだ理由を理解しようとしています... – user3508638

答えて

2

は、私はあなたが使用しているグラフの実装わからないが、これはTinkerGraphで私の作品:

gremlin> graph = EmptyGraph.instance() 
==>emptygraph[empty] 
gremlin> cluster = Cluster.open() 
==>localhost/127.0.0.1:8182 
gremlin> g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster, "g")) 
==>graphtraversalsource[emptygraph[empty], standard] 
gremlin> v = g.addV().property('name','stephen').next() 
==>v[0] 
gremlin> g.V(v.id()).property('favorite','red') 
==>v[0] 
gremlin> g.V().valueMap() 
==>[name:[stephen],favorite:[red]] 

私はあなたから頂点からnext()をしないでください、あなたの場合よりも注意します:

val v1 = g.addV("person").property("name","stephen") 

私もグレムリンScalaの構文であなたがしなければならない必要があることを前提としています

val v1 = g.addV("person").property("name","stephen").next() 

それ以外の場合はv1Traversalインスタンスになり、VertexではなくTraversalid()が得られます。だからあなたの問題を解決するはずです。

v1.property("age","27")は、あなたが説明した理由では機能しません。頂点は「切り離されている」ため、別のトラバーサルに戻す以外は直接操作できません。また、ほとんどのグラフにこれを行うことができるようになります。

gremlin> g.V(v).property('favorite','red') 
==>v[0] 

id()を参照せず。

+0

あなたの返事をありがとう。私は正しいvertex-idを使用しましたが、いくつかの代替のScalaコードを取り除きました(オリジナルの質問を編集して.next()を追加しました)。あなたの例はGremlin Console内からのものですが、それは動作しますが、私はGremlin Consoleでもこれを行うことができます。しかし、Scala/Javaプログラムからのリモート接続では、既存の頂点を変更することはできません。 私はTinkerGraphとJanusGraphの両方を試しましたが、どちらも動作していないので、Java実装であると仮定します。 – user3508638

0

iterate the traversalにする必要があります。スティーブンの答えはこれについていくつか言及しています。 Gremlin Consoleは自動的にトラバーサルを反復しますが、そうでなければ明示的に行う必要があります。

  • iterate()ゼロの結果を得る
  • next()つの結果
  • toList()は、多くの結果

をゲットするこのチュートリアルでも良い読み物である結果に反復http://tinkerpop.apache.org/docs/current/tutorials/the-gremlin-console/#result-iteration

関連する問題