【发布时间】:2016-02-18 11:59:17
【问题描述】:
得到以下异常
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.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.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 对象使用 registerShutDownHook() 和关闭函数。我不使用这些函数的原因是,我在具有多个执行程序的风暴环境中运行它,如果我们将关闭它,那么对于每个线程我都必须再次创建它,这也不好。 我在想不关闭graphdb可能是原因。 如果我使用一个执行器运行相同的代码,它可以正常工作,但多个执行器会出现锁定问题。 谁能告诉我要怎么做才能驾驭它。
【问题讨论】:
标签: neo4j apache-storm