0

Neo4jデータベースでGremlinを使用しています。ティンカーグラフデータベースをロードしてグレムリントラバーサルを実行することはできますが、ローカルデータベースをロードしてトラバーサルを実行することはできません。

コンソールのいじくり回すグラフから、次のコマンドを使用していますが、正常に機能します。

g = new TinkerGraph();
g.loadGraphXML('/db/data/graph-example-1.xml');
g.V.name    this works fine and getting the expected results.

Javaコードからでも私はそれを行うことができます。私は次のように同じコマンドを送信します:

final String scriptURI = SERVER_ROOT_URI + "ext/GremlinPlugin/graphdb/execute_script";
WebResource resource = Client.create().resource(scriptURI);
String entity = toJsonNameValuePairCollection("script", " g = new TinkerGraph();g.loadGraphXML('/db/data/graph-example-1.xml');g.V.name");
ClientResponse response = resource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).entity(entity .post(ClientResponse.class);

しかし、「db / data /」で作成したハードディスクからデータにアクセスしようとすると、コンソールでは正常に機能しますが、Javaコードでは機能しません。

コンソールコマンド:

g = new Neo4jGraph('db / data /'); gVname

期待どおりの出力が得られます。

しかし、Javaコードを介して、次のエラーが発生します:javax.script.ScriptException:java.lang.RuntimeException:java.io.FileNotFoundException

私のJavaコードは次のとおりです。

最終的な文字列scriptURI=SERVER_ROOT_URI + "ext / GremlinPlugin /graphdb / execute_script"; WebResourceリソース=Client.create()。resource(scriptURI); 文字列エンティティ=toJsonNameValuePairCollection( "script"、 "g = new Neo4jGraph('db / data /'); gVname"); ClientResponse応答=resource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).entity(entity .post(ClientResponse.class);

4

1 に答える 1

0

Neo4j サーバーでは、g は既にサーバーの Neo4j グラフ インスタンスにバインドされているため、直接使用できます (Gremlin プラグインへの REST 呼び出しで g = new Neo4jGraph() を省略します)。

最後に、本当に新しいデータベースを開く必要がある場合は、スクリプト内の「db/data/」が必要な場所を指していることを確認してください。これは相対パスであるため、サーバーの作業ディレクトリに相対的です。多分あなたは最初に行うことができます

dir = new File('db/data') dir.getAbsolutePath()

そしてそれを返しますか?

于 2011-09-22T10:41:13.287 に答える