package org.prevayler.implementation; import org.prevayler.TransactionWithQuery; import org.prevayler.foundation.serialization.Serializer; import java.util.Date; class TransactionWithQueryCapsule extends Capsule { private static final long serialVersionUID = 78811627002206298L; private transient Object _queryResult; private transient Exception _queryException; public TransactionWithQueryCapsule(TransactionWithQuery transactionWithQuery, Serializer journalSerializer) { super(transactionWithQuery, journalSerializer); } public TransactionWithQueryCapsule(byte[] serialized) { super(serialized); } protected void justExecute(Object transaction, Object prevalentSystem, Date executionTime) { try { _queryResult = ((TransactionWithQuery) transaction).executeAndQuery(prevalentSystem, executionTime); } catch (RuntimeException rx) { _queryException = rx; throw rx; //This is necessary because of the rollback feature. } catch (Exception ex) { _queryException = ex; } } public Object result() throws Exception { if (_queryException != null) throw _queryException; return _queryResult; } public Capsule cleanCopy() { return new TransactionWithQueryCapsule(serialized()); } }