Статьи

Начало работы с Neo4j Java Rest Binding (развертывание Heroku)

Верьте или нет, последние пару дней были моей первой попыткой использования Java Rest Binding в Neo4j. В моем предыдущем приложении на Heroku, Flavorwocky , использовался плагин Grails Neo4j и для других вещей, включая работу, встроенные правила Neo4j.

Тем не менее, внедренный не будет делать при развертывании в Heroku, поэтому Java Rest Binding это так. Намного лучше, чем иметь дело с сырым REST, особенно если вы очень привыкли к встроенным API.

Поскольку мне потребовалось немного времени, чтобы разобраться, в основном из-за моего позорного недостатка знаний Maven, я решил опубликовать простое руководство по началу работы.

В конце этого ваше приложение и Neo4j должны общаться друг с другом.

Примечание 1: В этой статье рассматривается связывание остальных для Neo4j 1.8.1, версии, используемой моим приложением Heroku.

Примечание 2: Добавьте дополнение Neo4j к вашему приложению Heroku, если вы планируете попробовать это

Шаг 1: Получить / включить библиотеку

Если вы не развертываете в Heroku и / или хотите просто включить банки, найдите их здесь: http://m2.neo4j.org/content/groups/everything/org/neo4j/neo4j-rest-graphdb/1.8 0,1 /

Если вам нравится / нужно использовать maven, включите следующую зависимость в ваш pom.xml

1
2
3
4
5
<dependency> 
    <groupId>org.neo4j</groupId> 
    <artifactId>neo4j-rest-graphdb</artifactId> 
    <version>1.8.1</version> 
  </dependency>

Зависимость не разрешилась, пока я не добавил следующее:

1
2
3
4
5
6
<repositories> 
     <repository> 
       <id>mvn-neo4j</id> 
       <url>http://m2.neo4j.org/content/groups/everything</url> 
     </repository> 
 </repositories>

Шаг 2. Подключитесь к локальному серверу Neo4j.

Я создал простой сервлет для тестирования кода и определения библиотеки, вы можете добавить этот код ко всему, что захотите.

1
RestAPI graphDb = new RestAPIFacade("http://localhost:7474/db/data");

Обратите внимание, что вы также можете использовать

1
GraphDatabaseService graphDb=new RestGraphDatabase(“http://localhost:7474/db/data”);

это то, что я пытался использовать в первую очередь, и это работает, но, похоже, не является допустимым параметром при создании RestCypherQueryEngine (см. шаг 3)

Шаг 3: это работает?

Выполните запрос Cypher, чтобы получить количество узлов в базе данных.

1
2
3
4
5
6
7
8
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, то выполните сборку и запуск:

1
2
mvn package 
 sh target/bin/webapp

или запустите ваше веб-приложение в противном случае.

Получите доступ к вашему сервлету / jsp / что-нибудь еще, и вы должны увидеть количество узлов в вашей базе данных Neo4j. Новая база данных вернет 1 узел (ссылочный узел)

Шаг 5: развертывание в Heroku

URL-адрес вашей базы данных Neo4j в Heroku можно найти в переменной среды NEO4J_URL, поэтому вам не нужно жестко кодировать это в своем приложении.

Значение переменной выглядит так:

1
http://username:[email protected]:port

Подберите переменную в своем коде приложения, используя

1
String neoUrl=System.getenv("NEO4J_URL");

и проанализируйте его, чтобы извлечь имя пользователя, пароль и URL-адрес БД ( http://db.hosted.neo4j.org:port )

Измените код, чтобы теперь принимать имя пользователя и пароль:

1
GraphDatabaseService graphDb=new RestGraphDatabase(dbUrl + “/db/data”,username,password);

Нажмите изменения в heroku, получите доступ к вашему приложению, и вы должны увидеть количество узлов в вашем удаленном экземпляре.

Шаг 6: Добавьте узел, чтобы быть уверенным

1
2
3
4
5
6
7
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.

Дальнейшее поиск в Google сказал мне, что я могу установить это свойство в Heroku, добавив его как extraJvmArgument в appassembler-maven-plugin в pom.xml:

01
02
03
04
05
06
07
08
09
10
<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.

Ссылка: Начало работы с Neo4j Java Rest Binding (развертывание Heroku) от нашего партнера JCG Луанны Мискитта в блоге Thought Bytes .