【发布时间】:2009-10-11 13:49:29
【问题描述】:
是否可以在每次执行时将持久性上下文注入到 scala actor 中?我有一个双 Java/Scala spring 应用程序,我正在使用 spring 注释将我的 Java 服务和方法标记为事务性的。我想在我的 scala 演员中使用类似的功能。也就是说,参与者每次响应消息时都应该在单个事务中进行操作。有没有人尝试过类似的事情,或者有这种事情的例子吗?
【问题讨论】:
是否可以在每次执行时将持久性上下文注入到 scala actor 中?我有一个双 Java/Scala spring 应用程序,我正在使用 spring 注释将我的 Java 服务和方法标记为事务性的。我想在我的 scala 演员中使用类似的功能。也就是说,参与者每次响应消息时都应该在单个事务中进行操作。有没有人尝试过类似的事情,或者有这种事情的例子吗?
【问题讨论】:
为什么不通过Dao trait 封装持久访问,它被注入到actor本身中。这样,您就可以拥有一个与持久性机制本身分离的持久性参与者:
class DaoActor(val dao: Dao) extends Actor {
def act() = {
loop {
react {
case SaveTrade(trade) => dao.save(trade)
case ReadTrades(date) => dao.lookup(date) }
}
}
}
更重要的是,您的Dao 可以用Java 编码,因此您可以在其中添加@Transactional 注释。
【讨论】:
@Transactional 的 Spring 上下文的一部分,以便 Spring 正确代理该对象。然后,我的演员将被注入对服务的引用,并将调用服务来执行实际工作。这个解决方案很好,可以工作,但我希望有一个更以 Scala 为中心的解决方案。
Transactional 声明可能会很好用