package org.prevayler.demos.scalability.prevayler; import org.prevayler.PrevaylerFactory; import org.prevayler.foundation.serialization.Serializer; import java.io.File; import java.io.IOException; import java.io.PrintStream; public class PrevaylerTransactionSubject extends PrevaylerScalabilitySubject { private final String _journalDirectory; private final String _journalSerializer; public PrevaylerTransactionSubject( String journalDirectory, String journalSerializer) throws java.io.IOException, ClassNotFoundException, IllegalAccessException, InstantiationException { _journalDirectory=journalDirectory; _journalSerializer=journalSerializer; if (new File(_journalDirectory).exists()) PrevalenceTest.delete(_journalDirectory); initializePrevayler(); } public Object createTestConnection(){ return new PrevaylerTransactionConnection(prevayler); } public void reportResourcesUsed( PrintStream out){ int totalSize=0; File[] files=new File(_journalDirectory).listFiles(); for (int i=0; i < files.length; i++) { totalSize+=files[i].length(); } out.println("Disk space used: " + totalSize); } public boolean isConsistent() throws Exception { int expectedResult=prevayler.prevalentSystem().hashCode(); initializePrevayler(); return prevayler.prevalentSystem().hashCode() == expectedResult; } private void initializePrevayler() throws IOException, InstantiationException, IllegalAccessException, ClassNotFoundException { PrevaylerFactory factory=new PrevaylerFactory(); factory.configurePrevalentSystem(new TransactionSystem()); factory.configurePrevalenceDirectory(_journalDirectory); factory.configureJournalSerializer("journal",(Serializer)Class.forName(_journalSerializer).newInstance()); factory.configureTransactionFiltering(false); prevayler=factory.create(); } }