问题与新泽西州的REST和Neo4j的环境并发POST请求(Issue with concurren

2019-10-30 04:24发布

我有Jersery REST服务 ,我使用的Neo4j嵌入式数据库服务数据请求。

现在,当我做出并发GET请求它工作正常。

但是,当我做并发POST请求,它提供了以下情况除外:

Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.StoreLockerLifecycleAdapter@62f1ca5e' was successfully initialized, but failed to start. Please see attached cause exception.
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:504)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115)
    at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:296)
    ... 42 more
Caused by: org.neo4j.kernel.StoreLockException: Could not create lock file
    at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:85)
    at org.neo4j.kernel.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.java:40)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:498)

我知道这个问题是如果已经有Neo4j的运行情况下,我们不能访问相同的另一个线程。

解决办法是Neo4j的HA

但正如我没有足够的时间来配置Neo4j的HA群集,任何人都可以请建议我我如何可以使POST请求是单线程(意味着没有并发线程同时访问Neo4j的)。

任何链接或教程。

编辑

我开始Neo4j的是这样的:

GraphDatabaseService graphdb = new GraphDatabaseFactory().newEmbeddedDatabase("D:/GraphDB");'

并在finally块我在做什么

graphdb.shutdown();

Answer 1:

不知道如何GET请求,在这种情况下工作,或许可以从Neo4j的球队有人可以提供最好的解释。 我假设你正在初始化和关闭graphdb每个请求。 另外,我还没有与Java的触摸最近,我的建议可能不准确。

我想我会解决这个问题的方法是进行初始化和关闭graphdb每个请求。 原因是,Neo4j重点锁定在一个图形数据库目录,将只允许在同一个目录中一个新的线程重新初始化嵌入式实例(读线程安全的)。 相反,我宁愿使用该露出的单例类graphdb和再使用它作为在JVM中的共享对象。 graphdb.shutdown()可能发生在关闭挂钩您在Jersey服务( graphdb关闭,只有当服务出现故障)。 这会将什么盘古建议, ServletContextListener是做到这一点的好地方。 然而,实现可与新泽西州而异。

最后,我会礼貌的人谁试图通过编辑你的问题,评论和询问周围的问题方面提供帮助。 :)



Answer 2:

来不及回答这个问题,但如果有人再次面临同样的问题,我这是怎么固定它。 维护一个单独的类。 即

      GraphDatabaseService graphdb=null;
      if(graphdb.isAvailable()&& graphdb!=null)
       {
            return graphdb;
       }
       else
        {
           graphdb = new GraphDatabaseFactory().newEmbeddedDatabase("D:/GraphDB");
         return graphdb;
        }


文章来源: Issue with concurrent POST requests with Jersey REST and Neo4j environment