package com.google.sitebricks.persist.disk;
import com.google.sitebricks.persist.EntityStore;
import com.google.sitebricks.persist.Persister;
import javax.inject.Inject;
/**
* @author dhanji@gmail.com (Dhanji R. Prasanna)
*/
class DiskPersister extends Persister {
private final IndexSet indexSet;
@Inject
private DiskEntityStore entityStore;
public DiskPersister(String directory) {
this.indexSet = new IndexSet(directory);
}
@Override
public synchronized void start() {
indexSet.startup();
entityStore.init(indexSet);
}
@Override
public synchronized void shutdown() {
indexSet.shutdown();
}
@Override
protected EntityStore beginWork() {
return entityStore;
}
@Override
protected void endWork(EntityStore store, boolean commit) {
entityStore.complete(commit);
}
@Override
protected EntityStore.EntityTransaction beginTransaction() {
// Locking here ensures no other thread can interleave and dirty the underlying writer
// while this transaction is in progress.
entityStore.lock();
return new EntityStore.EntityTransaction() {
@Override
public void commit() {
entityStore.complete(true);
}
@Override
public void rollback() {
entityStore.complete(false);
}
};
}
}