Guest User

Untitled

a guest
Dec 11th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. package info.batey.akka.persistence
  2.  
  3. import akka.actor.{ActorSystem, Props}
  4. import akka.persistence.PersistentActor
  5. import info.batey.akka.persistence.AutomaticPersist.RealPersistentActor.{PrintName, SayName}
  6.  
  7. object AutomaticPersist extends App {
  8.  
  9. trait PersistMe
  10.  
  11. trait AutomaticPersister extends PersistentActor {
  12.  
  13. val persistPredicate: Any => Boolean
  14.  
  15. final override def receive = receiveCommand
  16.  
  17. override def receiveCommand: Receive = {
  18. case cmd: PersistMe => persist(cmd) { evt =>
  19. println("Persisting: " + cmd)
  20. commandHandler(evt)
  21. }
  22. case cmd =>
  23. println("Not persisting: " + cmd)
  24. commandHandler(cmd)
  25. }
  26.  
  27. def commandHandler(evt: Any): Unit
  28. }
  29.  
  30. object RealPersistentActor {
  31. case class PrintName(name: String) extends PersistMe
  32. case class SayName(name: String)
  33.  
  34. }
  35.  
  36. class RealPersistentActor(val persistenceId: String) extends AutomaticPersister {
  37. override def receiveRecover = {
  38. case PrintName(name) =>
  39. println(s"recovering $name")
  40. case msg =>
  41. println(s"Other kinds of msg: $msg")
  42. }
  43.  
  44. override def commandHandler(evt: Any): Unit = evt match {
  45. case PrintName(name) =>
  46. println(s"Already been persisted by AlwaysPersist, now I just print the name: $name")
  47. }
  48. override val persistPredicate = {
  49. case _:PrintName => true
  50. case _ => false
  51. }
  52. }
  53.  
  54. val system = ActorSystem()
  55. val pa = system.actorOf(Props(new RealPersistentActor("p100")))
  56.  
  57. pa ! PrintName("bella")
  58. pa ! PrintName("ruby")
  59. pa ! SayName("wilma")
  60. }
Add Comment
Please, Sign In to add comment