在neo4j中获得以下错误“java.lang.UnsupportedOperationException:.....”

时间:2016-06-24 09:22:42

标签: java neo4j graph-databases

我有一个用例,我需要在neo4j中的并行线程中运行我的存储过程。我编写了存储过程并将其包含在neo4j插件中。但是当我运行存储过程时,我得到了以下错误:

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中,自定义存储过程无法在并行线程中运行。

但我在寻找有什么方法可以并行运行它。

1 个答案:

答案 0 :(得分: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