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演员和持久性上下文的主要内容,如果未能解决你的问题,请参考以下文章

什么是 Scala 上下文和视图边界?

从你的全世界路过-论演员的自我修养

使用 Netty 和 Scala 演员的异步 http 请求

类型安全:未经检查的演员表

用Scala实现一个简单的Python的上下文管理器

Scala 演员和环境参考