OrientDB - объект базы данных не синхронизирован с текущим потоком

У меня серьезная проблема с объектом OrientDB ODatabaseDocument в Java.

Чтобы предотвратить десинхронизацию между объектом ODatabaseDocument (templateDb) и текущим потоком, перед закрытием соединения я принудительно активирую синхронизацию с помощью enableOnCurrentThread, но когда я закрываю соединение, я всегда получаю следующую ошибку:

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();
}

person Joe Taras    schedule 03.02.2016    source источник
comment
Можете ли вы опубликовать больше кода о подключении к templateDb?   -  person Alessandro Rota    schedule 03.02.2016
comment
@AlessandroRota: я обновил свой вопрос, указав метод подключения.   -  person Joe Taras    schedule 03.02.2016
comment
какую версию OrientDb вы используете?   -  person Alessandro Rota    schedule 03.02.2016
comment
Версия: Ориент 2.1.4   -  person Joe Taras    schedule 03.02.2016
comment
У меня нет проблем с этим кодом: ODatabaseDocumentTx templateDb = new ODatabaseDocumentTx(remote:localhost/Db1);templateDb.open(user, password);templateDb.begin();try {ODatabaseDocumentTx db = new ODatabaseDocumentTx(remote:localhost/Db2) ;db.activateOnCurrentThread();db.open(пользователь, пароль);db.begin();System.out.println(Count = + db.countClass(V));} catch (Exception e) {e.printStackTrace( );} наконец { if (!templateDb.isActiveOnCurrentThread()) {templateDb.activateOnCurrentThread(); System.out.println(Count TemplateDb = + templateDb.countClass(V)); }templateDb.close(); }   -  person Alessandro Rota    schedule 03.02.2016
comment
Я получил IllegalStateException, если прокомментирую templateDb.activateOnCurrentThread();   -  person Alessandro Rota    schedule 03.02.2016
comment
Итак, я всегда должен использовать activeOnCurrentThread перед каждым использованием объекта ODatabaseDocument?   -  person Joe Taras    schedule 03.02.2016
comment
Извините за мою ошибку, вы можете прокомментировать db.activateOnCurrentThread(), потому что каждый раз, когда вы создаете, открываете или получаете соединение с базой данных, экземпляр базы данных автоматически устанавливается в текущее пространство ThreadLocal.   -  person Alessandro Rota    schedule 03.02.2016
comment
Хорошо, но если я удалю строку g.activateOnCurrentThread(); у меня всегда проблема с этим вопросом   -  person Joe Taras    schedule 03.02.2016
comment
Вы можете ознакомиться с документацией по этой ссылке orientdb.com/docs/2.1/Java- Многопоточность.html   -  person Alessandro Rota    schedule 03.02.2016
comment
Таким образом, поскольку приложение разрабатывалось для Orient 2.0, при обновлении версии Orient команда разработчиков проигнорировала эту функцию импорта. Спасибо за документацию.   -  person Joe Taras    schedule 03.02.2016


Ответы (1)


В orientDB версии 2.1 вы должны указать activateOnCurrentThread, связанный с вашим объектом БД. Попробуйте следующее:

templateDb.activateOnCurrentThread();
person crollo    schedule 12.04.2016
comment
Да, я принял это решение. Вы преобразовали комментарий в ответ, я принимаю его. Спасибо - person Joe Taras; 12.04.2016