scala演员和持久性上下文
Posted
技术标签:
【中文标题】scala演员和持久性上下文【英文标题】:scala actors and persistence context 【发布时间】:2009-10-11 13:49:29 【问题描述】:是否可以在每次执行时将持久性上下文注入到 scala actor 中?我有一个双 Java/Scala spring 应用程序,我正在使用 spring 注释将我的 Java 服务和方法标记为事务性的。我想在我的 scala 演员中使用类似的功能。也就是说,参与者每次响应消息时都应该在单个事务中进行操作。有没有人尝试过类似的事情,或者有这种事情的例子吗?
【问题讨论】:
【参考方案1】:为什么不通过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 装饰你的Scala 吗? Scala 确实支持注释,尽管是非嵌套的。
我对此不是 100%,但我不确定 scala 是否完全支持与 Java 相同级别的注释(例如嵌套)。也就是说,定义了隔离级别等的普通 Transactional
声明可能会很好用以上是关于scala演员和持久性上下文的主要内容,如果未能解决你的问题,请参考以下文章