我正试图在我的glassfish(4.1.1)中运行hibernate-ogm-neo4j(5.1.0.Alpha1)。使用datastorprovider <property name="hibernate.ogm.datastore.provider" value="neo4j_embedded"/>
启动应用程序服务器时,它会显示一个长堆栈跟踪,不断重复以下异常:
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:\temp\vtc.neo4j" />
</properties>
</persistence-unit>
</persistence>
更新
我看了一下错误信息。它实际上是在Java ServiceLoader
类中抛出的,并且说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仍然没有任何问题,但我已经联系了开发人员以找到它。