pekko/akka-samples/akka-sample-persistence-java/src/main/java/sample/persistence/PersistentActorFailureExample.java
Patrik Nordwall c566d5a106 per #15423 Remove deprecated features from akka-persistence
* remove channels
* remove View
* remove Processor
* collapse the complicated internal state management
  that was spread out between Processor, Eventsourced and Recovery
* remove Recovery trait, this caused some duplication between Eventsourced
  and PersistentView, but but the enhanced PersistentView will not be based
  on recovery infrastructure, and therefore PersistentView code will be replaced anyway
* remove PersistentBatch
* remove LoopMessage
* remove deleteMessages of individual messages
* remove Persistent, PersistentRepr and PersistentImpl are kept
* remove processorId
* update doc sample code
* note in migration guide about persistenceId
* rename Resequencable to PersistentEnvelope
2014-12-12 16:18:47 +01:00

76 lines
2.1 KiB
Java

package sample.persistence;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.japi.Procedure;
import akka.persistence.UntypedPersistentActor;
import java.util.ArrayList;
public class PersistentActorFailureExample {
public static class ExamplePersistentActor extends UntypedPersistentActor {
@Override
public String persistenceId() { return "sample-id-2"; }
private ArrayList<Object> received = new ArrayList<Object>();
@Override
public void onReceiveCommand(Object message) throws Exception {
if (message.equals("boom")) {
throw new Exception("boom");
} else if (message.equals("print")) {
System.out.println("received " + received);
} else if (message instanceof String) {
String s = (String) message;
persist(s, new Procedure<String>() {
public void apply(String evt) throws Exception {
received.add(evt);
}
});
} else {
unhandled(message);
}
}
@Override
public void onReceiveRecover(Object message) {
if (message instanceof String) {
received.add((String) message);
} else {
unhandled(message);
}
}
}
public static void main(String... args) throws Exception {
final ActorSystem system = ActorSystem.create("example");
final ActorRef persistentActor = system.actorOf(Props.create(ExamplePersistentActor.class), "persistentActor-2");
persistentActor.tell("a", null);
persistentActor.tell("print", null);
persistentActor.tell("boom", null);
persistentActor.tell("print", null);
persistentActor.tell("b", null);
persistentActor.tell("print", null);
persistentActor.tell("c", null);
persistentActor.tell("print", null);
// Will print in a first run (i.e. with empty journal):
// received [a]
// received [a, b]
// received [a, b, c]
// Will print in a second run:
// received [a, b, c, a]
// received [a, b, c, a, b]
// received [a, b, c, a, b, c]
// etc ...
Thread.sleep(1000);
system.terminate();
}
}