blob: fb48ff098c27969e9a53e9a41469783e088ebe85 [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>
<!-- Generated by javadoc (1.8.0_291) on Mon Jan 10 11:05:25 MSK 2022 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>CacheStoreSessionListener (Ignite 2.12.0)</title>
<meta name="date" content="2022-01-10">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<link rel='shortcut icon' href='https://ignite.apache.org/favicon.ico'/>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="CacheStoreSessionListener (Ignite 2.12.0)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<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/CacheStoreSessionListener.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><a href="../../../../../org/apache/ignite/cache/store/CacheStoreSession.html" title="interface in org.apache.ignite.cache.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li>Next&nbsp;Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/ignite/cache/store/CacheStoreSessionListener.html" target="_top">Frames</a></li>
<li><a href="CacheStoreSessionListener.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;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">org.apache.ignite.cache.store</div>
<h2 title="Interface CacheStoreSessionListener" class="title">Interface CacheStoreSessionListener</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../org/apache/ignite/cache/store/jdbc/CacheJdbcStoreSessionListener.html" title="class in org.apache.ignite.cache.store.jdbc">CacheJdbcStoreSessionListener</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">CacheStoreSessionListener</span></pre>
<div class="block">Cache store session listener that allows to implement callbacks
for session lifecycle.
<p>
The most common use case for session listeners is database
connection and transaction management. Store can be invoked one
or several times during one session, depending on whether it's
executed within cache transaction or not. In any case, you have
to create a connection when session is started and commit it or
rollback when session is finished.
<p>
Cache store session listener allows to implement this and other
scenarios providing two callback methods:
<ul>
<li>
<a href="../../../../../org/apache/ignite/cache/store/CacheStoreSessionListener.html#onSessionStart-org.apache.ignite.cache.store.CacheStoreSession-"><code>onSessionStart(CacheStoreSession)</code></a> - called
when a session is created prior to all operations
within his session.
</li>
<li>
<a href="../../../../../org/apache/ignite/cache/store/CacheStoreSessionListener.html#onSessionEnd-org.apache.ignite.cache.store.CacheStoreSession-boolean-"><code>onSessionEnd(CacheStoreSession, boolean)</code></a> - called
after all operations within a session are invoked.
</li>
</ul>
<h2>Implementations</h2>
Ignite provides several out-of-the-box implementations
of session listener (refer to individual JavaDocs for more
details):
<ul>
<li>
<a href="../../../../../org/apache/ignite/cache/store/jdbc/CacheJdbcStoreSessionListener.html" title="class in org.apache.ignite.cache.store.jdbc"><code>CacheJdbcStoreSessionListener</code></a> - JDBC-based session
listener. For each session it gets a new JDBC connection from
provided <a href="https://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql"><code>DataSource</code></a> and commits (or rolls back) it
when session ends.
</li>
<li>
<a href="../../../../../org/apache/ignite/cache/store/spring/CacheSpringStoreSessionListener.html"><code>CacheSpringStoreSessionListener</code></a> -
session listener based on Spring transaction management.
It starts a new DB transaction for each session and commits
(or rolls back) it when session ends. If there is no ongoing
cache transaction, this listener is no-op.
</li>
<li>
<a href="../../../../../org/apache/ignite/cache/store/hibernate/CacheHibernateStoreSessionListener.html"><code>CacheHibernateStoreSessionListener</code></a> -
Hibernate-based session listener. It creates a new Hibernate
session for each Ignite session. If there is an ongoing cache
transaction, a corresponding Hibernate transaction is created
as well.
</li>
</ul>
<h2>Configuration</h2>
There are two ways to configure a session listener:
<ul>
<li>
Provide a global listener for all caches via
<a href="../../../../../org/apache/ignite/configuration/IgniteConfiguration.html#setCacheStoreSessionListenerFactories-javax.cache.configuration.Factory...-"><code>IgniteConfiguration.setCacheStoreSessionListenerFactories(Factory[])</code></a>
configuration property. This will we called for any store
session, not depending on what caches participate in
transaction.
</li>
<li>
Provide a listener for a particular cache via
<a href="../../../../../org/apache/ignite/configuration/CacheConfiguration.html#setCacheStoreSessionListenerFactories-javax.cache.configuration.Factory...-"><code>CacheConfiguration.setCacheStoreSessionListenerFactories(Factory[])</code></a>
configuration property. This will be called only if the
cache participates in transaction.
</li>
</ul>
For example, here is how global <a href="../../../../../org/apache/ignite/cache/store/jdbc/CacheJdbcStoreSessionListener.html" title="class in org.apache.ignite.cache.store.jdbc"><code>CacheJdbcStoreSessionListener</code></a>
can be configured in Spring XML configuration file:
<pre name="code" class="xml">
&lt;bean class="org.apache.ignite.configuration.IgniteConfiguration"&gt;
...
&lt;property name="CacheStoreSessionListenerFactories"&gt;
&lt;list&gt;
&lt;bean class="javax.cache.configuration.FactoryBuilder$SingletonFactory"&gt;
&lt;constructor-arg&gt;
&lt;bean class="org.apache.ignite.cache.store.jdbc.CacheJdbcStoreSessionListener"&gt;
&lt;!-- Inject external data source. --&gt;
&lt;property name="dataSource" ref="jdbc-data-source"/&gt;
&lt;/bean&gt;
&lt;/constructor-arg&gt;
&lt;/bean&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;/bean&gt;
</pre></div>
</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="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/ignite/cache/store/CacheStoreSessionListener.html#onSessionEnd-org.apache.ignite.cache.store.CacheStoreSession-boolean-">onSessionEnd</a></span>(<a href="../../../../../org/apache/ignite/cache/store/CacheStoreSession.html" title="interface in org.apache.ignite.cache.store">CacheStoreSession</a>&nbsp;ses,
boolean&nbsp;commit)</code>
<div class="block">On session end callback.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/ignite/cache/store/CacheStoreSessionListener.html#onSessionStart-org.apache.ignite.cache.store.CacheStoreSession-">onSessionStart</a></span>(<a href="../../../../../org/apache/ignite/cache/store/CacheStoreSession.html" title="interface in org.apache.ignite.cache.store">CacheStoreSession</a>&nbsp;ses)</code>
<div class="block">On session start callback.</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="onSessionStart-org.apache.ignite.cache.store.CacheStoreSession-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onSessionStart</h4>
<pre>void&nbsp;onSessionStart(<a href="../../../../../org/apache/ignite/cache/store/CacheStoreSession.html" title="interface in org.apache.ignite.cache.store">CacheStoreSession</a>&nbsp;ses)</pre>
<div class="block">On session start callback.
<p>
Called before any store operation within a session is invoked.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ses</code> - Current session.</dd>
</dl>
</li>
</ul>
<a name="onSessionEnd-org.apache.ignite.cache.store.CacheStoreSession-boolean-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>onSessionEnd</h4>
<pre>void&nbsp;onSessionEnd(<a href="../../../../../org/apache/ignite/cache/store/CacheStoreSession.html" title="interface in org.apache.ignite.cache.store">CacheStoreSession</a>&nbsp;ses,
boolean&nbsp;commit)</pre>
<div class="block">On session end callback.
<p>
Called after all operations within a session are invoked.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ses</code> - Current session.</dd>
<dd><code>commit</code> - <code>True</code> if persistence store transaction
should commit, <code>false</code> for rollback.</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>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<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/CacheStoreSessionListener.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><a href="../../../../../org/apache/ignite/cache/store/CacheStoreSession.html" title="interface in org.apache.ignite.cache.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li>Next&nbsp;Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/ignite/cache/store/CacheStoreSessionListener.html" target="_top">Frames</a></li>
<li><a href="CacheStoreSessionListener.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;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><table width="100%" border="0" cellspacing=0 cellpadding=0 style="padding: 5px"> <tr> <td> <table style="padding-left: 0; margin: 0"> <tbody style="padding: 0; margin: 0"> <tr style="padding: 0; margin: 0"> <td> <a target=_blank href="https://ignite.apache.org"><nobr>2022 Copyright &#169; Apache Software Foundation</nobr></a> </td> </tr> </tbody> </table> </td> <td width="100%" align="right" valign="center"> <a href="https://twitter.com/ApacheIgnite" class="twitter-follow-button" data-show-count="false" data-size="large">Follow @ApacheIgnite</a> </td> </tr> <tr> <td colspan="2" valign="top" align="left"> <table style="padding-left: 0; margin: 0"> <tbody style="padding: 0; margin: 0"> <tr style="padding: 0; margin: 0"> <td> <b>Ignite Database and Caching Platform</b> </td> <td>:&nbsp;&nbsp; ver. <strong>2.12.0</strong> </td> </tr> <tr style="padding: 0; margin: 0"> <td> <b>Release Date</b> </td> <td>:&nbsp;&nbsp; January 10 2022 </td> </tr> </tbody> </table> </td> </tr> </table></small></p>
</body>
</html>