2014-04-24 68 views
0

我有两个线程,第一个使用搜集器收集数据并创建Neo4j图形数据库,第二个每十分钟执行一些查询,比如到目前为止添加了多少个节点为了分析图表。我的问题是,当第一个线程运行时,我无法运行第二个线程,因为我无法创建数据库的新实例。它返回以下错误:创建两个相同Neo4j数据库的实例

Exception in thread "Thread-6" java.lang.RuntimeException: org.neo4j.kernel.lifecycle.LifecycleException: Component '[email protected]' was successfully initialized, but failed to start. Please see attached cause exception. 
    at com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.<init>(Neo4jGraph.java:165) 
    at com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.<init>(Neo4jGraph.java:135) 
    at main.AnalyzeGraph.run(AnalyzeGraph.java:28) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.RuntimeException: org.neo4j.kernel.lifecycle.LifecycleException: Component '[email protected]' was successfully initialized, but failed to start. Please see attached cause exception. 
    at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:281) 
    at org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:106) 
    at org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:81) 
    at org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:63) 
    at com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.<init>(Neo4jGraph.java:155) 
    ... 3 more 
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component '[email protected]' was successfully initialized, but failed to start. Please see attached cause exception. 
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:497) 
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:104) 
    at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:259) 
    ... 7 more 
Caused by: org.neo4j.kernel.StoreLockException: Unable to obtain lock on store lock file: /home/sotbeis/Desktop/neo4jDB/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:79) 
    at org.neo4j.kernel.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.java:40) 
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:491) 
    ... 9 more 
Caused by: 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:1056) 
    at java.nio.channels.FileChannel.tryLock(FileChannel.java:1154) 
    at org.neo4j.kernel.impl.nioneo.store.FileLock.getOsSpecificFileLock(FileLock.java:83) 
    at org.neo4j.kernel.DefaultFileSystemAbstraction.tryLock(DefaultFileSystemAbstraction.java:83) 
    at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:70) 
    ... 11 more 

有没有办法解决这个问题?请注意,我无法将第一个neo4j图形数据库实例传递给第二个线程。

我使用blueprints-neo4j-graph 2.4.0。

编辑:我使用的嵌入式版本

回答

0

假设你正在使用的嵌入式版本,我不认为这是可能具有相同的图形数据库的多个实例。

入住这里,但我真的不认为这可以帮助你,如果你不能在图形数据库实例传递到线程:,https://groups.google.com/forum/#!topic/nosql-databases/z9nZ80ow5QY

...但是如果可以的话,那么溶液变成相当直接,例如单等

而且从文档此位暗示的事实,你只能多线程之间共享一个实例:http://docs.neo4j.org/chunked/stable/tutorials-java-embedded-hello-world.html

所以,根据我的经验,我继续读什么,你不能有多个Neo4j在您的应用程序中运行的实例;无论如何,这在很大程度上是有道理的,因为锁定问题,而不是。

+0

如果我使用服务版本,是否可以按照描述进行操作? – salvador

+0

在这种情况下,您通过REST端点进行连接(除非您通过插件/扩展完成所有事情,这不太可能),所以不会出现相同的问题。换句话说,您不太可能使用相同的代码来连接服务器实例(例如,通过Jersey客户端或其他绑定(如Neo4j JDBC,Neo4j REST绑定或类似于Spring Data for Neo4j)。 – BtySgtMajor

0

如果你不能在你的线程之间共享图形实例,这可能意味着你有一个Neo4J服务器更适应的用例。