Interface Transactional
-
- All Known Subinterfaces:
Dataset,DatasetGraph,DatasetGraphWrapperView,TransactionalNotSupportedMixin
- All Known Implementing Classes:
DatasetGraphBase,DatasetGraphBaseFind,DatasetGraphCollection,DatasetGraphFilteredView,DatasetGraphInMemory,DatasetGraphMap,DatasetGraphMapLink,DatasetGraphMonitor,DatasetGraphNull,DatasetGraphOne,DatasetGraphQuads,DatasetGraphRDFS,DatasetGraphReadOnly,DatasetGraphSink,DatasetGraphTriplesQuads,DatasetGraphViewGraphs,DatasetGraphWrapper,DatasetGraphZero,DatasetImpl,DatasetOne,DifferenceDatasetGraph,DyadicDatasetGraph,DynamicDatasets.DynamicDatasetGraph,IntersectionDatasetGraph,TransactionalLock,TransactionalNotSupported,TransactionalNull,TxnCounter,TxnDataset2Graph,UnionDatasetGraph
public interface TransactionalInterface that encapsulates the begin/abort|commit/end operations.The read lifecycle is:
begin(READ) ... end()
commitandabortare allowed.The write lifecycle is:
begin(WRITE) ... abort() or commit() end()
end()is optional for "write" but is preferred.Application use
Applications can conveniently execute the lifecycle with methods to read or write:dataset.executeRead(()-> { ... sparql query ... });dataset.executeWrite(()-> { ... sparql update ... });Use one of calculateRead or calculateWrite to return a value for the transaction block.Core Functionality
Directly called, code might look like:Transactional object = ... object.begin(TxnMode.READ) ; try { ... actions inside a read transaction ... } finally { object.end() ; }or
Transactional object = ... object.begin(TxnMode.WRITE) ; try { ... actions inside a write transaction ... object.commit() ; } finally { // This causes an abort ifcommithas not been called. object.end() ; }- See Also:
Txn
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static classTransactional.Promote
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description voidabort()Abort a transaction - finish the transaction and undo any changes (if a "write" transaction)default voidbegin()Start a transaction which is READ mode and which will switch to WRITE if an update is attempted but only if no intermediate transaction has performed an update.voidbegin(ReadWrite readWrite)Start either a READ or WRITE transaction.voidbegin(TxnType type)Start a transaction.
READ or WRITE transactions start in that state and do not change for the lifetime of the transaction.default <T> Tcalc(TxnType txnType, java.util.function.Supplier<T> action)Execute and return a value in a transaction with the giventransaction type.default <X> Xcalculate(java.util.function.Supplier<X> r)Execute in a "read" transaction that can promote to "write" and return some calculated value.default <X> XcalculateRead(java.util.function.Supplier<X> r)Execute and return a value in a read transactiondefault <X> XcalculateWrite(java.util.function.Supplier<X> r)Execute and return a value in a write transaction.voidcommit()Commit a transaction - finish the transaction and make any changes permanent (if a "write" transaction)voidend()Finish the transaction - if a write transaction and commit() has not been called, then abortdefault voidexec(TxnType txnType, java.lang.Runnable action)Execute application code in a transaction with the giventransaction type.default voidexecute(java.lang.Runnable r)Execute in a "read" transaction that can promote to "write".default <T extends Transactional>
voidexecuteRead(java.lang.Runnable r)Execute in a read transactiondefault <T extends Transactional>
voidexecuteWrite(java.lang.Runnable r)Execute the Runnable in a write transactionbooleanisInTransaction()Say whether inside a transaction.default booleanpromote()Attempt to promote a transaction from "read" to "write" when the transaction started with a "promote" mode (READ_PROMOTEorREAD_COMMITTED_PROMOTE).booleanpromote(Transactional.Promote mode)Attempt to promote a transaction from "read" mode to "write" and the transaction.ReadWritetransactionMode()Return the current mode of the transaction - "read" or "write".TxnTypetransactionType()Return the transaction type used inbegin(TxnType).
-
-
-
Method Detail
-
begin
default void begin()
Start a transaction which is READ mode and which will switch to WRITE if an update is attempted but only if no intermediate transaction has performed an update.See
begin(TxnType)for more details an options.May not be implemented. See
begin(ReadWrite)is guaranteed to be provided.
-
begin
void begin(TxnType type)
Start a transaction.
READ or WRITE transactions start in that state and do not change for the lifetime of the transaction.WRITE: this guarantees a WRITE will complete ifcommit()is called. The same asbegin(ReadWrite.WRITE).READ: the transaction can not promote to WRITE,ensuring read-only access to the data. The same asbegin(ReadWrite.READ).READ_PROMOTE: the transaction will go from "read" to "write" if an update is attempted and if the dataset has not been changed by another write transaction. See alsopromote().READ_COMMITTED_PROMOTE: Use this with care. The promotion will succeed but changes from other transactions become visible.
begin). IfREAD_PROMOTE, the dataset must not have changed; ifREAD_COMMITTED_PROMOTEany intermediate changes are visible but the application can not assume any data it has read in the transaction is the same as it was at the point the transaction started.This operation is optional and some implementations may throw a
JenaTransactionExceptionexception for some or allTxnTypevalues.See
begin(ReadWrite)for a form that is required of implementations.
-
begin
void begin(ReadWrite readWrite)
Start either a READ or WRITE transaction.
-
promote
default boolean promote()
Attempt to promote a transaction from "read" to "write" when the transaction started with a "promote" mode (READ_PROMOTEorREAD_COMMITTED_PROMOTE).Returns "true" if the transaction is in write mode after the call. The method always succeeds of the transaction is already "write".
A
READ_COMMITTED_PROMOTEcan always be promoted, but the call may need to wait.This method returns true if a
READ_PROMOTEorREAD_COMMITTED_PROMOTEis promoted.This method returns false if a
READ_PROMOTEcan't be promoted - the transaction is still valid and in "read" mode. Any further calls topromote()will also return false.This method returns false if there is an attempt to promote a "READ" transaction.
-
promote
boolean promote(Transactional.Promote mode)
Attempt to promote a transaction from "read" mode to "write" and the transaction. This method allows the form of promotion to be specified. The transaction must not have been started withREAD, which is read-only.An argument of
READ_PROMOTEtreats the promotion as if the transaction was started withREAD_PROMOTE(any other writer commiting since the transaction started blocks promotion) andREAD_COMMITTED_PROMOTEtreats the promotion as if the transaction was started withREAD_COMMITTED_PROMOTE(intemediate writer commits become visible).Returns "true" if the transaction is in write mode after the call. The method always succeeds of the transaction is already "write".
This method returns true if a
READ_PROMOTEorREAD_COMMITTED_PROMOTEis promoted.This method returns false if a
READ_PROMOTEcan't be promoted - the transaction is still valid and in "read" mode.This method throws an exception if there is an attempt to promote a
READtransaction.
-
commit
void commit()
Commit a transaction - finish the transaction and make any changes permanent (if a "write" transaction)
-
abort
void abort()
Abort a transaction - finish the transaction and undo any changes (if a "write" transaction)
-
end
void end()
Finish the transaction - if a write transaction and commit() has not been called, then abort
-
transactionMode
ReadWrite transactionMode()
Return the current mode of the transaction - "read" or "write". If the caller is not in a transaction, this method returns null.
-
transactionType
TxnType transactionType()
Return the transaction type used inbegin(TxnType). If the caller is not in a transaction, this method returns null.
-
isInTransaction
boolean isInTransaction()
Say whether inside a transaction.
-
exec
default void exec(TxnType txnType, java.lang.Runnable action)
Execute application code in a transaction with the giventransaction type. SeeTxn.exec(T, org.apache.jena.query.TxnType, java.lang.Runnable).
-
calc
default <T> T calc(TxnType txnType, java.util.function.Supplier<T> action)
Execute and return a value in a transaction with the giventransaction type. SeeTxn.calc(T, org.apache.jena.query.TxnType, java.util.function.Supplier<X>).
-
execute
default void execute(java.lang.Runnable r)
Execute in a "read" transaction that can promote to "write".Such a transaction may abort if an update is executed by another thread before this one is promoted to "write" mode. If so, the data protected by
txnis unchanged.If the application knows updates will be needed, consider using
executeWrite(java.lang.Runnable)which starts in "write" mode.The application code can call
promote()to attempt to change from "read" to "write"; thepromotemethod returns a boolean indicating whether the promotion was possible or not.
-
calculate
default <X> X calculate(java.util.function.Supplier<X> r)
Execute in a "read" transaction that can promote to "write" and return some calculated value.Such a transaction may abort if an update is executed by another thread before this one is promoted to "write" mode. If so, the data protected by
txnis unchanged.If the application knows updates will be needed, consider using
executeWrite(java.lang.Runnable)which starts in "write" mode.The application code can call
promote()to attempt to change from "read" to "write"; thepromotemethod returns a boolean indicating whether the promotion was possible or not.
-
executeRead
default <T extends Transactional> void executeRead(java.lang.Runnable r)
Execute in a read transaction
-
calculateRead
default <X> X calculateRead(java.util.function.Supplier<X> r)
Execute and return a value in a read transaction
-
executeWrite
default <T extends Transactional> void executeWrite(java.lang.Runnable r)
Execute the Runnable in a write transaction
-
calculateWrite
default <X> X calculateWrite(java.util.function.Supplier<X> r)
Execute and return a value in a write transaction.
-
-