2017-01-10 8 views
1

Я пытаюсь использовать Neo4j + Hibernate OGM. Я начал с this tutorial. Начиная с этого момента я могу создавать и обновлять объекты, а также запускать некоторые пользовательские запросы с использованием запросов JP-QL: 1, 2.UnexpectedUpgradingStoreVersionException - «Ожидаемый» v0.A.3 «но файл - версия» с Neo4j Server и Hibernate OGM

Используя Neo4j Community Edition 3.1.0 for Windows 64 bit, выбрав каталог данных моей встроенной базы данных и перейдя на веб-представление, я могу успешно просмотреть данные.

Однако после этого я столкнулся со следующими проблемами при работе с Java-приложением.

  1. Когда я попытался запустить приложение, в то же время сервер Neo4j Community Edition также работает, я столкнулся со следующей проблемой:

    org.neo4j.kernel.StoreLockException: Store и его файл блокировки был заблокирован другим процессом: target \ test_data_dir \ store_lock. Убедитесь, что никакой другой процесс не использует эту базу данных, и что каталог доступен для записи (требуется даже для доступа только для чтения)

    Эта ошибка кажется вполне понятной, что может быть разрешено остановкой сервера. Мой вопрос в том, есть ли какой-либо инструмент/конфигурация, которые позволяют мне делать оба одновременно; т.е. запустите приложение и просмотрите данные на сервере.

  2. Еще одна серьезная ошибка, с которой я столкнулся после остановки сервера и запуска приложения снова, ниже.

    org.neo4j.kernel.impl.storemigration.StoreUpgrader $ UnexpectedUpgradingStoreVersionException: 'G: \ Workspace \ Java \ Neo4jTest \ цель \ test_data_dir \ neostore.nodestore.db' имеет магазин номер версии, что мы не можем обновить , Ожидаемый «v0.A.3», но файл имеет версию «

    Если я снова удалю базу данных и запустил приложение (с нуля), все будет нормально, пока я не запустил сервер. Как это можно решить?

Дополнительная информация:

  • Мои Maven зависимостей:

    <dependencies> 
    
        <!-- https://mvnrepository.com/artifact/org.hibernate.ogm/hibernate-ogm-neo4j --> 
        <dependency> 
         <groupId>org.hibernate.ogm</groupId> 
         <artifactId>hibernate-ogm-neo4j</artifactId> 
         <version>5.0.4.Final</version> 
        </dependency> 
    
        <!-- https://mvnrepository.com/artifact/org.jboss.jbossts/jbossjta --> 
        <dependency> 
         <groupId>org.jboss.jbossts</groupId> 
         <artifactId>jbossjta</artifactId> 
         <version>4.16.6.Final</version> 
        </dependency> 
    
    </dependencies> 
    
  • Мои persitence.xml:

    <?xml version="1.0" encoding="utf-8"?> 
    
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
        version="2.0"> 
    
    <persistence-unit name="hikePu" transaction-type="RESOURCE_LOCAL"> 
        <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider> 
    
        <properties> 
         <property name="hibernate.ogm.datastore.provider" value="neo4j_embedded" /> 
         <property name="hibernate.ogm.datastore.database" value="HikeDB" /> 
         <property name="hibernate.ogm.neo4j.database_path" value="target/test_data_dir" /> 
         <property name="hibernate.ogm.neo4j.configuration_resource_name" value="target/test_data_dir/_myNeo4j.conf" /> 
        </properties> 
    </persistence-unit> 
    

  • _myNeo4j.conf:

    #*************************************************************** 
    # Server configuration 
    #*************************************************************** 
    
    # This setting constrains all `LOAD CSV` import files to be under the `import` directory. Remove or uncomment it to 
    # allow files to be loaded from anywhere in filesystem; this introduces possible security problems. See the `LOAD CSV` 
    # section of the manual for details. 
    dbms.directories.import=import 
    
    # Require (or disable the requirement of) auth to access Neo4j 
    dbms.security.auth_enabled=true 
    
    # With default configuration Neo4j only accepts local connections. 
    # To accept non-local connections, uncomment this line: 
    #dbms.connectors.default_listen_address=0.0.0.0 
    
    # You can also choose a specific network interface, and configure a non-default 
    # port for each connector, by setting their individual listen_address. 
    
    # The address at which this server can be reached by its clients. This may be the server's IP address or DNS name, or 
    # it may be the address of a reverse proxy which sits in front of the server. This setting may be overridden for 
    # individual connectors below. 
    #dbms.connectors.default_advertised_address=localhost 
    
    # You can also choose a specific advertised hostname or IP address, and 
    # configure an advertised port for each connector, by setting their 
    # individual advertised_address. 
    
    # Bolt connector 
    dbms.connector.bolt.enabled=true 
    #dbms.connector.bolt.tls_level=OPTIONAL 
    #dbms.connector.bolt.listen_address=:7687 
    
    # HTTP Connector 
    dbms.connector.http.enabled=true 
    #dbms.connector.http.listen_address=:#{default.http.port} 
    
    # HTTPS Connector 
    dbms.connector.https.enabled=true 
    #dbms.connector.https.listen_address=:#{default.https.port} 
    
    # Certificates directory 
    # dbms.directories.certificates=certificates 
    
    #***************************************************************** 
    # Administration client configuration 
    #***************************************************************** 
    
    
    # Comma separated list of JAX-RS packages containing JAX-RS resources, one 
    # package name for each mountpoint. The listed package names will be loaded 
    # under the mountpoints specified. Uncomment this line to mount the 
    # org.neo4j.examples.server.unmanaged.HelloWorldResource.java from 
    # neo4j-examples under /examples/unmanaged, resulting in a final URL of 
    # http://localhost:${default.http.port}/examples/unmanaged/helloworld/{nodeId} 
    #dbms.unmanaged_extension_classes=org.neo4j.examples.server.unmanaged=/examples/unmanaged 
    
    #***************************************************************** 
    # HTTP logging configuration 
    #***************************************************************** 
    
    # HTTP logging is disabled. HTTP logging can be enabled by setting this 
    # property to 'true'. 
    dbms.logs.http.enabled=false 
    
    # Enable this to be able to upgrade a store from an older version. 
    dbms.allow_format_migration=true 
    
    # The amount of memory to use for mapping the store files, in bytes (or 
    # kilobytes with the 'k' suffix, megabytes with 'm' and gigabytes with 'g'). 
    # If Neo4j is running on a dedicated server, then it is generally recommended 
    # to leave about 2-4 gigabytes for the operating system, give the JVM enough 
    # heap to hold all your transaction state and query context, and then leave the 
    # rest for the page cache. 
    # The default page cache memory assumes the machine is dedicated to running 
    # Neo4j, and is heuristically set to 50% of RAM minus the max Java heap size. 
    #dbms.memory.pagecache.size=10g 
    
    # Enable this to specify a parser other than the default one. 
    #cypher.default_language_version=2.0 
    
    # Keep logical logs, helps debugging but uses more disk space, enabled for 
    # legacy reasons To limit space needed to store historical logs use values such 
    # as: "7 days" or "100M size" instead of "true". 
    #dbms.tx_log.rotation.retention_policy=7 days 
    
    # Enable shell server so that remote clients can connect via Neo4j shell. 
    #dbms.shell.enabled=true 
    # The network interface IP the shell will listen on (use 0.0.0.0 for all interfaces). 
    #dbms.shell.host=127.0.0.1 
    # The port the shell will listen on, default is 1337. 
    #dbms.shell.port=1337 
    
    allow_store_upgrade=true 
    

ответ

1

только один процесс в то время, может получить блокировку на встроенном Neo4j.

Поэтому, если вы используете OGM, вы не можете получить к нему доступ с помощью сервера Neo4j или vicecersa.Я не думаю, что в данный момент можно решить эту проблему.

Если вы хотите проверить БД во время работы приложения, вам необходимо подключиться к серверу с использованием протокола Bolt или HTTP API. Вам просто нужно обновить конфигурационный файл Hibernate OGM.

Hibernate OGM 5.0.4.Final использует старую версию Neo4j: 2.3.5 Когда вы открываете и закрываете сервер, версия файла изменяется, а Hibernate OGM больше не может ее распознать.

Hibernate OGM 5.1.0.Beta3 использует Neo4j 3.0.8 на данный момент, но я открыл проблему, чтобы обновить его.

+0

Спасибо @ Давид за ваш ответ и объяснение. –

+1

Я забыл упомянуть, что удаленный режим доступен только в версии 5.1 Beta – Davide