#neo4j #glassfish-4 #hibernate-ogm #serviceloader #neo4j-bolt
#neo4j #glassfish-4 #hibernate-ogm #serviceloader #neo4j-bolt
Вопрос:
Я пытаюсь запустить hibernate-ogm-neo4j (5.1.0.Alpha1) в моем glassfish (4.1.1). При запуске сервера приложений с datastorprovider <property name="hibernate.ogm.datastore.provider" value="neo4j_embedded"/>
он показывает длинный stacktrace, постоянно повторяющий следующие исключения:
java.util.ServiceConfigurationError: org.neo4j.kernel.extension.KernelExtensionFactory: Provider org.neo4j.jmx.impl.JmxExtensionFactory not a subtype
java.util.ServiceConfigurationError: org.neo4j.kernel.extension.KernelExtensionFactory: Provider org.neo4j.index.lucene.LuceneKernelExtensionFactory not a subtype
java.util.ServiceConfigurationError: org.neo4j.kernel.extension.KernelExtensionFactory: Provider org.neo4j.kernel.api.impl.labelscan.LuceneLabelScanStoreExtension not a subtype
java.util.ServiceConfigurationError: org.neo4j.kernel.extension.KernelExtensionFactory: Provider org.neo4j.kernel.api.impl.schema.LuceneSchemaIndexProviderFactory not a subtype
java.util.ServiceConfigurationError: org.neo4j.kernel.extension.KernelExtensionFactory: Provider org.neo4j.ext.udc.impl.UdcKernelExtensionFactory not a subtype
При использовании <property name="hibernate.ogm.datastore.provider" value="neo4j_bolt"/>
исключения изменяются на
java.util.ServiceConfigurationError: org.neo4j.driver.internal.spi.Connector: Provider org.neo4j.driver.internal.connector.socket.SocketConnector not a subtype
Я бы предпочел подключиться в режиме Bolt, но я не уверен, что я что-то неправильно настроил или это ошибка в hibernate-ogm или neo4j.
Это мой полный persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="ogm-neo4j" transaction-type="JTA">
<provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>
<properties>
<property name="hibernate.ogm.datastore.provider" value="neo4j_bolt"/>
<property name="hibernate.ogm.neo4j.database_path" value="C:tempvtc.neo4j" />
</properties>
</persistence-unit>
</persistence>
Обновить
Я немного углубился в сообщение об ошибке. На самом деле оно выдается в ServiceLoader
классе Java и говорит что-то вроде org.neo4j.driver.internal.spi.Connector
, что это не суперкласс org.neo4j.driver.internal.connector.socket.SocketConnector
. Но, конечно, это
public class SocketConnector implements Connector
И есть также META-INF.services
описание в связанном neo4j-java-driver-1.0.4.jar
, которое содержит путь к ожидаемому абсолютному имени класса org.neo4j.driver.internal.connector.socket.SocketConnector
.
Это приводит меня в еще большее замешательство. Должен ли я применять эту конфигурацию к моему Glassfish, потому что это не выполняется автоматически?
Обновление 2
Проблема исчезает, если используется neo4j-java-driver-1.1.0-M6.jar
(просто объявите зависимость в вашем pom, и она будет использоваться вместо 1.0.4. который поставляется в комплекте с hibernate-ogm-neo4j-5.1.0.Alpha1). Все еще не понимаю, что не так с версией 1.0.x, но я связался с разработчиками, чтобы выяснить это.
Комментарии:
1. Как вы думаете, вы можете создать тестовый проект или пример для решения этой проблемы?
2. Я создал пример проекта на github: github.com/Restage/HibernateOgmExample Просто запустите экземпляр neo4j с заданными настройками подключения из persistence.xml а затем разверните ear на glassfish и, надеюсь, вы увидите проблему. Для меня изменение neo4j-java-driver на версию 1.1.0-M6 решило проблему. Я также создал проблему на странице их проекта ( github.com/neo4j/neo4j-java-driver/issues/261 ) но пока не получил никаких комментариев. Если у вас возникнут какие-либо проблемы с воспроизведением ошибки, просто дайте мне знать.