* 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
173 lines
5.6 KiB
Java
173 lines
5.6 KiB
Java
/**
|
|
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
|
|
*/
|
|
|
|
package docs.persistence;
|
|
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import akka.actor.*;
|
|
import com.typesafe.config.Config;
|
|
import com.typesafe.config.ConfigFactory;
|
|
import org.iq80.leveldb.util.FileUtils;
|
|
import akka.persistence.japi.journal.JavaJournalSpec;
|
|
import akka.persistence.japi.snapshot.JavaSnapshotStoreSpec;
|
|
import akka.persistence.journal.leveldb.SharedLeveldbJournal;
|
|
import akka.persistence.journal.leveldb.SharedLeveldbStore;
|
|
import scala.concurrent.Future;
|
|
import akka.japi.Option;
|
|
import akka.japi.Procedure;
|
|
|
|
//#plugin-imports
|
|
import akka.persistence.*;
|
|
import akka.persistence.journal.japi.AsyncWriteJournal;
|
|
import akka.persistence.snapshot.japi.SnapshotStore;
|
|
|
|
//#plugin-imports
|
|
|
|
public class PersistencePluginDocTest {
|
|
|
|
|
|
static Object o1 = new Object() {
|
|
final ActorSystem system = null;
|
|
//#shared-store-creation
|
|
final ActorRef store = system.actorOf(Props.create(SharedLeveldbStore.class), "store");
|
|
//#shared-store-creation
|
|
|
|
//#shared-store-usage
|
|
class SharedStorageUsage extends UntypedActor {
|
|
@Override
|
|
public void preStart() throws Exception {
|
|
String path = "akka.tcp://example@127.0.0.1:2552/user/store";
|
|
ActorSelection selection = getContext().actorSelection(path);
|
|
selection.tell(new Identify(1), getSelf());
|
|
}
|
|
|
|
@Override
|
|
public void onReceive(Object message) throws Exception {
|
|
if (message instanceof ActorIdentity) {
|
|
ActorIdentity identity = (ActorIdentity) message;
|
|
if (identity.correlationId().equals(1)) {
|
|
ActorRef store = identity.getRef();
|
|
if (store != null) {
|
|
SharedLeveldbJournal.setStore(store, getContext().system());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//#shared-store-usage
|
|
};
|
|
|
|
class MySnapshotStore extends SnapshotStore {
|
|
@Override
|
|
public Future<Option<SelectedSnapshot>> doLoadAsync(String persistenceId, SnapshotSelectionCriteria criteria) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Future<Void> doSaveAsync(SnapshotMetadata metadata, Object snapshot) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void onSaved(SnapshotMetadata metadata) throws Exception {
|
|
}
|
|
|
|
@Override
|
|
public void doDelete(SnapshotMetadata metadata) throws Exception {
|
|
}
|
|
|
|
@Override
|
|
public void doDelete(String persistenceId, SnapshotSelectionCriteria criteria) throws Exception {
|
|
}
|
|
}
|
|
|
|
class MyAsyncJournal extends AsyncWriteJournal {
|
|
@Override
|
|
public Future<Void> doAsyncWriteMessages(Iterable<PersistentRepr> messages) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Future<Void> doAsyncDeleteMessagesTo(String persistenceId, long toSequenceNr, boolean permanent) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Future<Void> doAsyncReplayMessages(String persistenceId, long fromSequenceNr,
|
|
long toSequenceNr, long max, Procedure<PersistentRepr> replayCallback) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Future<Long> doAsyncReadHighestSequenceNr(String persistenceId, long fromSequenceNr) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
static Object o2 = new Object() {
|
|
//#journal-tck-java
|
|
class MyJournalSpecTest extends JavaJournalSpec {
|
|
|
|
public MyJournalSpecTest() {
|
|
super(ConfigFactory.parseString(
|
|
"persistence.journal.plugin = " +
|
|
"\"akka.persistence.journal.leveldb-shared\""));
|
|
}
|
|
}
|
|
//#journal-tck-java
|
|
};
|
|
|
|
static Object o3 = new Object() {
|
|
//#snapshot-store-tck-java
|
|
class MySnapshotStoreTest extends JavaSnapshotStoreSpec {
|
|
|
|
public MySnapshotStoreTest() {
|
|
super(ConfigFactory.parseString(
|
|
"akka.persistence.snapshot-store.plugin = " +
|
|
"\"akka.persistence.snapshot-store.local\""));
|
|
}
|
|
}
|
|
//#snapshot-store-tck-java
|
|
};
|
|
|
|
static Object o4 = new Object() {
|
|
//#journal-tck-before-after-java
|
|
class MyJournalSpecTest extends JavaJournalSpec {
|
|
|
|
List<File> storageLocations = new ArrayList<File>();
|
|
|
|
public MyJournalSpecTest() {
|
|
super(ConfigFactory.parseString(
|
|
"persistence.journal.plugin = " +
|
|
"\"akka.persistence.journal.leveldb-shared\""));
|
|
|
|
Config config = system().settings().config();
|
|
storageLocations.add(new File(
|
|
config.getString("akka.persistence.journal.leveldb.dir")));
|
|
storageLocations.add(new File(
|
|
config.getString("akka.persistence.snapshot-store.local.dir")));
|
|
}
|
|
|
|
@Override
|
|
public void beforeAll() {
|
|
for (File storageLocation : storageLocations) {
|
|
FileUtils.deleteRecursively(storageLocation);
|
|
}
|
|
super.beforeAll();
|
|
}
|
|
|
|
@Override
|
|
public void afterAll() {
|
|
super.afterAll();
|
|
for (File storageLocation : storageLocations) {
|
|
FileUtils.deleteRecursively(storageLocation);
|
|
}
|
|
}
|
|
}
|
|
//#journal-tck-before-after-java
|
|
};
|
|
}
|