本文介绍了获取锁定时出错(org.neo4j.kernal.StoreLockException)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试在现有数据库中创建新节点时,我收到以下异常:

When trying to create new nodes in an already existing database, I am getting the following exception:

org.neo4j.kernal.StoreLockException

下面的代码snippit是导致
异常的实际行。下面我已经附上了一些更多细节和完整的堆栈跟踪。

The code snippit below is the actual line that results in the exception. Below that I have attached some more detail and the full stack trace.

如果我创建一个新文件夹并将其用作 DB_PATH ,然后我的代码在第一次运行时工作正常。在第二次运行时,它将失败并出现相同的异常。似乎有些东西阻止了获取锁定。

If I create a new folder and use that as the DB_PATH, then my code works fine on the first run. On the second run, it will fail with the same exception. It appears something is preventing the lock from being obtained.

我试图在 DB_PATH 中的每个文件上设置读/写权限。没运气。其中一个配置文件中是否有关于锁定必须禁用的设置?

I tried to set permissions to Read/Write on every file in the DB_PATH. No luck. Is there a setting in one of the config files that must be disabled with regard to locks?

代码抛出异常

graphDB = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );

更多细节(第6行)

private static GraphDatabaseService graphDB = null;
public static final String DB_PATH = "/Users/NtroduceMe/Downloads/neo4j-community-2.0.0-M03/data/ntroduceme";
private static Index<Node> userNodeIndex;
private static Index<Node> rememberMeNodeIndex;
static {
    graphDB = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );
    registerShutdownHook(graphDB);
    userNodeIndex = graphDB.index().forNodes("profile_id");
    rememberMeNodeIndex = graphDB.index().forNodes("profile_id");
}

堆栈追踪

Jun 19, 2013 12:12:50 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [ProfileController] in context with path [] threw exception [Servlet execution threw an exception] with root cause
org.neo4j.kernel.StoreLockException: Could not create lock file
    at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:85)
    at org.neo4j.kernel.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.java:40)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:498)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115)
    at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:296)
    at org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:100)
    at org.neo4j.graphdb.factory.GraphDatabaseFactory$1.newDatabase(GraphDatabaseFactory.java:92)
    at org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:197)
    at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:69)
    at com.NtroduceMe.Utilities.GraphDBManager.<clinit>(GraphDBManager.java:22)
    at com.NtroduceMe.UserProfile.Profiles.createProfile(Profiles.java:141)
    at com.NtroduceMe.UserProfile.ProfileController.doPost(ProfileController.java:61)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)

我用来存储数据库实例的帮助程序类

public class GraphDBManager {
    public static final String DB_PATH = "/Users/NtroduceMe/Downloads/neo4j-community-2.0.0-M03/data/ntroduceme";
    private static final GraphDatabaseService graphDB = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );    
    private static Index<Node> userNodeIndex;
    private static Index<Node> rememberMeNodeIndex;
    static {
        registerShutdownHook(graphDB);
        userNodeIndex = graphDB.index().forNodes("profile_id");
        rememberMeNodeIndex = graphDB.index().forNodes("profile_id");
    }

    public static GraphDatabaseService getGraphDB(){
        return graphDB;
    }

    public static Index<Node> getUserNodeIndex(){
        return userNodeIndex;
    }

    public static Index<Node> getRemberMeNodeIndex(){
        return rememberMeNodeIndex;
    }

    private static void registerShutdownHook(final GraphDatabaseService graphDb )
    {
        // Registers a shutdown hook for the Neo4j instance so that it
        // shuts down nicely when the VM exits (even if you "Ctrl-C" the
        // running application).
        Runtime.getRuntime().addShutdownHook( new Thread()
        {
            @Override
            public void run()
            {
                graphDb.shutdown();
            }
        } );
    }   

}


推荐答案

在Neo4j手册中:

我之所以出现此错误仅仅是因为我在部署应用程序之前运行了Neo4j Server。一旦我运行Neo4j服务器,就会创建一个空的锁定文件并放在数据库目录中。

And I had this error simply because I ran Neo4j Server before deploying the application. As soon as I run the Neo4j server, an empty "lock" file is created and placed in the database directory.

所以我想这是因为已经创建了一个实例,我试图通过我的Java应用程序创建新实例不可能

So I suppose it is because an instance was already created, and I tried to create a new instance by my Java Application, which is impossible.

这篇关于获取锁定时出错(org.neo4j.kernal.StoreLockException)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 18:00