首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与泽西岛REST和Neo4j环境并发的POST请求

与泽西岛REST和Neo4j环境并发的POST请求
EN

Stack Overflow用户
提问于 2013-09-20 12:20:37
回答 2查看 505关注 0票数 0

我有Jersery服务,我使用Neo4j嵌入式数据库来处理数据请求。

现在,当我发出并发的GET请求时,它可以正常工作。

但是,当我发出并发的POST请求时,它提供了以下例外:

代码语言:javascript
复制
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的:

代码语言:javascript
复制
GraphDatabaseService graphdb = new GraphDatabaseFactory().newEmbeddedDatabase("D:/GraphDB");'

finally区,我正在做

代码语言:javascript
复制
graphdb.shutdown();
EN

回答 2

Stack Overflow用户

发布于 2013-11-18 12:06:12

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

我认为我处理这一问题的方式是不使用每个请求初始化和关闭graphdb。原因是Neo4j锁定了一个图形数据库目录,并且不允许一个新线程重新初始化同一个目录上的嵌入式实例(读取线程安全)。相反,我宁愿使用一个单例类,它公开了graphdb,并在JVM中作为共享对象重用它。graphdb.shutdown()可能发生在泽西服务的关闭钩子中(只有在服务关闭时,graphdb才会关闭)。这符合泛欧洲的建议,ServletContextListener是一个很好的地方来做这件事。然而,执行情况可能因泽西岛而异。

最后,我会礼貌地对待那些试图通过编辑你的问题、评论和询问问题背景来帮助你的人。:)

票数 2
EN

Stack Overflow用户

发布于 2014-06-24 06:45:58

要回答这个问题为时已晚,但如果有人面临同样的问题,我就是这样解决的。保持一个单例类。也就是说,

代码语言:javascript
复制
      GraphDatabaseService graphdb=null;
      if(graphdb.isAvailable()&& graphdb!=null)
       {
            return graphdb;
       }
       else
        {
           graphdb = new GraphDatabaseFactory().newEmbeddedDatabase("D:/GraphDB");
         return graphdb;
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18916676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档