获得以下异常
java.lang.RuntimeException:启动时出错 org.neo4j.kernel.EmbeddedGraphDatabase 在org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:335) 在org.neo4j.kernel.EmbeddedGraphDatabase。(EmbeddedGraphDatabase.java:59) at org.neo4j.graphdb.factory.GraphDatabaseFactory.newDatabase(GraphDatabaseFactory.java:108) at org.neo4j.graphdb.factory.GraphDatabaseFactory $ 1.newDatabase(GraphDatabaseFactory.java:95) at org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:176) at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:67) 在com.tpgsi.mongodb.dataPollingWithOplog.ORBCreateLink.main(ORBCreateLink.java:62) 引起:org.neo4j.kernel.lifecycle.LifecycleException:Component '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.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.java:44) 在org.neo4j.kernel.lifecycle.LifeSupport $ LifecycleInstance.start(LifeSupport.java:507) ... 8更多引起:java.nio.channels.OverlappingFileLockException at sun.nio.ch.SharedFileLockTable.checkList(FileLockTable.java:255) at sun.nio.ch.SharedFileLockTable.add(FileLockTable.java:152) at 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对象创建为全局变量并在任何地方使用它。只有交易,我即将结束。我没有使用registerShutDownHook()和关闭graphdb对象的函数。我不使用这些函数的原因是因为,我在具有多个执行程序的风暴环境中运行它,如果我们将关闭它,那么对于每个线程我必须再次创建它,这也是不好的。 我在想不关闭graphdb可能是原因。 如果我使用One executor运行相同的代码,它可以正常工作,但多个执行程序会出现锁定问题。 任何人都可以告诉我我必须做些什么才能获得它。
答案 0 :(得分:0)
图形数据库实例是线程安全的,因此您可以在所有螺栓中使用它,只需将其作为全局变量进行访问。
一次只能有一个GDB访问商店目录。
否则创建一个服务,您的风暴螺栓通过其他协议访问/使用,例如http或二进制。
答案 1 :(得分:0)
我遇到了同样的问题。但我的错误是我在服务器运行时执行了程序。如果我停止服务器,则程序执行成功。
答案 2 :(得分:0)
我在风暴环境中使用多个worker和executor执行我的代码。由于多个worker正在创建多个graphdb安装,我得到了商店锁定异常。我将worker的数量更改为1并创建了graphdb对象,我编写了单例类,以确保我一次只创建一个graphdb对象,这是一个全局变量。