org.prevayler
Interface Prevayler
- public interface Prevayler
Implementations of this interface can provide transparent persistence and replication to all Business Objects in a Prevalent System. ALL operations that alter the observable state of the Prevalent System must be implemented as Transaction or TransactionWithQuery objects and must be executed using the Prevayler.execute(...) methods.
See the demo applications in org.prevayler.demos for examples.
- See Also:
PrevaylerFactory
Method Summary |
Clock |
clock()
Returns the Clock used to determine the execution time of all Transaction and Queries executed using this Prevayler. |
void |
close()
Closes any files or other system resources opened by this Prevayler. |
java.lang.Object |
execute(Query sensitiveQuery)
Executes the given sensitiveQuery on the prevalentSystem(). |
void |
execute(Transaction transaction)
Executes the given Transaction on the prevalentSystem(). |
java.lang.Object |
execute(TransactionWithQuery transactionWithQuery)
Executes the given transactionWithQuery on the prevalentSystem().
|
java.lang.Object |
prevalentSystem()
Returns the Object which holds direct or indirect references to all other Business Objects in the system. |
void |
takeSnapshot()
Produces a complete serialized image of the underlying PrevalentSystem.
|
prevalentSystem
public java.lang.Object prevalentSystem()
- Returns the Object which holds direct or indirect references to all other Business Objects in the system.
clock
public Clock clock()
- Returns the Clock used to determine the execution time of all Transaction and Queries executed using this Prevayler. This Clock is useful only to Communication Objects and must NOT be used by Transactions, Queries or Business Objects, since that would make them become non-deterministic. Instead, Transactions, Queries and Business Objects must use the executionTime parameter which is passed on their execution.
execute
public void execute(Transaction transaction)
- Executes the given Transaction on the prevalentSystem(). ALL operations that alter the observable state of the prevalentSystem() must be implemented as Transaction or TransactionWithQuery objects and must be executed using the Prevayler.execute() methods. This method synchronizes on the prevalentSystem() to execute the Transaction. It is therefore guaranteed that only one Transaction is executed at a time. This means the prevalentSystem() does not have to worry about concurrency issues among Transactions.
Implementations of this interface can log the given Transaction for crash or shutdown recovery, for example, or execute it remotely on replicas of the prevalentSystem() for fault-tolerance and load-balancing purposes. Such a "replicating" implementation is planned for Prevayler release 2.1.
- See Also:
PrevaylerFactory
execute
public java.lang.Object execute(Query sensitiveQuery)
throws java.lang.Exception
- Executes the given sensitiveQuery on the prevalentSystem(). A sensitiveQuery is a Query that would be affected by the concurrent execution of a Transaction or other sensitiveQuery. This method synchronizes on the prevalentSystem() to execute the sensitiveQuery. It is therefore guaranteed that no other Transaction or sensitiveQuery is executed at the same time.
Robust Queries (queries that do not affect other operations and that are not affected by them) can be executed directly as plain old method calls on the prevalentSystem() without the need of being implemented as Query objects. Examples of Robust Queries are queries that reead the value of a single field or historical queries such as: "What was this account's balance at mid-night?".
- Returns:
- The result returned by the execution of the sensitiveQuery on the prevalentSystem().
- Throws:
java.lang.Exception
- The Exception thrown by the execution of the sensitiveQuery on the prevalentSystem().
execute
public java.lang.Object execute(TransactionWithQuery transactionWithQuery)
throws java.lang.Exception
- Executes the given transactionWithQuery on the prevalentSystem().
Implementations of this interface can log the given transaction for crash or shutdown recovery, for example, or execute it remotely on replicas of the prevalentSystem() for fault-tolerance and load-balancing purposes. Such a "replicating" implementation is planned for Prevayler release 2.1.
- Returns:
- The result returned by the execution of the sensitiveQuery on the prevalentSystem().
- Throws:
java.lang.Exception
- The Exception thrown by the execution of the sensitiveQuery on the prevalentSystem().- See Also:
PrevaylerFactory
takeSnapshot
public void takeSnapshot()
throws java.io.IOException
- Produces a complete serialized image of the underlying PrevalentSystem.
This will accelerate future system startups. Taking a snapshot once a day is enough for most applications.
This method synchronizes on the prevalentSystem() in order to take the snapshot. This means that transaction execution will be blocked while the snapshot is taken.
- Throws:
java.io.IOException
- if there is trouble writing to the snapshot file.
close
public void close()
throws java.io.IOException
- Closes any files or other system resources opened by this Prevayler.
- Throws:
java.io.IOException
- if there is trouble closing a file or some other system resource.
'Prevayler' is a trademark of Klaus Wuestefeld.
Copyleft 2001-2004 Klaus Wuestefeld.