Advertisement
Guest User

Untitled

a guest
Apr 28th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. package contexts.cart.cluster;
  2.  
  3. import akka.actor.PoisonPill;
  4. import akka.actor.ReceiveTimeout;
  5. import akka.cluster.sharding.ShardRegion;
  6. import akka.japi.pf.ReceiveBuilder;
  7. import akka.persistence.AbstractPersistentActor;
  8. import contexts.cart.api.CartItem;
  9. import scala.PartialFunction;
  10. import scala.concurrent.duration.Duration;
  11. import scala.runtime.BoxedUnit;
  12.  
  13. import java.util.ArrayList;
  14. import java.util.List;
  15.  
  16. import static java.util.concurrent.TimeUnit.SECONDS;
  17.  
  18. public class Cart extends AbstractPersistentActor {
  19.  
  20. List<CartItem> cartItems = new ArrayList<>();
  21.  
  22. public Cart() {
  23. System.out.println("starting a cart! " + self().path());
  24. }
  25.  
  26. @Override
  27. public String persistenceId() {
  28. return "Cart-" + self().path().name();
  29. }
  30.  
  31. @Override
  32. public Receive createReceiveRecover() {
  33. return receiveBuilder()
  34. .match(EmptyCart.class, msg -> emptyCart())
  35. .match(UpdateCart.class, msg -> cartItems = msg.getCartItems())
  36. .build();
  37. }
  38.  
  39. @Override
  40. public Receive createReceive() {
  41. return receiveBuilder()
  42. .match(EmptyCart.class, msg ->
  43. persist(msg, (EmptyCart m) ->
  44. {
  45. emptyCart();
  46. sender().tell("done", null);
  47. }))
  48. .match(UpdateCart.class, msg ->
  49. persist(msg, (UpdateCart m) ->
  50. {
  51. setCartItems(m.getCartItems());
  52. sender().tell("done", null);
  53. }))
  54. .match(GetContents.class, msg ->
  55. sender().tell(cartItems, self())
  56. )
  57. .matchEquals(ReceiveTimeout.getInstance(), msg -> passivate())
  58. .build();
  59. }
  60.  
  61.  
  62. private void emptyCart() {
  63. this.cartItems = new ArrayList<>();
  64. }
  65.  
  66. private void setCartItems(List<CartItem> cartItems) {
  67. this.cartItems = cartItems;
  68. }
  69.  
  70. @Override
  71. public void preStart() throws Exception {
  72. super.preStart();
  73. //Passivation after 120s. TODO make configurable
  74. context().setReceiveTimeout(Duration.create(120, SECONDS));
  75. }
  76.  
  77. private void passivate() {
  78. getContext().parent().tell(
  79. new ShardRegion.Passivate(PoisonPill.getInstance()), self());
  80. }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement