繁体   English   中英

在Jersey REST和Neo4j环境中并发POST请求的问题

[英]Issue with concurrent POST requests with Jersey REST and Neo4j environment

我有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();

不确定GET请求在这种情况下如何工作,也许Neo4j团队的某人最好提供一个解释。 我假设您正在初始化和关闭每个请求的graphdb 另外,我最近还没有接触过Java,我的建议可能不准确。

我认为我要处理的方式是通过每个请求初始化和关闭graphdb 原因是Neo4j锁定在图形数据库目录上,并且不允许新线程重新初始化同一目录上的嵌入式实例(读取线程安全)。 相反,我宁愿使用单例类,该类公开graphdb并将其作为JVM中的共享对象使用。 graphdb.shutdown()可能会出现在Jersey服务的关闭挂钩中( graphdb仅在服务关闭时关闭)。 这与Pangea的建议一致, ServletContextListener是执行此操作的好地方。 但是,实施方式可能因泽西岛而异。

最后,我会礼貌地尝试通过编辑您的问题,发表评论并询问有关您问题的背景来寻求帮助的人们。 :)

回答这个问题为时已晚,但是如果有人遇到同样的问题,这就是我如何解决的问题。 保持单例课程。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM