获取以下异常
java.lang.runtimeexception:在org.neo4j.kernel.internalabstractgraphdatabase.run(internalabstractgraphdatabase)启动org.neo4j.kernel.embeddedgraphdatabase时出错。java:335)在org.neo4j.kernel.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: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\u 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)在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.getossspecificFileLock(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对象使用registershutdownhook()和shutdown函数。我不使用这些函数的原因是,我在storm环境中运行多个执行器,如果我们关闭它,那么对于每个线程,我必须再次创建它,这也是不好的。我认为不关闭graphdb可能是原因。如果我用一个执行器运行相同的代码,它可以正常工作,但是多个执行器会出现锁问题。有谁能告诉我我该怎么做才能驾驭它吗。
3条答案
按热度按时间fcipmucu1#
我也面临同样的问题。但我的错误是我在服务器运行时执行了程序。如果我停止服务器,那么程序执行成功。
e5nqia272#
图形数据库示例是线程安全的,因此可以跨所有螺栓使用它,只需将其作为全局变量进行访问即可。
一次只有一个gdb可以访问存储目录。
否则,请创建一个服务,您的storm Bolt可以通过另一个协议(如http或二进制)访问/使用该服务。
lzfw57am3#
我在storm环境中与多个工作者和执行者一起执行代码。当多个工人正在创建多个graphdb安装时,我得到了存储锁异常。我将worker的数量改为1,为了创建graphdb对象,我编写了singleton类来确保一次只创建一个graphdb对象,并且它是一个gloabal变量。