blob: 3e71fa0a57fbe8cd7ed9a238156d1d23da617ece [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>
<META NAME="ROBOTS" CONTENT="NOINDEX">
<link rel="canonical" href="https://ignite.apache.org/releases/1.0.0-rc3/javadoc/org/apache/ignite/spi/checkpoint/CheckpointSpi.html" />
<!-- Generated by javadoc (version 1.7.0_21) on Tue Mar 24 10:27:32 MSK 2015 -->
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>CheckpointSpi (Ignite 1.0.0-RC3)</title>
<meta name="date" content="2015-03-24">
<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
<link rel='shortcut icon' href='http://gridgain.com/wp-content/uploads/2014/09/favicon.ico'/>
<link type='text/css' rel='stylesheet' href='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shCore.css'/>
<link type='text/css' rel='stylesheet' href='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shThemeDefault.css'/>
<script type='text/javascript' src='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js'></script>
<script type='text/javascript' src='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shLegacy.js'></script>
<script type='text/javascript' src='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJava.js'></script>
<script type='text/javascript' src='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPlain.js'></script>
<script type='text/javascript' src='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJScript.js'></script>
<script type='text/javascript' src='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushBash.js'></script>
<script type='text/javascript' src='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushXml.js'></script>
<script type='text/javascript' src='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushScala.js'></script>
<script type='text/javascript' src='http://gridgain.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushGroovy.js'></script>
<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="CheckpointSpi (Ignite 1.0.0-RC3)";
}
//-->
</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/CheckpointSpi.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 class="aboutLanguage"><em>Apache Ignite - In-Memory Data Fabric</em></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/ignite/spi/checkpoint/CheckpointListener.html" title="interface in org.apache.ignite.spi.checkpoint"><span class="strong">Prev Class</span></a></li>
<li>Next Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/ignite/spi/checkpoint/CheckpointSpi.html" target="_top">Frames</a></li>
<li><a href="CheckpointSpi.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">org.apache.ignite.spi.checkpoint</div>
<h2 title="Interface CheckpointSpi" class="title">Interface CheckpointSpi</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><a href="../../../../../org/apache/ignite/spi/IgniteSpi.html" title="interface in org.apache.ignite.spi">IgniteSpi</a></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpi.html" title="class in org.apache.ignite.spi.checkpoint.cache">CacheCheckpointSpi</a>, <a href="../../../../../org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpi.html" title="class in org.apache.ignite.spi.checkpoint.jdbc">JdbcCheckpointSpi</a>, <a href="../../../../../org/apache/ignite/spi/checkpoint/noop/NoopCheckpointSpi.html" title="class in org.apache.ignite.spi.checkpoint.noop">NoopCheckpointSpi</a>, <a href="../../../../../org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpi.html" title="class in org.apache.ignite.spi.checkpoint.s3">S3CheckpointSpi</a>, <a href="../../../../../org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.html" title="class in org.apache.ignite.spi.checkpoint.sharedfs">SharedFsCheckpointSpi</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="strong">CheckpointSpi</span>
extends <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html" title="interface in org.apache.ignite.spi">IgniteSpi</a></pre>
<div class="block">Checkpoint SPI provides an ability to save an intermediate job state. It can
be useful when long running jobs need to store some intermediate state to
protect from system or application failures. Grid job can save intermediate
state in certain points of the execution (e.g., periodically) and upon start
check if previously saved state exists. This allows job to restart from the last
save checkpoint in case of preemption or other types of failover.
<p>
Note, that since a job can execute on different nodes, checkpoints need to
be accessible by all nodes.
<p>
To manipulate checkpoints from grid job the following public methods are available
on task session (that can be injected into grid job):
<ul>
<li><a href="../../../../../org/apache/ignite/compute/ComputeTaskSession.html#loadCheckpoint(java.lang.String)"><code>ComputeTaskSession.loadCheckpoint(String)</code></a></li>
<li><a href="../../../../../org/apache/ignite/compute/ComputeTaskSession.html#removeCheckpoint(java.lang.String)"><code>ComputeTaskSession.removeCheckpoint(String)</code></a></li>
<li><a href="../../../../../org/apache/ignite/compute/ComputeTaskSession.html#saveCheckpoint(java.lang.String, java.lang.Object)"><code>ComputeTaskSession.saveCheckpoint(String, Object)</code></a></li>
<li><a href="../../../../../org/apache/ignite/compute/ComputeTaskSession.html#saveCheckpoint(java.lang.String, java.lang.Object, org.apache.ignite.compute.ComputeTaskSessionScope, long)"><code>ComputeTaskSession.saveCheckpoint(String, Object, org.apache.ignite.compute.ComputeTaskSessionScope, long)</code></a></li>
<li><a href="../../../../../org/apache/ignite/compute/ComputeTaskSession.html#saveCheckpoint(java.lang.String, java.lang.Object, org.apache.ignite.compute.ComputeTaskSessionScope, long, boolean)"><code>ComputeTaskSession.saveCheckpoint(String, Object, org.apache.ignite.compute.ComputeTaskSessionScope, long, boolean)</code></a></li>
</ul>
<p>
Ignite provides the following <code>GridCheckpointSpi</code> implementations:
<ul>
<li><a href="../../../../../org/apache/ignite/spi/checkpoint/noop/NoopCheckpointSpi.html" title="class in org.apache.ignite.spi.checkpoint.noop"><code>NoopCheckpointSpi</code></a> - default</li>
<li><a href="../../../../../org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.html" title="class in org.apache.ignite.spi.checkpoint.sharedfs"><code>SharedFsCheckpointSpi</code></a></li>
<li><a href="../../../../../org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpi.html"><code>S3CheckpointSpi</code></a></li>
<li><a href="../../../../../org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpi.html" title="class in org.apache.ignite.spi.checkpoint.jdbc"><code>JdbcCheckpointSpi</code></a></li>
<li><a href="../../../../../org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpi.html" title="class in org.apache.ignite.spi.checkpoint.cache"><code>CacheCheckpointSpi</code></a></li>
</ul>
<b>NOTE:</b> this SPI (i.e. methods in this interface) should never be used directly. SPIs provide
internal view on the subsystem and is used internally by Ignite kernal. In rare use cases when
access to a specific implementation of this SPI is required - an instance of this SPI can be obtained
via <a href="../../../../../org/apache/ignite/Ignite.html#configuration()"><code>Ignite.configuration()</code></a> method to check its configuration properties or call other non-SPI
methods. Note again that calling methods from this interface on the obtained instance can lead
to undefined behavior and explicitly not supported.</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="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>byte[]</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/ignite/spi/checkpoint/CheckpointSpi.html#loadCheckpoint(java.lang.String)">loadCheckpoint</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
<div class="block">Loads checkpoint from storage by its unique key.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/ignite/spi/checkpoint/CheckpointSpi.html#removeCheckpoint(java.lang.String)">removeCheckpoint</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
<div class="block">This method instructs the checkpoint provider to clean saved data for a
given <code>key</code>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/ignite/spi/checkpoint/CheckpointSpi.html#saveCheckpoint(java.lang.String, byte[], long, boolean)">saveCheckpoint</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
byte[]&nbsp;state,
long&nbsp;timeout,
boolean&nbsp;overwrite)</code>
<div class="block">Saves checkpoint to the storage.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/ignite/spi/checkpoint/CheckpointSpi.html#setCheckpointListener(org.apache.ignite.spi.checkpoint.CheckpointListener)">setCheckpointListener</a></strong>(<a href="../../../../../org/apache/ignite/spi/checkpoint/CheckpointListener.html" title="interface in org.apache.ignite.spi.checkpoint">CheckpointListener</a>&nbsp;lsnr)</code>
<div class="block">Sets the checkpoint listener.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_org.apache.ignite.spi.IgniteSpi">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.ignite.spi.<a href="../../../../../org/apache/ignite/spi/IgniteSpi.html" title="interface in org.apache.ignite.spi">IgniteSpi</a></h3>
<code><a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#getName()">getName</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#getNodeAttributes()">getNodeAttributes</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#onContextDestroyed()">onContextDestroyed</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#onContextInitialized(org.apache.ignite.spi.IgniteSpiContext)">onContextInitialized</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#spiStart(java.lang.String)">spiStart</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#spiStop()">spiStop</a></code></li>
</ul>
</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="loadCheckpoint(java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>loadCheckpoint</h4>
<pre>@Nullable
byte[]&nbsp;loadCheckpoint(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)
throws <a href="../../../../../org/apache/ignite/spi/IgniteSpiException.html" title="class in org.apache.ignite.spi">IgniteSpiException</a></pre>
<div class="block">Loads checkpoint from storage by its unique key.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>key</code> - Checkpoint key.</dd>
<dt><span class="strong">Returns:</span></dt><dd>Loaded data or <code>null</code> if there is no data for a given
key.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/ignite/spi/IgniteSpiException.html" title="class in org.apache.ignite.spi">IgniteSpiException</a></code> - Thrown in case of any error while loading
checkpoint data. Note that in case when given <code>key</code> is not
found this method will return <code>null</code>.</dd></dl>
</li>
</ul>
<a name="saveCheckpoint(java.lang.String, byte[], long, boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>saveCheckpoint</h4>
<pre>boolean&nbsp;saveCheckpoint(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
byte[]&nbsp;state,
long&nbsp;timeout,
boolean&nbsp;overwrite)
throws <a href="../../../../../org/apache/ignite/spi/IgniteSpiException.html" title="class in org.apache.ignite.spi">IgniteSpiException</a></pre>
<div class="block">Saves checkpoint to the storage.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>key</code> - Checkpoint unique key.</dd><dd><code>state</code> - Saved data.</dd><dd><code>timeout</code> - Every intermediate data stored by checkpoint provider
should have a timeout. Timeout allows for effective resource
management by checkpoint provider by cleaning saved data that are not
needed anymore. Generally, the user should choose the minimum
possible timeout to avoid long-term resource acquisition by checkpoint
provider. Value <code>0</code> means that timeout will never expire.</dd><dd><code>overwrite</code> - Whether or not overwrite checkpoint if it already exists.</dd>
<dt><span class="strong">Returns:</span></dt><dd><code>true</code> if checkpoint has been actually saved, <code>false</code> otherwise.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/ignite/spi/IgniteSpiException.html" title="class in org.apache.ignite.spi">IgniteSpiException</a></code> - Thrown in case of any error while saving
checkpoint data.</dd></dl>
</li>
</ul>
<a name="removeCheckpoint(java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeCheckpoint</h4>
<pre>boolean&nbsp;removeCheckpoint(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</pre>
<div class="block">This method instructs the checkpoint provider to clean saved data for a
given <code>key</code>.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>key</code> - Key for the checkpoint to remove.</dd>
<dt><span class="strong">Returns:</span></dt><dd><code>true</code> if data has been actually removed, <code>false</code>
otherwise.</dd></dl>
</li>
</ul>
<a name="setCheckpointListener(org.apache.ignite.spi.checkpoint.CheckpointListener)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>setCheckpointListener</h4>
<pre>void&nbsp;setCheckpointListener(<a href="../../../../../org/apache/ignite/spi/checkpoint/CheckpointListener.html" title="interface in org.apache.ignite.spi.checkpoint">CheckpointListener</a>&nbsp;lsnr)</pre>
<div class="block">Sets the checkpoint listener.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>lsnr</code> - The listener to set or <code>null</code>.</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/CheckpointSpi.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 class="aboutLanguage"><em>Apache Ignite - In-Memory Data Fabric</em></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/ignite/spi/checkpoint/CheckpointListener.html" title="interface in org.apache.ignite.spi.checkpoint"><span class="strong">Prev Class</span></a></li>
<li>Next Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/ignite/spi/checkpoint/CheckpointSpi.html" target="_top">Frames</a></li>
<li><a href="CheckpointSpi.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><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://incubator.apache.org/projects/ignite.html"><nobr>2015 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> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script> </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>Apache Ignite Fabric</b> </td> <td>:&nbsp;&nbsp; ver. <strong>1.0.0-RC3</strong> </td> </tr> <tr style="padding: 0; margin: 0"> <td> <b>Release Date</b> </td> <td>:&nbsp;&nbsp; March 24 2015 </td> </tr> </tbody> </table> </td> </tr> </table></small></p>
<!--FOOTER--><script type='text/javascript'>SyntaxHighlighter.all();dp.SyntaxHighlighter.HighlightAll('code');</script>
</body>
</html>