Какова правильная конфигурация для Spring Data Neo4j и PlayFramework 2.1.1?

Вот скелетное приложение PlayFramework с Spring Data Neo4j, которое я создал:

https://github.com/tomasmuller/playframework-neo4j-template

Во время первого play run все работает нормально. PlayFramework через Netty запускается в режиме разработки. Таким образом, мы можем продолжить программирование и нажать «Обновить», чтобы увидеть результат.

Но, вероятно, отсутствует какая-то конфигурация, связанная с менеджером транзакций Neo4j. Или даже это может быть связано с режимом разработки PlayFramework.

Например, попробуйте изменить строку 13 из index.scala.html на другой заголовок и перезагрузить индексную страницу, не перезапуская сервер.

Получается следующее исключение:

play.api.PlayException: Cannot init the Global object[null]
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'graphDatabaseService': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.neo4j.kernel.EmbeddedGraphDatabase]: Constructor threw exception; nested exception is java.lang.RuntimeException: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.StoreLockerLifecycleAdapter@20346642' was successfully initialized, but failed to start. Please see attached cause exception.
...
Caused by: org.neo4j.kernel.StoreLockException: Unable to obtain lock on store lock file: target/neo4j-db/store_lock
at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:90) ~[neo4j-kernel-1.9.RC1.jar:1.9.RC1]
...

Я попробовал некоторые конфигурации (безуспешно) и задокументировал в выпуск репозитория №1.

Что здесь происходит? Это проблема конфигурации или связана с комбинацией Spring Data Neo4j и PlayFramework?


person Tomás Augusto Müller    schedule 17.05.2013    source источник


Ответы (2)


«Невозможно получить блокировку» звучит как проблема с файловой системой (проверьте target/neo4j-db/ dir на наличие разрешений и т. д.?), может быть, их создано два?

person Peter Neubauer    schedule 18.05.2013

Вызов getGraphDatabaseService.shutdown() из Neo4jTemplate в методе app/Global.scala onStop решил эту проблему.

/**
 * Sync the context lifecycle with Play's.
 * @param app
 */
override def onStop(app: Application) {
  val  neo4jTemplate:Neo4jTemplate = ctx.getBean(classOf[Neo4jTemplate]);
  neo4jTemplate.getGraphDatabaseService.shutdown();
  ctx.stop()
}

Запрос на вытягивание здесь.

person Tomás Augusto Müller    schedule 07.08.2013