2014-04-24 67 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服務器更適應的用例。