0

Jersery Rest サービスがあり、 Neo4j Embedded Databaseを使用してリクエストにデータを提供しています。

同時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();
4

2 に答える 2

1

これに答えるには遅すぎますが、誰かが同じ問題に直面している場合、これが私が修正した方法です。シングルトン クラスを維持します。つまり、

      GraphDatabaseService graphdb=null;
      if(graphdb.isAvailable()&& graphdb!=null)
       {
            return graphdb;
       }
       else
        {
           graphdb = new GraphDatabaseFactory().newEmbeddedDatabase("D:/GraphDB");
         return graphdb;
        }
于 2014-06-24T06:45:58.240 に答える