Neo4j上的存储锁问题

Neo4j上的存储锁问题,neo4j,apache-storm,Neo4j,Apache Storm,获取以下异常 java.lang.RuntimeException:启动时出错 org.neo4j.kernel.EmbeddedGraphDatabase 位于org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:335) 位于org.neo4j.kernel.EmbeddedGraphDatabase。(EmbeddedGraphDatabase.java:59) 位于org

获取以下异常

java.lang.RuntimeException:启动时出错 org.neo4j.kernel.EmbeddedGraphDatabase 位于org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:335) 位于org.neo4j.kernel.EmbeddedGraphDatabase。(EmbeddedGraphDatabase.java:59) 位于org.neo4j.graphdb.factory.GraphDatabaseFactory.newDatabase(GraphDatabaseFactory.java:108) 位于org.neo4j.graphdb.factory.GraphDatabaseFactory$1.newDatabase(GraphDatabaseFactory.java:95) 位于org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:176) 位于org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:67) 位于com.tpgsi.mongodb.dataPollingWithOplog.ORBCreateLink.main(ORBCreateLink.java:62) 原因:org.neo4j.kernel.lifecycle.LifecycleException:组件 'org.neo4j.kernel。StoreLockerLifecycleAdapter@5b6ca687”“是吗 已成功初始化,但启动失败。请参阅附件 引起异常。 位于org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:513) 位于org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115) 位于org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:331) ... 6其他原因:org.neo4j.kernel.StoreLockException:无法获取l文件: /home/aps/neo4j-community-2.2.3/CompleteTest/store_lock。请确保 没有其他进程正在使用此数据库,并且目录为 可写(即使是只读访问也需要) 位于org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:78) 位于org.neo4j.kernel.storeLockerLifecyLeadapter.start(storeLockerLifecyLeadapter.java:44) 位于org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:507) ... 8更多原因:java.nio.channels.OverlappingFileLockException 查看sun.nio.ch.SharedFileLockTable.checkList(FileLockTable.java:255) 位于sun.nio.ch.SharedFileLockTable.add(FileLockTable.java:152) 位于sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1087) 位于java.nio.channels.FileChannel.tryLock(FileChannel.java:1154) 位于org.neo4j.io.fs.StoreFileChannel.tryLock(StoreFileChannel.java:135) 位于org.neo4j.io.fs.FileLock.wrapFileChannelLock(FileLock.java:38) 位于org.neo4j.io.fs.FileLock.getOsSpecificFileLock(FileLock.java:99) 位于org.neo4j.io.fs.DefaultFileSystemAbstraction.tryLock(DefaultFileSystemAbstraction.java:85) 位于org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:74)

我有一个过程可以创建图表,完成这个过程后,我还有一个过程可以在if之上创建更多的关系。但我在第一个进程完成后运行第二个进程时遇到上述异常。我检查了Neo4j的数据目录没有被任何进程使用,但仍然存在锁问题

我运行了一段代码来创建图形

   static GraphDatabaseFactory dbFactory = null; 
   static GraphDatabaseService graphdb  = null;  

  static{
dbFactory =new GraphDatabaseFactory();
  graphdb  = dbFactory.newEmbeddedDatabase(com.tpgsi.mongodb.dataPollingWithOplog.CommonConstants.NEO4J_DATA_DIRECTORY);
  }

  try{
Transaction tx = graphdb.beginTx();
  try
 {
    // creating Node and relationships

    tx.success();
  } catch (Exception e) {
            tx.failure();
            e.printStackTrace();
   } finally {
       tx.close();
    }
      }
     catch(Exception e)
     {
        e.printStackTrace();
     }
我创建了graphdb对象作为全局变量,并在任何地方使用它。唯一的交易,我正在结束。我没有对graphdb对象使用registerSutdownhook()和shutdown函数。我不使用这些函数的原因是,我在storm环境中使用多个执行器运行它,如果我们要关闭它,那么对于每个线程,我必须再次创建它,这也不好。 我认为不关闭graphdb可能是原因。 如果我用一个执行器运行相同的代码,它可以正常工作,但多个执行器会出现锁问题。
有谁能告诉我,我必须做些什么才能驾驭它。

图形数据库实例是线程安全的,因此您可以在所有螺栓上使用它,只需将其作为全局变量进行访问即可

一次只有一个GDB可以访问存储目录


否则,创建一个您的storm Bolt通过另一个协议(如http或二进制)访问/使用的服务。

我也面临同样的问题。但我的错误是在服务器运行时执行了程序。如果我停止服务器,则程序将成功执行。

我在storm环境中使用多个辅助程序和执行程序执行代码。当多个工人正在创建多个graphdb安装时,我遇到了存储锁定异常。我将worker的数量更改为1,为了创建graphdb对象,我编写了singleton类,以确保一次只创建一个graphdb对象,并且它是一个gloabal变量

谢谢Michael,我会按照您的建议尝试。如果neo4j已经在运行,并且在上面运行应用程序,那么肯定会出现锁异常。