信不信由你,最近几天是我第一次尝试使用Neo4j的Java Rest Binding 。 我先前在Heroku上的Flavorwocky应用程序使用了Grails Neo4j插件以及其他一些东西,包括工作,嵌入式Neo4j规则。
但是,当部署到Heroku时,嵌入式不会执行,因此Java Rest Binding是嵌入式的。 比处理原始REST好得多,尤其是如果您非常熟悉嵌入式api。
由于花了我很短的时间来解决问题,主要是由于我缺乏Maven知识,所以我想发布一个简单的“入门”指南。
最后,您的应用程序和Neo4j应该互相交谈。
注意1:本文处理Neo4j 1.8.1的其余绑定,这是我的Heroku应用程序使用的版本。
注意2:如果您打算尝试将Neo4j附加组件添加到Heroku应用程序中
步骤1:获取/包含库
如果您不打算部署到Heroku和/或只想添加jar,请从此处进行选择: http : //m2.neo4j.org/content/groups/everything/org/neo4j/neo4j-rest-graphdb/1.8 .1 /
如果您喜欢/必须使用maven,请在pom.xml中包含以下依赖项
<dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-rest-graphdb</artifactId> <version>1.8.1</version> </dependency>
在添加以下内容之前,依赖项一直无法解决:
<repositories> <repository> <id>mvn-neo4j</id> <url>http://m2.neo4j.org/content/groups/everything</url> </repository> </repositories>
步骤2:连接到本地Neo4j服务器
我创建了一个简单的servlet来测试代码并弄清楚该库,您可以将此代码添加到所需的任何内容。
RestAPI graphDb = new RestAPIFacade("http://localhost:7474/db/data");
请注意,您也可以使用
GraphDatabaseService graphDb=new RestGraphDatabase(“http://localhost:7474/db/data”);
这是我首先尝试使用的方法,它确实起作用,但是在创建RestCypherQueryEngine时似乎不是有效的参数(请参阅第3步)
步骤3:有效吗?
执行Cypher查询以返回数据库中的节点数。
QueryEngine engine=new RestCypherQueryEngine(graphDb); QueryResult<Map<String,Object>> result= engine.query("start n=node(*) return count(n) as total", Collections.EMPTY_MAP); Iterator<Map<String, Object>> iterator=result.iterator(); if(iterator.hasNext()) { Map<String,Object> row= iterator.next(); out.print("Total nodes: " + row.get("total")); }
步骤4:找出答案
现在是时候启动Neo4j服务器了(如果还没有的话)。
如果您使用的是Tomcat并按照此处的指南进行操作, 请构建并运行: https : //devcenter.heroku.com/articles/create-a-java-web-application-using-embedded-tomcat
mvn package sh target/bin/webapp
或者以其他方式启动您的Web应用程序。
访问您的servlet / jsp /其他任何内容,您应该看到Neo4j数据库中的节点数。 一个新的数据库将返回1个节点(参考节点)
步骤5:部署到Heroku
您可以在NEO4J_URL环境变量中找到Heroku上Neo4j数据库的URL,因此您无需在应用程序中对其进行硬编码。
变量值如下所示:
http://username:password@db.hosted.neo4j.org:port
使用以下代码在应用程序代码中提取变量
String neoUrl=System.getenv("NEO4J_URL");
并解析它以提取用户名,密码和数据库URL( http://db.hosted.neo4j.org:port )
修改您的代码以现在接受用户名和密码:
GraphDatabaseService graphDb=new RestGraphDatabase(dbUrl + “/db/data”,username,password);
将更改推送到heroku,访问您的应用程序,您应该会看到远程实例中的节点数。
第6步:添加一个节点只是为了确定
Transaction tx = graphDb.beginTx(); Map<String,Object> props=new HashMap<String, Object>(); props.put("id",100); props.put("name","firstNode"); Node node=graphDb.createNode(props); tx.success(); tx.finish();
执行相同的Cypher查询以获取节点数,您应该看到它增加了1。
如果您迫不及待想要查看绑定实际产生的REST调用,则可以打开日志记录。 根据文档,您需要将系统属性org.neo4j.rest.logging_filter设置为true。 我看到REST调用记录在Tomcat控制台上。
进一步谷歌搜索告诉我,可以通过在pom.xml的appassembler-maven-plugin中将其添加为extraJvmArgument来在Heroku上设置此属性:
<configuration> <assembleDirectory>target</assembleDirectory> <programs> <program> <mainClass>launch.Main</mainClass> <name>webapp</name> </program> </programs> <extraJvmArguments>-Dorg.neo4j.rest.logging_filter=true</extraJvmArguments> </configuration>
而已! 现在,您应该能够使用Cypher或核心API来操作图形,但是在第2部分中将进一步介绍事务和批处理。
翻译自: https://www.javacodegeeks.com/2013/07/getting-started-with-the-neo4j-java-rest-binding-heroku-deployment.html