我正在开发一个Scala Play2应用程序,用于在Scala Play2中查询OrientDB图形。直到今天我还没有打扰索引,所有似乎都工作正常,但现在我启用了一对,我得到了这个错误:
play.api.http.HttpErrorHandlerExceptions $$ anon $ 1:执行 exception [[ODatabaseException:数据库实例未在当前设置 线。确保设置它: ODatabaseRecordThreadLocal.INSTANCE.set(分贝);]]
从the documentation我明白数据库对象不是线程安全的,但我不确定如何继续:我的查询是由Play2执行器池异步拾取的,我不确定是否使用threadlocals是一个好主意。司机会阻止吗?如果来自池的不同线程处理数据库连接,驱动程序是否会破坏其状态?在任何情况下,我都希望得到一些比我更了解东方驾驶架构的人的建议:)
答案 0 :(得分:0)
正如文档和错误所建议的那样,OrientDB驱动程序使用线程本地来隔离自身的线程不安全部分。
这个问题的解决方案是摆脱我当时的简单化设计,并通过在同一个区块内调用的org.apache.tinkerpop.gremlin.orientdb.OrientGraph
获得的org.apache.tinkerpop.gremlin.orientdb.OrientGraphFactory#getTx()
内运行查询。
我没有调查是否严格要求交易,尽管我不这么认为。