0

Java の OrientDB ODatabaseDocument オブジェクトに重大な問題があります。

ODatabaseDocument オブジェクト (templateDb) と現在のスレッドとの間の非同期化を防ぐために、接続を閉じる前に activateOnCurrentThread で同期を強制しますが、接続を閉じると常に次のエラーが発生します。

java.lang.IllegalStateException: Current database instance (com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx@302a2a53) is not active on current thread (Thread[btpool0-3,5,main]). Current active database is: com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx@2040c7d9
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.checkIfActive(ODatabaseDocumentTx.java:3138)
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.command(ODatabaseDocumentTx.java:667)

私のコード:

finally {
    if (!templateDb.isActiveOnCurrentThread()) {
        templateDb.activateOnCurrentThread();
    }
    templateDb.close();
}

編集

String connectionUrl = customer.getDbName();
if (!connectionUrl.startsWith("remote:")) {
    connectionUrl = storageConnectionPrefix + connectionUrl;
}

try {
    ODatabaseDocumentTx g = new ODatabaseDocumentTx(connectionUrl);
    g.activateOnCurrentThread();
    g.open(username, password);
    g.begin();
    return g;
} catch (Exception e) {
   e.printStackTrace();
}
4

1 に答える 1

2

activateOnCurrentThreadorientDB バージョン 2.1 では、関連する DB オブジェクトを明示する必要があります。次のようにしてみてください:

templateDb.activateOnCurrentThread();
于 2016-04-12T13:01:28.227 に答える