使用光滑将会话与另一个API相结合

时间:2015-03-09 15:41:13

标签: scala slick scalaz

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时作为module2Savemodule1.save()内的独立API服务端点运行?

module1实现数据库Future的另一种方法是什么,它必须基于module2.module2Save()失败或成功完成交易?

0 个答案:

没有答案