2016-06-24 105 views
1

我有一個用例,我需要在neo4j中的並行線程中運行我的存儲過程。我寫了存儲過程,並將其包含在neo4j插件中。但是,當我運行的是存儲過程我得到以下錯誤:在neo4j中獲取以下錯誤「java.lang.UnsupportedOperationException:.....」

2016-06-24 05:45:54.683+0000 INFO Remote interface available at http://localhost:7474/ 
java.lang.UnsupportedOperationException: Creating new transactions and/or spawning threads are not supported operations in store procedures. 
    at org.neo4j.kernel.impl.proc.ProcedureGDBFacadeSPI.assertSameThread(ProcedureGDBFacadeSPI.java:108) 
    at org.neo4j.kernel.impl.proc.ProcedureGDBFacadeSPI.isInOpenTransaction(ProcedureGDBFacadeSPI.java:124) 
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacade.beginTransaction(GraphDatabaseFacade.java:335) 
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacade.beginTx(GraphDatabaseFacade.java:330) 
    at example.SearchTask.call(SearchTask.java:33) 
    at example.SearchTask.call(SearchTask.java:17) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

我已經明白,在Neo4j的定製存儲過程不能並行線程運行。

但我期待有什麼方法可以讓我平行運行。

回答

5

當使用

@Context 
GraphDatabaseService graphDb 

,你會得到一個包裹GDS是不允許明確的事務/線程管理。如果你需要做的是,在一個過程中,您必須使用非公開的API是這樣的:

@Context 
GraphDatabaseAPI graphDb 

這個人是不是包裹,因此可以讓你做的所有討厭的東西。對於真實世界的例子,請參閱https://github.com/neo4j-contrib/neo4j-apoc-procedures/blob/master/src/main/java/apoc/periodic/Periodic.java#L26

+0

謝謝你正在工作 –

+0

謝謝@Stefan Armbruster,你真的救了我! –