通过Java使用Neo4j中嵌入的不同数据库

通过Java使用Neo4j中嵌入的不同数据库,java,neo4j,neo4j-embedded,Java,Neo4j,Neo4j Embedded,我正在尝试评估Neo4j中的不同数据模型。因此,我创建了两个具有不同模型的数据库,并将它们保存在同一目录中: path/to/database/graphModel1 path/to/database/graphModel2 下一步是,我用java创建了一个应用程序,可以在其中选择数据模型和要评估的查询(只有几个预定义的查询)。根据选择的型号,我希望使用嵌入式数据库的实例。目前,我使用以下if子句来区分它们: if (model.equals("G1")) { graph = new

我正在尝试评估Neo4j中的不同数据模型。因此,我创建了两个具有不同模型的数据库,并将它们保存在同一目录中:

path/to/database/graphModel1
path/to/database/graphModel2
下一步是,我用java创建了一个应用程序,可以在其中选择数据模型和要评估的查询(只有几个预定义的查询)。根据选择的型号,我希望使用嵌入式数据库的实例。目前,我使用以下if子句来区分它们:

if (model.equals("G1")) {
    graph = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH_1);
} else if (model.equals("G2")) {
    graph = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH_2);
} 
registerShutdownHook(graph);
但是,在使用model1执行第一次查询并希望使用model2计算相同的查询之后,使用该代码片段我得到了以下异常:

Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.StoreLockerLifecycleAdapter@1f1e9b8' was successfully initialized, but failed to start. Please see attached cause exception.
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:513)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115)
at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:330)
... 69 more
Caused by: org.neo4j.kernel.StoreLockException: Unable to obtain lock on store lock file: path/to/database/graphModel1/store_lock. Please ensure no other process is using this database, and that the directory is writable (required even for read-only access)
at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:78)
at org.neo4j.kernel.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.java:44)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:507)
... 71 more
Caused by: java.io.IOException: Couldn't lock lock file path/to/database/graphModel1/lock because another process already holds the lock.
at org.neo4j.io.fs.FileLock.getLockFileBasedFileLock(FileLock.java:126)
at org.neo4j.io.fs.FileLock.getOsSpecificFileLock(FileLock.java:70)
at org.neo4j.io.fs.DefaultFileSystemAbstraction.tryLock(DefaultFileSystemAbstraction.java:85)
at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:74)
... 73 more
我意识到在第一个数据库上已经有一个
存储锁
和一个
,但这对启动第二个嵌入式数据库有什么影响?有人知道如何解决这个问题吗


提前谢谢

您的GraphDatabase实例可能未正确关闭-使其处于锁定状态。我在上面的代码中看到您正在注册一个关机钩子,但是对于
graphDB
不是
graph
。这可能解释了该实例没有正确关闭的原因


如果您知道没有其他实例指向您的Neo4j目录,您可以尝试手动删除
graph.db/lock
graph.db/store\u lock
文件并再次运行代码。

很抱歉,
graphDB
graph
之间的差异是由于注意力不集中造成的。关机挂钩已注册为
图形
。当我手动关闭数据库时,我无法创建新的数据库,我已经尝试过这种方法。