blob: ac14ce748215f6c945f7c5f93369508ce8914afc [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>Transactional (Apache Jena ARQ)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="declaration: module: org.apache.jena.arq, package: org.apache.jena.sparql.core, interface: Transactional">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/Transactional.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li><a href="#nested-class-summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../module-summary.html">org.apache.jena.arq</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.jena.sparql.core</a></div>
<h1 title="Interface Transactional" class="title">Interface Transactional</h1>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Known Subinterfaces:</dt>
<dd><code><a href="../../query/Dataset.html" title="interface in org.apache.jena.query">Dataset</a></code>, <code><a href="DatasetGraph.html" title="interface in org.apache.jena.sparql.core">DatasetGraph</a></code>, <code><a href="../../system/buffering/DatasetGraphBuffering.html" title="interface in org.apache.jena.system.buffering">DatasetGraphBuffering</a></code>, <code><a href="DatasetGraphWrapperView.html" title="interface in org.apache.jena.sparql.core">DatasetGraphWrapperView</a></code>, <code><a href="TransactionalNotSupportedMixin.html" title="interface in org.apache.jena.sparql.core">TransactionalNotSupportedMixin</a></code>, <code><a href="TransactionalTrait.html" title="interface in org.apache.jena.sparql.core">TransactionalTrait</a></code></dd>
</dl>
<dl class="notes">
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="../../system/buffering/BufferingDatasetGraph.html" title="class in org.apache.jena.system.buffering">BufferingDatasetGraph</a></code>, <code><a href="DatasetGraphBase.html" title="class in org.apache.jena.sparql.core">DatasetGraphBase</a></code>, <code><a href="DatasetGraphBaseFind.html" title="class in org.apache.jena.sparql.core">DatasetGraphBaseFind</a></code>, <code><a href="DatasetGraphCollection.html" title="class in org.apache.jena.sparql.core">DatasetGraphCollection</a></code>, <code><a href="DatasetGraphFilteredView.html" title="class in org.apache.jena.sparql.core">DatasetGraphFilteredView</a></code>, <code><a href="mem/DatasetGraphInMemory.html" title="class in org.apache.jena.sparql.core.mem">DatasetGraphInMemory</a></code>, <code><a href="DatasetGraphMap.html" title="class in org.apache.jena.sparql.core">DatasetGraphMap</a></code>, <code><a href="DatasetGraphMapLink.html" title="class in org.apache.jena.sparql.core">DatasetGraphMapLink</a></code>, <code><a href="DatasetGraphNull.html" title="class in org.apache.jena.sparql.core">DatasetGraphNull</a></code>, <code><a href="DatasetGraphOne.html" title="class in org.apache.jena.sparql.core">DatasetGraphOne</a></code>, <code><a href="DatasetGraphQuads.html" title="class in org.apache.jena.sparql.core">DatasetGraphQuads</a></code>, <code><a href="../../rdfs/DatasetGraphRDFS.html" title="class in org.apache.jena.rdfs">DatasetGraphRDFS</a></code>, <code><a href="DatasetGraphReadOnly.html" title="class in org.apache.jena.sparql.core">DatasetGraphReadOnly</a></code>, <code><a href="DatasetGraphSink.html" title="class in org.apache.jena.sparql.core">DatasetGraphSink</a></code>, <code><a href="DatasetGraphTriplesQuads.html" title="class in org.apache.jena.sparql.core">DatasetGraphTriplesQuads</a></code>, <code><a href="DatasetGraphWrapper.html" title="class in org.apache.jena.sparql.core">DatasetGraphWrapper</a></code>, <code><a href="DatasetGraphZero.html" title="class in org.apache.jena.sparql.core">DatasetGraphZero</a></code>, <code><a href="DatasetImpl.html" title="class in org.apache.jena.sparql.core">DatasetImpl</a></code>, <code><a href="../util/DifferenceDatasetGraph.html" title="class in org.apache.jena.sparql.util">DifferenceDatasetGraph</a></code>, <code><a href="../util/DyadicDatasetGraph.html" title="class in org.apache.jena.sparql.util">DyadicDatasetGraph</a></code>, <code><a href="DynamicDatasets.DynamicDatasetGraph.html" title="class in org.apache.jena.sparql.core">DynamicDatasets.DynamicDatasetGraph</a></code>, <code><a href="../graph/GraphTxn.html" title="class in org.apache.jena.sparql.graph">GraphTxn</a></code>, <code><a href="../util/IntersectionDatasetGraph.html" title="class in org.apache.jena.sparql.util">IntersectionDatasetGraph</a></code>, <code><a href="TransactionalLock.html" title="class in org.apache.jena.sparql.core">TransactionalLock</a></code>, <code><a href="TransactionalNotSupported.html" title="class in org.apache.jena.sparql.core">TransactionalNotSupported</a></code>, <code><a href="TransactionalNull.html" title="class in org.apache.jena.sparql.core">TransactionalNull</a></code>, <code><a href="../../system/TxnCounter.html" title="class in org.apache.jena.system">TxnCounter</a></code>, <code><a href="TxnDataset2Graph.html" title="class in org.apache.jena.sparql.core">TxnDataset2Graph</a></code>, <code><a href="../util/UnionDatasetGraph.html" title="class in org.apache.jena.sparql.util">UnionDatasetGraph</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public interface </span><span class="element-name type-name-label">Transactional</span></div>
<div class="block">Interface that encapsulates the begin/abort|commit/end operations.
<p>The read lifecycle is:
<pre> begin(READ) ... end()</pre>
<p><code>commit</code> and <code>abort</code> are allowed.
<p>The write lifecycle is:
<pre> begin(WRITE) ... abort() or commit() end()</pre>
<p><code>end()</code> is optional for "write" but is preferred.
</p>
<h4>Application use</h4>
Applications can conveniently execute the lifecycle with methods to read or write:
<pre>dataset.executeRead(()-&gt; { ... sparql query ... });</pre>
<pre>dataset.executeWrite(()-&gt; { ... sparql update ... });</pre>
<p>
Use one of <code>calculateRead</code> or <code>calculateWrite</code>
to return a value for the transaction block.
</p>
<h4>Core Functionality</h4>
Directly called, code might look like:
<pre>
Transactional object = ...
object.begin(TxnMode.READ) ;
try {
... actions inside a read transaction ...
} finally { object.end() ; }
</pre>
<p>or</p>
<pre>
Transactional object = ...
object.begin(TxnMode.WRITE) ;
try {
... actions inside a write transaction ...
object.commit() ;
} finally {
// This causes an abort if <code>commit</code> has not been called.
object.end() ;
}
</pre></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../system/Txn.html" title="class in org.apache.jena.system"><code>Txn</code></a></li>
</ul>
</dd>
</dl>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li>
<section class="nested-class-summary" id="nested-class-summary">
<h2>Nested Class Summary</h2>
<div class="caption"><span>Nested Classes</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Interface</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static enum&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="Transactional.Promote.html" class="type-name-link" title="enum class in org.apache.jena.sparql.core">Transactional.Promote</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab3" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab3', 3)" class="table-tab">Abstract Methods</button><button id="method-summary-table-tab5" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab5', 3)" class="table-tab">Default Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#abort()" class="member-name-link">abort</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Abort a transaction - finish the transaction and undo any changes (if a "write" transaction)</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#begin()" class="member-name-link">begin</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">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.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#begin(org.apache.jena.query.ReadWrite)" class="member-name-link">begin</a><wbr>(<a href="../../query/ReadWrite.html" title="enum class in org.apache.jena.query">ReadWrite</a>&nbsp;readWrite)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Start either a READ or WRITE transaction.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#begin(org.apache.jena.query.TxnType)" class="member-name-link">begin</a><wbr>(<a href="../../query/TxnType.html" title="enum class in org.apache.jena.query">TxnType</a>&nbsp;type)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Start a transaction.<br/>
READ or WRITE transactions start in that state and do not change for the
lifetime of the transaction.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default &lt;T&gt;&nbsp;T</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#calc(org.apache.jena.query.TxnType,java.util.function.Supplier)" class="member-name-link">calc</a><wbr>(<a href="../../query/TxnType.html" title="enum class in org.apache.jena.query">TxnType</a>&nbsp;txnType,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Supplier.html" title="class or interface in java.util.function" class="external-link">Supplier</a>&lt;T&gt;&nbsp;action)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Execute and return a value in a transaction with the given <a href="../../query/TxnType.html" title="enum class in org.apache.jena.query"><code>transaction type</code></a>.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default &lt;X&gt;&nbsp;X</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#calculate(java.util.function.Supplier)" class="member-name-link">calculate</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Supplier.html" title="class or interface in java.util.function" class="external-link">Supplier</a>&lt;X&gt;&nbsp;r)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Execute in a "read" transaction that can promote to "write" and return some calculated value.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default &lt;X&gt;&nbsp;X</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#calculateRead(java.util.function.Supplier)" class="member-name-link">calculateRead</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Supplier.html" title="class or interface in java.util.function" class="external-link">Supplier</a>&lt;X&gt;&nbsp;r)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Execute and return a value in a read transaction</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default &lt;X&gt;&nbsp;X</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#calculateWrite(java.util.function.Supplier)" class="member-name-link">calculateWrite</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Supplier.html" title="class or interface in java.util.function" class="external-link">Supplier</a>&lt;X&gt;&nbsp;r)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Execute and return a value in a write transaction.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#commit()" class="member-name-link">commit</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Commit a transaction - finish the transaction and make any changes permanent (if a "write" transaction)</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#end()" class="member-name-link">end</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Finish the transaction - if a write transaction and commit() has not been called, then abort</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#exec(org.apache.jena.query.TxnType,java.lang.Runnable)" class="member-name-link">exec</a><wbr>(<a href="../../query/TxnType.html" title="enum class in org.apache.jena.query">TxnType</a>&nbsp;txnType,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Runnable.html" title="class or interface in java.lang" class="external-link">Runnable</a>&nbsp;action)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Execute application code in a transaction with the given <a href="../../query/TxnType.html" title="enum class in org.apache.jena.query"><code>transaction type</code></a>.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#execute(java.lang.Runnable)" class="member-name-link">execute</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Runnable.html" title="class or interface in java.lang" class="external-link">Runnable</a>&nbsp;r)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Execute in a "read" transaction that can promote to "write".</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default &lt;T extends <a href="Transactional.html" title="interface in org.apache.jena.sparql.core">Transactional</a>&gt;<br>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#executeRead(java.lang.Runnable)" class="member-name-link">executeRead</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Runnable.html" title="class or interface in java.lang" class="external-link">Runnable</a>&nbsp;r)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Execute in a read transaction</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#executeWrite(java.lang.Runnable)" class="member-name-link">executeWrite</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Runnable.html" title="class or interface in java.lang" class="external-link">Runnable</a>&nbsp;r)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Execute the Runnable in a write transaction</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#isInTransaction()" class="member-name-link">isInTransaction</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Say whether inside a transaction.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#promote()" class="member-name-link">promote</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Attempt to promote a transaction from "read" to "write" when the transaction
started with a "promote" mode (<code>READ_PROMOTE</code> or
<code>READ_COMMITTED_PROMOTE</code>).</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#promote(org.apache.jena.sparql.core.Transactional.Promote)" class="member-name-link">promote</a><wbr>(<a href="Transactional.Promote.html" title="enum class in org.apache.jena.sparql.core">Transactional.Promote</a>&nbsp;mode)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Attempt to promote a transaction from "read" mode to "write" and the transaction.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="../../query/ReadWrite.html" title="enum class in org.apache.jena.query">ReadWrite</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#transactionMode()" class="member-name-link">transactionMode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Return the current mode of the transaction - "read" or "write".</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="../../query/TxnType.html" title="enum class in org.apache.jena.query">TxnType</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#transactionType()" class="member-name-link">transactionType</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Return the transaction type used in <code>begin(TxnType)</code>.</div>
</div>
</div>
</div>
</div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="begin()">
<h3>begin</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">begin</span>()</div>
<div class="block">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.
<p>
See <a href="#begin(org.apache.jena.query.TxnType)"><code>begin(TxnType)</code></a> for more details an options.
<p>
May not be implemented. See <a href="#begin(org.apache.jena.query.ReadWrite)"><code>begin(ReadWrite)</code></a> is guaranteed to be provided.</div>
</section>
</li>
<li>
<section class="detail" id="begin(org.apache.jena.query.TxnType)">
<h3>begin</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">begin</span><wbr><span class="parameters">(<a href="../../query/TxnType.html" title="enum class in org.apache.jena.query">TxnType</a>&nbsp;type)</span></div>
<div class="block">Start a transaction.<br/>
READ or WRITE transactions start in that state and do not change for the
lifetime of the transaction.
<ul>
<li><code>WRITE</code>: this guarantees a WRITE will complete if <code>commit()</code> is
called. The same as <code>begin(ReadWrite.WRITE)</code>.
<li><code>READ</code>: the transaction can not promote to WRITE,ensuring read-only
access to the data. The same as <code>begin(ReadWrite.READ)</code>.
<li><code>READ_PROMOTE</code>: 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 also <a href="#promote()"><code>promote()</code></a>.
<li><code>READ_COMMITTED_PROMOTE</code>: Use this with care. The promotion will
succeed but changes from other transactions become visible.
</ul>
Read committed: at the point transaction attempts promotion from "read" to
"write", the system checks if the dataset has change since the transaction started
(called <code>begin</code>). If <code>READ_PROMOTE</code>, the dataset must not have
changed; if <code>READ_COMMITTED_PROMOTE</code> any 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.
<p>
This operation is optional and some implementations may throw
a <a href="../JenaTransactionException.html" title="class in org.apache.jena.sparql"><code>JenaTransactionException</code></a> exception for some or all <a href="../../query/TxnType.html" title="enum class in org.apache.jena.query"><code>TxnType</code></a> values.
<p>
See <a href="#begin(org.apache.jena.query.ReadWrite)"><code>begin(ReadWrite)</code></a> for a form that is required of implementations.</div>
</section>
</li>
<li>
<section class="detail" id="begin(org.apache.jena.query.ReadWrite)">
<h3>begin</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">begin</span><wbr><span class="parameters">(<a href="../../query/ReadWrite.html" title="enum class in org.apache.jena.query">ReadWrite</a>&nbsp;readWrite)</span></div>
<div class="block">Start either a READ or WRITE transaction.</div>
</section>
</li>
<li>
<section class="detail" id="promote()">
<h3>promote</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">promote</span>()</div>
<div class="block">Attempt to promote a transaction from "read" to "write" when the transaction
started with a "promote" mode (<code>READ_PROMOTE</code> or
<code>READ_COMMITTED_PROMOTE</code>).
<p>
Returns "true" if the transaction is in write mode after the call. The method
always succeeds of the transaction is already "write".
<p>
A <code>READ_COMMITTED_PROMOTE</code> can always be promoted, but the call may need to
wait.
<p>
This method returns true if a <code>READ_PROMOTE</code> or
<code>READ_COMMITTED_PROMOTE</code> is promoted.
<p>
This method returns false if a <code>READ_PROMOTE</code> can't be promoted - the
transaction is still valid and in "read" mode. Any further calls to
<code>promote()</code> will also return false.
<p>
This method returns false if there is an attempt to promote a "READ" transaction.</div>
</section>
</li>
<li>
<section class="detail" id="promote(org.apache.jena.sparql.core.Transactional.Promote)">
<h3>promote</h3>
<div class="member-signature"><span class="return-type">boolean</span>&nbsp;<span class="element-name">promote</span><wbr><span class="parameters">(<a href="Transactional.Promote.html" title="enum class in org.apache.jena.sparql.core">Transactional.Promote</a>&nbsp;mode)</span></div>
<div class="block">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
with <code>READ</code>, which is read-only.
<p>
An argument of <code>READ_PROMOTE</code> treats the promotion as if the transaction was started
with <code>READ_PROMOTE</code> (any other writer commiting since the transaction started
blocks promotion) and <code>READ_COMMITTED_PROMOTE</code> treats the promotion as if the transaction was started
with <code>READ_COMMITTED_PROMOTE</code> (intemediate writer commits become visible).
<p>
Returns "true" if the transaction is in write mode after the call. The method
always succeeds of the transaction is already "write".
<p>
This method returns true if a <code>READ_PROMOTE</code> or
<code>READ_COMMITTED_PROMOTE</code> is promoted.
<p>
This method returns false if a <code>READ_PROMOTE</code> can't be promoted - the
transaction is still valid and in "read" mode.
<p>
This method throws an exception if there is an attempt to promote a <code>READ</code>
transaction.</div>
</section>
</li>
<li>
<section class="detail" id="commit()">
<h3>commit</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">commit</span>()</div>
<div class="block">Commit a transaction - finish the transaction and make any changes permanent (if a "write" transaction)</div>
</section>
</li>
<li>
<section class="detail" id="abort()">
<h3>abort</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">abort</span>()</div>
<div class="block">Abort a transaction - finish the transaction and undo any changes (if a "write" transaction)</div>
</section>
</li>
<li>
<section class="detail" id="end()">
<h3>end</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">end</span>()</div>
<div class="block">Finish the transaction - if a write transaction and commit() has not been called, then abort</div>
</section>
</li>
<li>
<section class="detail" id="transactionMode()">
<h3>transactionMode</h3>
<div class="member-signature"><span class="return-type"><a href="../../query/ReadWrite.html" title="enum class in org.apache.jena.query">ReadWrite</a></span>&nbsp;<span class="element-name">transactionMode</span>()</div>
<div class="block">Return the current mode of the transaction - "read" or "write".
If the caller is not in a transaction, this method returns null.</div>
</section>
</li>
<li>
<section class="detail" id="transactionType()">
<h3>transactionType</h3>
<div class="member-signature"><span class="return-type"><a href="../../query/TxnType.html" title="enum class in org.apache.jena.query">TxnType</a></span>&nbsp;<span class="element-name">transactionType</span>()</div>
<div class="block">Return the transaction type used in <code>begin(TxnType)</code>.
If the caller is not in a transaction, this method returns null.</div>
</section>
</li>
<li>
<section class="detail" id="isInTransaction()">
<h3>isInTransaction</h3>
<div class="member-signature"><span class="return-type">boolean</span>&nbsp;<span class="element-name">isInTransaction</span>()</div>
<div class="block">Say whether inside a transaction.</div>
</section>
</li>
<li>
<section class="detail" id="exec(org.apache.jena.query.TxnType,java.lang.Runnable)">
<h3>exec</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">exec</span><wbr><span class="parameters">(<a href="../../query/TxnType.html" title="enum class in org.apache.jena.query">TxnType</a>&nbsp;txnType,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Runnable.html" title="class or interface in java.lang" class="external-link">Runnable</a>&nbsp;action)</span></div>
<div class="block">Execute application code in a transaction with the given <a href="../../query/TxnType.html" title="enum class in org.apache.jena.query"><code>transaction type</code></a>. See <a href="../../system/Txn.html#exec(T,org.apache.jena.query.TxnType,java.lang.Runnable)"><code>Txn.exec(T, org.apache.jena.query.TxnType, java.lang.Runnable)</code></a>.</div>
</section>
</li>
<li>
<section class="detail" id="calc(org.apache.jena.query.TxnType,java.util.function.Supplier)">
<h3>calc</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="type-parameters">&lt;T&gt;</span>&nbsp;<span class="return-type">T</span>&nbsp;<span class="element-name">calc</span><wbr><span class="parameters">(<a href="../../query/TxnType.html" title="enum class in org.apache.jena.query">TxnType</a>&nbsp;txnType,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Supplier.html" title="class or interface in java.util.function" class="external-link">Supplier</a>&lt;T&gt;&nbsp;action)</span></div>
<div class="block">Execute and return a value in a transaction with the given <a href="../../query/TxnType.html" title="enum class in org.apache.jena.query"><code>transaction type</code></a>. See <a href="../../system/Txn.html#calc(T,org.apache.jena.query.TxnType,java.util.function.Supplier)"><code>Txn.calc(T, org.apache.jena.query.TxnType, java.util.function.Supplier&lt;X&gt;)</code></a>.</div>
</section>
</li>
<li>
<section class="detail" id="execute(java.lang.Runnable)">
<h3>execute</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">execute</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Runnable.html" title="class or interface in java.lang" class="external-link">Runnable</a>&nbsp;r)</span></div>
<div class="block">Execute in a "read" transaction that can promote to "write".
<p>
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 <code>txn</code> is unchanged.
<p>
If the application knows updates will be needed, consider using <a href="#executeWrite(java.lang.Runnable)"><code>executeWrite(java.lang.Runnable)</code></a>
which starts in "write" mode.
<p>
The application code can call <a href="#promote()"><code>promote()</code></a> to attempt to
change from "read" to "write"; the <a href="#promote()"><code>promote</code></a> method
returns a boolean indicating whether the promotion was possible or not.</div>
</section>
</li>
<li>
<section class="detail" id="calculate(java.util.function.Supplier)">
<h3>calculate</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="type-parameters">&lt;X&gt;</span>&nbsp;<span class="return-type">X</span>&nbsp;<span class="element-name">calculate</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Supplier.html" title="class or interface in java.util.function" class="external-link">Supplier</a>&lt;X&gt;&nbsp;r)</span></div>
<div class="block">Execute in a "read" transaction that can promote to "write" and return some calculated value.
<p>
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 <code>txn</code> is unchanged.
<p>
If the application knows updates will be needed, consider using <a href="#executeWrite(java.lang.Runnable)"><code>executeWrite(java.lang.Runnable)</code></a>
which starts in "write" mode.
<p>
The application code can call <a href="#promote()"><code>promote()</code></a> to attempt to
change from "read" to "write"; the <a href="#promote()"><code>promote</code></a> method
returns a boolean indicating whether the promotion was possible or not.</div>
</section>
</li>
<li>
<section class="detail" id="executeRead(java.lang.Runnable)">
<h3>executeRead</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="type-parameters">&lt;T extends <a href="Transactional.html" title="interface in org.apache.jena.sparql.core">Transactional</a>&gt;</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">executeRead</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Runnable.html" title="class or interface in java.lang" class="external-link">Runnable</a>&nbsp;r)</span></div>
<div class="block">Execute in a read transaction</div>
</section>
</li>
<li>
<section class="detail" id="calculateRead(java.util.function.Supplier)">
<h3>calculateRead</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="type-parameters">&lt;X&gt;</span>&nbsp;<span class="return-type">X</span>&nbsp;<span class="element-name">calculateRead</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Supplier.html" title="class or interface in java.util.function" class="external-link">Supplier</a>&lt;X&gt;&nbsp;r)</span></div>
<div class="block">Execute and return a value in a read transaction</div>
</section>
</li>
<li>
<section class="detail" id="executeWrite(java.lang.Runnable)">
<h3>executeWrite</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">executeWrite</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Runnable.html" title="class or interface in java.lang" class="external-link">Runnable</a>&nbsp;r)</span></div>
<div class="block">Execute the Runnable in a write transaction</div>
</section>
</li>
<li>
<section class="detail" id="calculateWrite(java.util.function.Supplier)">
<h3>calculateWrite</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="type-parameters">&lt;X&gt;</span>&nbsp;<span class="return-type">X</span>&nbsp;<span class="element-name">calculateWrite</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Supplier.html" title="class or interface in java.util.function" class="external-link">Supplier</a>&lt;X&gt;&nbsp;r)</span></div>
<div class="block">Execute and return a value in a write transaction.</div>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Licensed under the Apache License, Version 2.0</small></p>
</footer>
</div>
</div>
</body>
</html>