0

我正在尝试使用 hibernate=ogm 在 JBoss7 下设置 neo4j,这是我的 pon.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
  <groupId>Think01</groupId>
  <artifactId>CityMiners</artifactId>
  <packaging>war</packaging>
  <version>1.0</version>
  <name>RESTfulDemoApplication Maven Webapp</name>
  <url>http://maven.apache.org</url>
    <repositories>
        <repository>
            <id>jboss</id>
            <url>http://repository.jboss.org/maven2</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>org.jboss.ejb3</groupId>
            <artifactId>jboss-ejb3-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>


        <dependency>
            <groupId>org.hibernate.ogm</groupId>
            <artifactId>hibernate-ogm-neo4j</artifactId>
            <version>4.1.3.Final</version>
        </dependency>
    </dependencies>
  <build>
    <finalName>CityMiners</finalName>
  </build>
</project>

这是我的persistance.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_1_0.xsd" version="1.0">

    <persistence-unit name="ogm-neo4j" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>
        <properties>
            <property name="hibernate.ogm.neo4j.database_path" value="d:/dev/q7"/>
            <property name="hibernate.ogm.datastore.provider" value="neo4j_embedded"/>
            <property name="hibernate.search.default.directory_provider" value="ram" />
        </properties>
    </persistence-unit>

</persistence>

这是我的单例 bean:

@Singleton
@Startup
public class Test {
    private EntityManagerFactory emf;

    @PostConstruct
    public void init() {
        emf = Persistence.createEntityManagerFactory("ogm-neo4j");
    }

    @PreDestroy
    public void kill() {
        emf.close();
    }
}

这是我在部署后收到的内容:

[2015-06-06 11:04:14,734] Artifact CityMiners:war: java.lang.Exception: {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"CityMiners.war\".component.Test.START" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"CityMiners.war\".component.Test.START: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance
    Caused by: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance
    Caused by: javax.ejb.EJBException: javax.persistence.PersistenceException: Unable to build entity manager factory
    Caused by: javax.persistence.PersistenceException: Unable to build entity manager factory
    Caused by: org.hibernate.service.spi.ServiceException: OGM000071: Unable to start datatore provider
    Caused by: java.lang.RuntimeException: Error starting org.neo4j.kernel.EmbeddedGraphDatabase, d:\\dev\\q7
    Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.StoreLockerLifecycleAdapter@c5c0fa' 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: d:\\dev\\q7\\store_lock. Please ensure no other process is using this database, and that the directory is writable (required even for read-only access)
    Caused by: java.io.IOException: Couldn't lock lock file d:\\dev\\q7\\lock because another process already holds the lock."}}

堆栈跟踪显示“无法锁定锁定文件 d:\dev\q7\lock,因为另一个进程已经持有锁定。” 但我很确定甚至没有外部进程触及该文件(我没有并行运行另一个 neo4j 进程) - 看起来 JBoss 本身以某种方式持有那个锁......

你知道怎么解决吗?提前致谢!

4

0 回答 0