【问题标题】:scala actors and persistence contextscala演员和持久性上下文
【发布时间】:2009-10-11 13:49:29
【问题描述】:

是否可以在每次执行时将持久性上下文注入到 scala actor 中?我有一个双 Java/Scala spring 应用程序,我正在使用 spring 注释将我的 Java 服务和方法标记为事务性的。我想在我的 scala 演员中使用类似的功能。也就是说,参与者每次响应消息时都应该在单个事务中进行操作。有没有人尝试过类似的事情,或者有这种事情的例子吗?

【问题讨论】:

    标签: scala jpa


    【解决方案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 声明可能会很好用
    猜你喜欢
    • 2023-03-03
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2013-11-24
    相关资源
    最近更新 更多