2016-08-22 2 views
0

Я разрабатываю приложение Scala Play2, которое запрашивает график OrientDB в Scala Play2. До сегодняшнего дня я не заморачиваться с индексами, и все, казалось, работало хорошо, но теперь, когда я позволил пару я получаю эту ошибку:Поток данных с фреймами Scala (Play2)

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[ODatabaseException: Database instance is not set in current thread. Assure to set it with: ODatabaseRecordThreadLocal.INSTANCE.set(db);]]

От the documentation Я понимаю, что объект базы данных не поточно, но я m неопределенно, как действовать: мои запросы собираются асинхронно пулом исполнителей Play2, и я не уверен, было бы неплохо объединиться с threadlocals. Будет ли драйвер блокироваться? Будет ли драйвер сжимать свое состояние, если разные потоки из пула обрабатывают соединение с базой данных? В любом случае я хотел бы получить некоторые советы от кого-то, кто знает архитектуру водителя Orient лучше меня :)

ответ

0

Как указано в документации и ошибке, драйвер OrientDB использует локаторы потоков, чтобы изолировать небезопасные части самого потока.

Решение этой проблемы состояло в том, чтобы отойти от упрощенного проекта, который у меня был в тот момент, и запустить запросы из org.apache.tinkerpop.gremlin.orientdb.OrientGraph, полученные через org.apache.tinkerpop.gremlin.orientdb.OrientGraphFactory#getTx(), вызываемые в том же блоке.

Я не исследовал, требуется ли транзакция строго, хотя я так не думаю.

Смежные вопросы