Scala演员和持久化上下文

3

每次Scala Actor执行时,是否可能注入一个持久性上下文?我有一个双重的Java/Scala Spring应用程序,并使用Spring注释来标记我的Java服务和方法作为事务性。我希望在我的Scala Actor中使用类似的功能。也就是说,Actor应该在每次响应消息时都在单个事务中运行。是否有人尝试过类似的事情或者是否有这种类型的示例?

1个回答

7

为什么不通过一个被注入到actor本身的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注释。

我认为我将不得不使用上述解决方案的某种形式。我需要一个服务,可以作为Spring上下文的一部分进行实例化,并标记为@Transactional,以便Spring正确地代理对象。然后,我的actor将被注入到对服务的引用中,并调用服务来执行实际工作。这个解决方案很好,可以工作,但我希望有一个更Scala-centric的解决方案。 - AnthonyF
你不能在Scala中使用@Transactional进行装饰吗?虽然不支持嵌套注解,但Scala确实支持注解。 - andyczerwonka
我不是100%确定,但我不确定scala是否支持与Java相同级别的注释(例如嵌套)。话虽如此,一个带有定义了隔离级别等内容的普通Transactional声明可能会起作用。 - oxbow_lakes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接