blob: 1b77e02f3c036d94ea4f53bff330f2cd139e6252 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<link rel="canonical" href="https://ignite.apache.org/jcache/1.0.0/javadoc/javax/cache/processor/EntryProcessor.html" />
<!-- Generated by javadoc (version 1.7.0_25) on Fri Mar 28 13:34:25 EST 2014 -->
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>EntryProcessor (JSR107 API and SPI 1.0.0 API)</title>
<meta name="date" content="2014-03-28">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-61232409-1', 'auto');
ga('send', 'pageview');
</script></head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="EntryProcessor (JSR107 API and SPI 1.0.0 API)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/EntryProcessor.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">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Class</li>
<li><a href="../../../javax/cache/processor/EntryProcessorException.html" title="class in javax.cache.processor"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?javax/cache/processor/EntryProcessor.html" target="_top">Frames</a></li>
<li><a href="EntryProcessor.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">javax.cache.processor</div>
<h2 title="Interface EntryProcessor" class="title">Interface EntryProcessor&lt;K,V,T&gt;</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl><dt><span class="strong">Type Parameters:</span></dt><dd><code>K</code> - the type of keys maintained by this cache</dd><dd><code>V</code> - the type of cached values</dd><dd><code>T</code> - the type of the return value</dd></dl>
<hr>
<br>
<pre>public interface <span class="strong">EntryProcessor&lt;K,V,T&gt;</span></pre>
<div class="block">An invocable function that allows applications to perform compound operations
on a <a href="../../../javax/cache/Cache.Entry.html" title="interface in javax.cache"><code>Cache.Entry</code></a> atomically, according the defined
consistency of a <a href="../../../javax/cache/Cache.html" title="interface in javax.cache"><code>Cache</code></a>.
<p>
Any <a href="../../../javax/cache/Cache.Entry.html" title="interface in javax.cache"><code>Cache.Entry</code></a> mutations will not take effect until after
the <a href="../../../javax/cache/processor/EntryProcessor.html#process(javax.cache.processor.MutableEntry, java.lang.Object...)"><code>process(MutableEntry, Object...)</code></a> method has completed
execution.
<p>
If an exception is thrown by an <a href="../../../javax/cache/processor/EntryProcessor.html" title="interface in javax.cache.processor"><code>EntryProcessor</code></a>, a Caching Implementation
must wrap any <a href="http://download.oracle.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><code>Exception</code></a> thrown wrapped in an <a href="../../../javax/cache/processor/EntryProcessorException.html" title="class in javax.cache.processor"><code>EntryProcessorException</code></a>. If this occurs no mutations will be made to the
<a href="../../../javax/cache/Cache.Entry.html" title="interface in javax.cache"><code>Cache.Entry</code></a>.
<p>
Implementations may execute <a href="../../../javax/cache/processor/EntryProcessor.html" title="interface in javax.cache.processor"><code>EntryProcessor</code></a>s in situ, thus avoiding
locking, round-trips and expensive network transfers.
<h3>Effect of <a href="../../../javax/cache/processor/MutableEntry.html" title="interface in javax.cache.processor"><code>MutableEntry</code></a> operations</h3>
<a href="../../../javax/cache/Cache.Entry.html" title="interface in javax.cache"><code>Cache.Entry</code></a> access, via a call to
<a href="../../../javax/cache/Cache.Entry.html#getValue()"><code>Cache.Entry.getValue()</code></a>, will behave as if
<a href="../../../javax/cache/Cache.html#get(K)"><code>Cache.get(Object)</code></a> was called for the key. This includes updating
necessary statistics, consulting the configured <a href="../../../javax/cache/expiry/ExpiryPolicy.html" title="interface in javax.cache.expiry"><code>ExpiryPolicy</code></a> and loading
from a configured <a href="../../../javax/cache/integration/CacheLoader.html" title="interface in javax.cache.integration"><code>CacheLoader</code></a>.
<p>
<a href="../../../javax/cache/Cache.Entry.html" title="interface in javax.cache"><code>Cache.Entry</code></a> mutation, via a call to
<a href="../../../javax/cache/processor/MutableEntry.html#setValue(V)"><code>MutableEntry.setValue(Object)</code></a>, will behave as if <a href="../../../javax/cache/Cache.html#put(K, V)"><code>Cache.put(Object, Object)</code></a> was called for the key. This includes updating
necessary statistics, consulting the configured <a href="../../../javax/cache/expiry/ExpiryPolicy.html" title="interface in javax.cache.expiry"><code>ExpiryPolicy</code></a>, notifying <a href="../../../javax/cache/event/CacheEntryListener.html" title="interface in javax.cache.event"><code>CacheEntryListener</code></a>s and writing to a
configured <a href="../../../javax/cache/integration/CacheWriter.html" title="interface in javax.cache.integration"><code>CacheWriter</code></a>.
<p>
<a href="../../../javax/cache/Cache.Entry.html" title="interface in javax.cache"><code>Cache.Entry</code></a> removal, via a call to
<a href="../../../javax/cache/processor/MutableEntry.html#remove()"><code>MutableEntry.remove()</code></a>, will behave as if <a href="../../../javax/cache/Cache.html#remove(K)"><code>Cache.remove(Object)</code></a>
was called for the key. This includes updating necessary statistics, notifying
<a href="../../../javax/cache/event/CacheEntryListener.html" title="interface in javax.cache.event"><code>CacheEntryListener</code></a>s and causing a delete on a configured
<a href="../../../javax/cache/integration/CacheWriter.html" title="interface in javax.cache.integration"><code>CacheWriter</code></a>.
<p>
As implementations may choose to execute <a href="../../../javax/cache/processor/EntryProcessor.html" title="interface in javax.cache.processor"><code>EntryProcessor</code></a>s remotely,
<a href="../../../javax/cache/processor/EntryProcessor.html" title="interface in javax.cache.processor"><code>EntryProcessor</code></a>s, together with specified parameters and return
values, may be required to implement <a href="http://download.oracle.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io"><code>Serializable</code></a>.
<h3>Effect of multiple <a href="../../../javax/cache/processor/MutableEntry.html" title="interface in javax.cache.processor"><code>MutableEntry</code></a> operations performed by one <a href="../../../javax/cache/processor/EntryProcessor.html" title="interface in javax.cache.processor"><code>EntryProcessor</code></a></h3>
Only the net effect of multiple operations has visibility outside of the Entry
Processor. The entry is locked by the entry processor for the entire scope
of the entry processor, so intermediate effects are not visible.
<h4>Example 1</h4>
In this example, an <a href="../../../javax/cache/processor/EntryProcessor.html" title="interface in javax.cache.processor"><code>EntryProcessor</code></a> calls:
<ol>
<li><a href="../../../javax/cache/Cache.Entry.html#getValue()"><code>Cache.Entry.getValue()</code></a></li>
<li><a href="../../../javax/cache/processor/MutableEntry.html#setValue(V)"><code>MutableEntry.setValue(Object)</code></a></li>
<li><a href="../../../javax/cache/Cache.Entry.html#getValue()"><code>Cache.Entry.getValue()</code></a></li>
<li><a href="../../../javax/cache/processor/MutableEntry.html#setValue(V)"><code>MutableEntry.setValue(Object)</code></a></li>
</ol>
This will have the following <a href="../../../javax/cache/Cache.html" title="interface in javax.cache"><code>Cache</code></a> effects:
<br>
Final value of the cache: last setValue<br>
Statistics: one get and one put as the second get and the first put are
internal to the EntryProcessor.<br>
Listeners: second put will cause either a put or an update depending on whether
there was an initial value for the entry.<br>
CacheLoader: Invoked by the first get only if a loader was registered.<br>
CacheWriter: Invoked by the second put only as the first put was internal to
the Entry Processor.<br>
ExpiryPolicy: The first get and the second put only are visible to the
ExpiryPolicy.<br>
<h4>Example 2</h4>
In this example, an <a href="../../../javax/cache/processor/EntryProcessor.html" title="interface in javax.cache.processor"><code>EntryProcessor</code></a> calls:
<ol>
<li><a href="../../../javax/cache/Cache.Entry.html#getValue()"><code>Cache.Entry.getValue()</code></a></li>
<li><a href="../../../javax/cache/processor/MutableEntry.html#remove()"><code>MutableEntry.remove()</code></a>}</li>
<li><a href="../../../javax/cache/Cache.Entry.html#getValue()"><code>Cache.Entry.getValue()</code></a></li>
<li><a href="../../../javax/cache/processor/MutableEntry.html#setValue(V)"><code>MutableEntry.setValue(Object)</code></a></li>
</ol>
This will have the following <a href="../../../javax/cache/Cache.html" title="interface in javax.cache"><code>Cache</code></a> effects:
<br>
Final value of the cache: last setValue<br>
Statistics: one get and one put as the second get and the first put are
internal to the EntryProcessor.<br>
Listeners: second put will cause either a put or an update depending on whether
there was an initial value for the entry.<br>
CacheLoader: Invoked by the first get only if a loader was registered.<br>
CacheWriter: Invoked by the second put only as the first put was internal to
the Entry Processor.<br>
ExpiryPolicy: The first get and the second put only are visible to the
ExpiryPolicy.<br>
<h4>Example 3</h4>
In this example, an <a href="../../../javax/cache/processor/EntryProcessor.html" title="interface in javax.cache.processor"><code>EntryProcessor</code></a> calls:
<ol>
<li><a href="../../../javax/cache/Cache.Entry.html#getValue()"><code>Cache.Entry.getValue()</code></a></li>
<li><a href="../../../javax/cache/processor/MutableEntry.html#setValue(V)"><code>MutableEntry.setValue(Object)</code></a>}</li>
<li><a href="../../../javax/cache/Cache.Entry.html#getValue()"><code>Cache.Entry.getValue()</code></a></li>
<li><a href="../../../javax/cache/processor/MutableEntry.html#setValue(V)"><code>MutableEntry.setValue(Object)</code></a></li>
<li><a href="../../../javax/cache/processor/MutableEntry.html#remove()"><code>MutableEntry.remove()</code></a></li>
</ol>
This will have the following <a href="../../../javax/cache/Cache.html" title="interface in javax.cache"><code>Cache</code></a> effects:
<br>
Final value of the cache: last setValue<br>
Statistics: one get and one remove as the second get and the two puts are
internal to the EntryProcessor.<br>
Listeners: remove if there was initial value in the cache, otherwise no
listener invoked.
<br> CacheLoader: Invoked by the first get only if a loader was
registered.
<br> CacheWriter: Invoked by the remove only as the two puts are internal to
the Entry Processor.<br>
ExpiryPolicy: The first get only is visible to the ExpiryPolicy. There is no
remove event in ExpiryPolicy.</div>
<dl><dt><span class="strong">Since:</span></dt>
<dd>1.0</dd>
<dt><span class="strong">Author:</span></dt>
<dd>Greg Luck</dd></dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../javax/cache/processor/EntryProcessor.html" title="type parameter in EntryProcessor">T</a></code></td>
<td class="colLast"><code><strong><a href="../../../javax/cache/processor/EntryProcessor.html#process(javax.cache.processor.MutableEntry, java.lang.Object...)">process</a></strong>(<a href="../../../javax/cache/processor/MutableEntry.html" title="interface in javax.cache.processor">MutableEntry</a>&lt;<a href="../../../javax/cache/processor/EntryProcessor.html" title="type parameter in EntryProcessor">K</a>,<a href="../../../javax/cache/processor/EntryProcessor.html" title="type parameter in EntryProcessor">V</a>&gt;&nbsp;entry,
<a href="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;arguments)</code>
<div class="block">Process an entry.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="process(javax.cache.processor.MutableEntry, java.lang.Object...)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>process</h4>
<pre><a href="../../../javax/cache/processor/EntryProcessor.html" title="type parameter in EntryProcessor">T</a>&nbsp;process(<a href="../../../javax/cache/processor/MutableEntry.html" title="interface in javax.cache.processor">MutableEntry</a>&lt;<a href="../../../javax/cache/processor/EntryProcessor.html" title="type parameter in EntryProcessor">K</a>,<a href="../../../javax/cache/processor/EntryProcessor.html" title="type parameter in EntryProcessor">V</a>&gt;&nbsp;entry,
<a href="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;arguments)
throws <a href="../../../javax/cache/processor/EntryProcessorException.html" title="class in javax.cache.processor">EntryProcessorException</a></pre>
<div class="block">Process an entry.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>entry</code> - the entry</dd><dd><code>arguments</code> - a number of arguments to the process.</dd>
<dt><span class="strong">Returns:</span></dt><dd>the user-defined result of the processing, if any.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../javax/cache/processor/EntryProcessorException.html" title="class in javax.cache.processor">EntryProcessorException</a></code> - if there is a failure in entry processing.</dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!-- -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/EntryProcessor.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">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Class</li>
<li><a href="../../../javax/cache/processor/EntryProcessorException.html" title="class in javax.cache.processor"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?javax/cache/processor/EntryProcessor.html" target="_top">Frames</a></li>
<li><a href="EntryProcessor.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2014. All Rights Reserved.</small></p>
</body>
</html>