Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Neo4j をJavaプログラムから使う(ローカルとリモート)初心者向け/Java開発者向け@madgaoh
今日の登場人物ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)Cyphe...
必要なjarファイルをclasspathに通すhttp://docs.neo4j.org/chunked/stable/tutorials-java-embedded-setup.html• Neo4jをダウンロードして libディレクトリの下...
ローカルで使うdataEmbeddedGraphDatabaseneo4j-kernelEmbeddedGraphDatabase graphdb= new EmbeddedGraphDatabase("path/to/db/data");No...
ローカルで使うdataEmbeddedGraphDatabaseneo4j-kernelEmbeddedGraphDatabase graphdb= new EmbeddedGraphDatabase("path/to/db/data");No...
ローカルで使う(ファクトリ経由で生成する)<<interface>>GraphDatabaseServicedataEmbeddedGraphDatabaseneo4j-kernelGraphDatabaseService graphdb= n...
ローカルで使う(ビルダーでカスタマイズする)<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabasedataEmbeddedGraphDatabaseneo4j-kernelG...
ローカルで使う(ビルダーでカスタマイズする)<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabasedataEmbeddedGraphDatabaseneo4j-kernelG...
ローカルで使う(Cypherのクエリで検索する)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-cypherneo4j-ker...
ローカルで使う(Cypherのクエリで検索する)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-cypherneo4j-ker...
RESTfulサーバとして起動するExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(...
neo4j-rest-graphdbとは• Neo4jのREST-APIをラップしてくれるクライアントサイド用Javaライブラリ• Mavenリポジトリが別になっている– セントラルに登録されていない• pom.xml に リポジトリの追加の設...
neo4j-rest-graphdb(Mavenリポジトリを追加)<repositories><repository><id>neo4j-public-repository</id><name>Publically available Mave...
neo4j-rest-graphdb(Server側と本体バージョン合わせる)1) 本体のライブラリだけ明示的に1.8.2にする<dependencies>:<dependency><groupId>org.neo4j</groupId><ar...
リモートで使う(neo4j-rest-graphdbを利用)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HT...
リモートで使う(neo4j-rest-graphdbを利用)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HT...
リモートで使う(ローカルの時と同じinterfaceで)ExecutionEngine<<interface>> RestAPI<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphData...
<<interface>> RestAPI<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)neo4j-...
<<interface>> RestAPI<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)neo4j-...
リモートで使う(Cypherのクエリで検索する)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RE...
リモートで使う(Cypherのクエリで検索する)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RE...
リモートで使う(Cypherのクエリで検索する)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RE...
ExecutionEngineneo4j-server(HTTP)(RESTful)(JSON)CypherPlugInneo4j-rest-graphdbneo4j-cypher-pluginneo4j-cypherneo4j-kernelC...
ご清聴ありがとうございましたExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSO...
Upcoming SlideShare
Loading in …5
×

Neo4j を Javaプログラムから使う

4,856 views

Published on

Neo4j をローカルまたはリモートで使うときの関係クラスを整理してみました
(Java開発者向け・Neo4j初心者向け)
2013年5月25日(日) の「第2回Neo4j 勉強会」での発表資料です。

Published in: Technology
  • Be the first to comment

Neo4j を Javaプログラムから使う

  1. 1. Neo4j をJavaプログラムから使う(ローカルとリモート)初心者向け/Java開発者向け@madgaoh
  2. 2. 今日の登場人物ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)CypherPlugInneo4j-rest-graphdbneo4j-cypher-pluginneo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-Sidedata<<interface>> RestAPI2RestGraphDatabaseRestAPIFacadeRestCypherQueryEngine
  3. 3. 必要なjarファイルをclasspathに通すhttp://docs.neo4j.org/chunked/stable/tutorials-java-embedded-setup.html• Neo4jをダウンロードして libディレクトリの下にあるjarを全部classpathに通す• Mavenを使って依存jar一式を取得する<dependencies><dependency><groupId>org.neo4j</groupId><artifactId>neo4j</artifactId><version>1.8.2</version></dependency></dependencies>3
  4. 4. ローカルで使うdataEmbeddedGraphDatabaseneo4j-kernelEmbeddedGraphDatabase graphdb= new EmbeddedGraphDatabase("path/to/db/data");Node nodeA = graphdb.createNode();Node nodeB = graphdb.createNode();nodeA.createRelationshipTo(nodeB, MyTypeEnum.FRIEND);graphdb.shutdown();4
  5. 5. ローカルで使うdataEmbeddedGraphDatabaseneo4j-kernelEmbeddedGraphDatabase graphdb= new EmbeddedGraphDatabase("path/to/db/data");Node nodeA = graphdb.createNode();Node nodeB = graphdb.createNode();nodeA.createRelationshipTo(nodeB, MyTypeEnum.FRIEND);graphdb.shutdown();もしまだ無ければ新規作成される注意最後は必ずシャットダウン5
  6. 6. ローカルで使う(ファクトリ経由で生成する)<<interface>>GraphDatabaseServicedataEmbeddedGraphDatabaseneo4j-kernelGraphDatabaseService graphdb= new GraphDatabaseFactory().newEmbeddedDatabase (" path/to/db/data ");Node nodeA = graphdb.createNode();Node nodeB = graphdb.createNode();nodeA.createRelationshipTo(nodeB, MyTypeEnum.FRIEND);graphdb.shutdown();6
  7. 7. ローカルで使う(ビルダーでカスタマイズする)<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabasedataEmbeddedGraphDatabaseneo4j-kernelGraphDatabaseService graphdb= new GraphDatabaseFactory().newEmbeddedDatabaseBuilder(" path/to/db/data ").setConfig(GraphDatabaseSettings.read_only, "true").newGraphDatabase();Node nodeA = graphdb.createNode();graphdb.shutdown();7リードオンリーの指定
  8. 8. ローカルで使う(ビルダーでカスタマイズする)<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabasedataEmbeddedGraphDatabaseneo4j-kernelGraphDatabaseService graphdb= new GraphDatabaseFactory().newEmbeddedDatabaseBuilder(" path/to/db/data ").setConfig(GraphDatabaseSettings.read_only, "true").newGraphDatabase();Node nodeA = graphdb.createNode();graphdb.shutdown();8もしまだ無ければ例外発生!書き込み操作はできない(例外発生!)
  9. 9. ローカルで使う(Cypherのクエリで検索する)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-cypherneo4j-kernelEmbeddedGraphDatabasedataGraphDatabaseService graphdb= new GraphDatabaseFactory().newEmbeddedDatabaseBuilder(" path/to/db/data ").newGraphDatabase();ExecutionEngine engine = new ExecutionEngine(graphdb);Map<String, Object> params = new HashMap<>();params.put("id", 1);ExecutionResult result= engine.execute("START n = node({id}) RETURN n", params);9
  10. 10. ローカルで使う(Cypherのクエリで検索する)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-cypherneo4j-kernelEmbeddedGraphDatabasedataGraphDatabaseService graphdb= new GraphDatabaseFactory().newEmbeddedDatabaseBuilder(" path/to/db/data ").newGraphDatabase();ExecutionEngine engine = new ExecutionEngine(graphdb);Map<String, Object> params = new HashMap<>();params.put("id", 1);ExecutionResult result= engine.execute("START n = node({id}) RETURN n", params);注意Cypher は Scala で書かれており、ExecutionEngine は同名のクラスでもScala 用と Java 用があるので、正解はPackage名に .javacompat と付く方10
  11. 11. RESTfulサーバとして起動するExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)neo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-Sidedata> curl -X POST http://server:7474/db/data/node-d {"last_name": "satake", "first_name": "masahiro"}> curl -X GET http://server:7474/db/data/node/1Jetty (AppServer)+Jersey (JAX-RS)+Jackson (JSON)11
  12. 12. neo4j-rest-graphdbとは• Neo4jのREST-APIをラップしてくれるクライアントサイド用Javaライブラリ• Mavenリポジトリが別になっている– セントラルに登録されていない• pom.xml に リポジトリの追加の設定が必要• GitHubで見ると java-rest-binding という名前になっている– 寄贈されたもの・・・(だけど neo4j-contrib でもない・・・?)– 本体のバージョンと完全には同期していない• 5/22 現在の最新は1.8.1– Branch 1.8.1を見ると1.8.2を追いかけてはいる• 同時に1.9-SNAPTSHOT 2.0-SNAPSHOT もあるhttps://github.com/neo4j/java-rest-binding12
  13. 13. neo4j-rest-graphdb(Mavenリポジトリを追加)<repositories><repository><id>neo4j-public-repository</id><name>Publically available Maven 2 repository for Neo4j</name><url>http://m2.neo4j.org</url></repository></repositories>:<dependencies><dependency><groupId>org.neo4j</groupId><artifactId>neo4j-rest-graphdb</artifactId><version>1.8.1</version></dependency></dependencies>13
  14. 14. neo4j-rest-graphdb(Server側と本体バージョン合わせる)1) 本体のライブラリだけ明示的に1.8.2にする<dependencies>:<dependency><groupId>org.neo4j</groupId><artifactId>server-api</artifactId><version>1.8.2</version></dependency><dependency><groupId>org.neo4j</groupId><artifactId>neo4j-kernel</artifactId><version>1.8.2</version></dependency><dependency><groupId>org.neo4j</groupId><artifactId>neo4j-lucene-index</artifactId><version>1.8.2</version></dependency>:</dependencies>2) 1.9-SNAPSHOT(RC2) に上げてしまう<repositories><repository><id>neo4j-public-repository</id><name>Publically available Maven 2 repository forNeo4j</name><url>http://m2.neo4j.org</url><snapshots><enabled>true</enabled></snapshots></repository></repositories>:<dependencies><dependency><groupId>org.neo4j</groupId><artifactId>neo4j-rest-graphdb</artifactId><version>1.9-SNAPSHOT</version></dependency></dependencies>3) ブランチ最新ソースからビルド14
  15. 15. リモートで使う(neo4j-rest-graphdbを利用)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)neo4j-rest-graphdbneo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-SidedataRestAPI api = new RestAPIFacade("http://server:7474/db/data");Map<String, Object> props = new HashMap<>();api.createNode(props);api.close();<<interface>> RestAPI15RestAPIFacade
  16. 16. リモートで使う(neo4j-rest-graphdbを利用)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)neo4j-rest-graphdbneo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-SidedataRestAPI api = new RestAPIFacade("http://server:7474/db/data");Map<String, Object> props = new HashMap<>();api.createNode(props);api.close();<<interface>> RestAPI16注意最後は必ずクローズするRestAPIFacade
  17. 17. リモートで使う(ローカルの時と同じinterfaceで)ExecutionEngine<<interface>> RestAPI<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)neo4j-rest-graphdbneo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-SidedataGraphDatabaseService graphdb = new RestGraphDatabase(api);// or new RestGraphDatabase ("http://...");// or GraphDatabaseFactory.databaseFor("http://...");RestGraphDatabaseRestAPIFacade17
  18. 18. <<interface>> RestAPI<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)neo4j-rest-graphdbneo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-SidedataRestAPI api = new RestAPIFacade("http://server:7474/db/data");GraphDatabaseService graphdb = new RestGraphDatabase(api);// or new RestGraphDatabase ("http://...");// or GraphDatabaseFactory.databaseFor("http://...");Node nodeA = graphdb.createNode();graphdb.shutdown();ExecutionEngineRestGraphDatabaseRestAPIFacadeリモートで使う(ローカルの時と同じInterfaceで)18
  19. 19. <<interface>> RestAPI<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)neo4j-rest-graphdbneo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-SidedataRestAPI api = new RestAPIFacade("http://server:7474/db/data");GraphDatabaseService graphdb = new RestGraphDatabase(api);// or new RestGraphDatabase ("http://...");// or GraphDatabaseFactory.databaseFor("http://...");Node nodeA = graphdb.createNode();graphdb.shutdown();ExecutionEngineRestGraphDatabaseRestAPIFacadeリモートで使う(ローカルの時と同じInterfaceで)19注意ここでも最後は必ずシャットダウン(サーバはシャットダウンされない。内部のRestAPIやリソースの開放)
  20. 20. リモートで使う(Cypherのクエリで検索する)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)neo4j-rest-graphdbneo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-Sidedata<<interface>> RestAPIGraphDatabaseService graphdb= new RestGraphDatabase(api);ExecutionEngine engine= new ExecutionEngine(graphdb);RestGraphDatabaseRestAPIFacadeExecutionEngine20
  21. 21. リモートで使う(Cypherのクエリで検索する)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)neo4j-rest-graphdbneo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-Sidedata<<interface>> RestAPIRestGraphDatabaseRestAPIFacadeExecutionEngine21GraphDatabaseService graphdb= new RestGraphDatabase(api);ExecutionEngine engine= new ExecutionEngine(graphdb);注意Client-Sideで Cypher クエリを使う場合にServer側の cypher ライブラリは使わない
  22. 22. リモートで使う(Cypherのクエリで検索する)ExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)CypherPlugInneo4j-rest-graphdbneo4j-cypher-pluginneo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-Sidedata<<interface>> RestAPIRestAPI api= new RestAPIFacade("URL…");RestCypherQueryEngine engine= new RestCypherQueryEngine(api);RestGraphDatabaseRestAPIFacadeRestCypherQueryEngine22
  23. 23. ExecutionEngineneo4j-server(HTTP)(RESTful)(JSON)CypherPlugInneo4j-rest-graphdbneo4j-cypher-pluginneo4j-cypherneo4j-kernelClient-SideServer-Side<<interface>> RestAPIRestAPI api= new RestAPIFacade("URL…");RestCypherQueryEngine engine= new RestCypherQueryEngine(api);Map<String, Object> params = new HashMap<>();params.put("id", 1);QueryResult result= engine.query ("START n = node({id}) RETURN n", params);RestGraphDatabaseRestAPIFacadeRestCypherQueryEngine23リモートで使う(Cypherのクエリで検索する)
  24. 24. ご清聴ありがとうございましたExecutionEngine<<interface>>GraphDatabaseServiceEmbeddedReadOnlyGraphDatabaseneo4j-server(HTTP)(RESTful)(JSON)CypherPlugInneo4j-rest-graphdbneo4j-cypher-pluginneo4j-cypherneo4j-kernelEmbeddedGraphDatabaseClient-SideServer-Sidedata<<interface>> RestAPI24RestGraphDatabaseRestAPIFacadeRestCypherQueryEngine

×