moduel1
有一个
def save(model: MyModel) : Future[\/[Errs, MyModel] ] = async{
db.withSession{
......
}
}
module1
有一个REST端点,允许用户持久MyModel
来自调用者(在这种情况下是Web应用程序),因此save()必须作为独立的端点/ API工作。这里没有问题。
现在module2
正在创建一个新的API,它必须在save()
上方与其他db
操作“合并”,并在单个transation中运行这两个操作。请注意,这两个modules
是单个项目的一部分,因此共享相同的数据库和模式。 module2
引入module1
作为sbt依赖。
def module2Save(model2 : Module2Model) : Future[\/[Err, Module2Model]] = async {
db.withTransaction {
val res = module1.save(model2.dataForModel1)
//after res do other db operation
.....
}
}
我们知道必须在未来not outside内创建会话/交易 - def module2Save
违反了调用module1.save()
因此无法正常运行的方式(正如预期的那样,并不奇怪)。
问题是:甚至可以将正在运行的module1
的{{1}}和save()
的{{1}}合并到一个简单的交易中,尤其是在module2
时作为module2Save
内module1.save()
内的独立API服务端点运行?
为module1
实现数据库Future的另一种方法是什么,它必须基于module2.module2Save()
失败或成功完成交易?