blob: a02d7cc1a2ad90a46358fe0afafbba6e1c6e95a9 [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>GridifySetToSet (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="GridifySetToSet (Ignite 2.12.0)";
}
}
catch(err) {
}
//-->
</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/GridifySetToSet.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/compute/gridify/GridifyRuntimeException.html" title="class in org.apache.ignite.compute.gridify"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToValue.html" title="annotation in org.apache.ignite.compute.gridify"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/ignite/compute/gridify/GridifySetToSet.html" target="_top">Frames</a></li>
<li><a href="GridifySetToSet.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>Field&nbsp;|&nbsp;</li>
<li>Required&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.element.detail">Element</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.compute.gridify</div>
<h2 title="Annotation Type GridifySetToSet" class="title">Annotation Type GridifySetToSet</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>)
public @interface <span class="memberNameLabel">GridifySetToSet</span></pre>
<div class="block"><code>GridifySetToSet</code> annotation allows to grid-enable existing code with specific semantics.
<p>
This annotation can be applied to any public method that needs to be grid-enabled,
static or non-static. When this annotation is applied to a method, the method
execution is considered to be grid-enabled. In general, the execution of this
method can be transferred to another node in the grid, potentially splitting it
into multiple subtasks to be executed in parallel on multiple grid nodes. But
from the caller perspective this method still looks and behaves like a local apply.
This is achieved by utilizing AOP-based interception of the annotated code and
injecting all the necessary grid logic into the method execution.
<p>
<code>GridifySetToSet</code> used as extended version of <code>Gridify</code> annotation.
It provides automated gridification of two popular types of mathematical
functions that allow for "embarrassingly" simple parallelization (for example,
find prime numbers in collection or find maximum in collection). The goal of this
annotation is to provide very simple and easy to use ForkJoin gridification
for some often used use cases. Note that in a standard <code>Gridify</code> annotation
the user has to write <a href="../../../../../org/apache/ignite/compute/ComputeTask.html" title="interface in org.apache.ignite.compute"><code>ComputeTask</code></a> to provide ForkJoin behavior.
In a proposed design - the ForkJoin will be achieved <b>automatically</b>.
<p>
Let <b>F</b> be the function or a method in Java language and <b>St</b> be a set of values
of type <code>t</code> or a typed Collection<span class='angle_bracket'>&lt;</span>T<span class='angle_bracket'>&gt;</span> in Java. Let also <code>R</code> be
the result value. These are the types of functions that will be supported (defined in
terms of their properties):
<p>
<code>F (S 1, S 2, ..., S k) =<span class='angle_bracket'>&gt;</span> {R 1, R 2, ..., R n,}, where F (S 1, S 2, ..., S k) == {F (S 1), F (S 2), ..., F (S k)}</code>
which defines a function whose result can be constructed as concatenation of results
of the same function applied to subsets of the original set.
<p>
In definition above we used Collection<span class='angle_bracket'>&lt;</span>T<span class='angle_bracket'>&gt;</span> for the purpose of example.
The following Java types and their subtypes will have to be supported as return values or method parameters:
<ul>
<li>java.util.Collection</li>
<li>java.util.Iterator</li>
<li>java.util.Enumeration</li>
<li>java.lang.CharSequence</li>
<li>java array</li>
</ul>
<p>
Note that when using <code>@GridifySetToSet</code> annotation the state of the whole instance will be
serialized and sent out to remote node. Therefore the class must implement
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io"><code>Serializable</code></a> interface. If you cannot make the class <code>Serializable</code>,
then you must implement custom grid task which will take care of proper state
initialization. In either case, Ignite must be able to serialize the state passed to remote node.
<p>
<h1 class="header">Java Example</h1>
<p>
Example for these types of functions would be any function that is looking for a subset of data
in a given input collection. For example:
<pre name="code" class="java">
...
&#64;GridifySetToSet(threshold = 2)
public static Collection&lt;Number&gt; findAllPrimeNumbers(Collection&lt;Number&gt; input) {...}
...
</pre>
This function searches all elements in the input collection and returns another collection
containing only prime numbers found in the original collection. We can split this collection into
two sub-collection, find primes in each - and then simply concatenate two collections to get
the final set of all primes.
<p>
The formal definition of (or requirement for) such method:
<ul>
<li>Have return value of type <b>Collection<span class='angle_bracket'>&lt;</span>T<span class='angle_bracket'>&gt;</span></b></li>
<li>Have one and only one parameter of type <b>Collection<span class='angle_bracket'>&lt;</span>T<span class='angle_bracket'>&gt;</span></b></li>
<li>Order of <b>Collection<span class='angle_bracket'>&lt;</span>T<span class='angle_bracket'>&gt;</span></b> parameter is irrelevant</li>
<li>Method can have as many other parameters as needed of any type except for <b>Collection<span class='angle_bracket'>&lt;</span>T<span class='angle_bracket'>&gt;</span></b></li>
<li>Logic of the method must allow for concatenation of results from the same method apply
on a subset of the original collection</li>
</ul>
<p>
<h1 class="header">Jboss AOP</h1>
The following configuration needs to be applied to enable JBoss byte code
weaving. Note that Ignite is not shipped with JBoss and necessary
libraries will have to be downloaded separately (they come standard
if you have JBoss installed already):
<ul>
<li>
The following JVM configuration must be present:
<ul>
<li><code>-javaagent:[path to jboss-aop-jdk50-4.x.x.jar]</code></li>
<li><code>-Djboss.aop.class.path=[path to ignite.jar]</code></li>
<li><code>-Djboss.aop.exclude=org,com -Djboss.aop.include=org.apache.ignite.examples</code></li>
</ul>
</li>
<li>
The following JARs should be in a classpath:
<ul>
<li><code>javassist-3.x.x.jar</code></li>
<li><code>jboss-aop-jdk50-4.x.x.jar</code></li>
<li><code>jboss-aspect-library-jdk50-4.x.x.jar</code></li>
<li><code>jboss-common-4.x.x.jar</code></li>
<li><code>trove-1.0.2.jar</code></li>
</ul>
</li>
</ul>
<p>
<h1 class="header">AspectJ AOP</h1>
The following configuration needs to be applied to enable AspectJ byte code
weaving.
<ul>
<li>
JVM configuration should include:
<code>-javaagent:${IGNITE_HOME}/libs/aspectjweaver-1.7.2.jar</code>
</li>
<li>
META-INF/aop.xml file should be created and specified on the classpath.
The file should contain Gridify aspects and needed weaver options.
</li>
</ul>
<p>
<h1 class="header">Spring AOP</h1>
Spring AOP framework is based on dynamic proxy implementation and doesn't require
any specific runtime parameters for online weaving. All weaving is on-demand and should
be performed by calling method
<a href="../../../../../org/apache/ignite/compute/gridify/aop/spring/GridifySpringEnhancer.html#enhance(java.lang.Object)"><code>GridifySpringEnhancer.enhance(java.lang.Object)</code></a> for the object
that has method with <a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html" title="annotation in org.apache.ignite.compute.gridify"><code>GridifySetToSet</code></a> annotation.
<p>
Note that this method of weaving is rather inconvenient and AspectJ or JBoss AOP is
recommended over it. Spring AOP can be used in situation when code augmentation is
undesired and cannot be used. It also allows for very fine grained control of what gets
weaved.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="annotation.type.optional.element.summary">
<!-- -->
</a>
<h3>Optional Element Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
<caption><span>Optional Elements</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Optional Element and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#gridName--">gridName</a></span></code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
<div class="block"><span class="deprecationComment">Use <a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#igniteInstanceName--"><code>igniteInstanceName()</code></a>. Nonempty <a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#igniteInstanceName--"><code>igniteInstanceName()</code></a> takes precedence.</span></div>
</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#igniteInstanceName--">igniteInstanceName</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><span class='angle_bracket'>&lt;</span>? extends <a href="../../../../../org/apache/ignite/compute/gridify/GridifyInterceptor.html" title="interface in org.apache.ignite.compute.gridify">GridifyInterceptor</a><span class='angle_bracket'>&gt;</span></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#interceptor--">interceptor</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><span class='angle_bracket'>&lt;</span>? extends <a href="../../../../../org/apache/ignite/compute/gridify/GridifyNodeFilter.html" title="interface in org.apache.ignite.compute.gridify">GridifyNodeFilter</a><span class='angle_bracket'>&gt;</span></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#nodeFilter--">nodeFilter</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#splitSize--">splitSize</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#threshold--">threshold</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#timeout--">timeout</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="annotation.type.element.detail">
<!-- -->
</a>
<h3>Element Detail</h3>
<a name="nodeFilter--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nodeFilter</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><span class='angle_bracket'>&lt;</span>? extends <a href="../../../../../org/apache/ignite/compute/gridify/GridifyNodeFilter.html" title="interface in org.apache.ignite.compute.gridify">GridifyNodeFilter</a><span class='angle_bracket'>&gt;</span>&nbsp;nodeFilter</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Optional node filter to filter nodes participated in job split.</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>org.apache.ignite.compute.gridify.GridifyNodeFilter.class</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="timeout--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>timeout</h4>
<pre>public abstract&nbsp;long&nbsp;timeout</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Optional gridify task execution timeout. Default is <code>0</code>
which indicates that task will not timeout.</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>0L</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="threshold--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>threshold</h4>
<pre>public abstract&nbsp;int&nbsp;threshold</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Optional parameter that defines the minimal value below which the
execution will NOT be grid-enabled.</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>0</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="splitSize--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>splitSize</h4>
<pre>public abstract&nbsp;int&nbsp;splitSize</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Optional parameter that defines a split size. Split size in other words means how big will
be the sub-collection
that will travel to remote nodes. Note that this is NOT a dynamic setting and you have to set
the split size up front. This may look
as a deficiency but Ignite will properly handle this case by giving more than one sub-collection
to a specific node (as defined by load balancing SPI in use).
<p>
This value should be greater than zero and can be less, equal or greater than <a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#threshold--"><code>threshold()</code></a>
value. In most cases, however, the optimal value for the split size is the <a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#threshold--"><code>threshold()</code></a> value.
For example, if input collection size is 100, number of nodes 10 and split size is set to 5 - Ignition
will submit 2 sub-collections of 5 elements each to each node (provided in order by load
balancing SPI).
<p>
By default (when split size is zero) - Ignite will automatically determine the split size based on
number of nodes and collection size - if collection size is available (not an iterator). If collection
size cannot be determined - the split size will default to threshold. If threshold is not set - a runtime
exception will be thrown.</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>0</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="interceptor--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>interceptor</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><span class='angle_bracket'>&lt;</span>? extends <a href="../../../../../org/apache/ignite/compute/gridify/GridifyInterceptor.html" title="interface in org.apache.ignite.compute.gridify">GridifyInterceptor</a><span class='angle_bracket'>&gt;</span>&nbsp;interceptor</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Optional interceptor class.</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>org.apache.ignite.compute.gridify.GridifyInterceptor.class</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="gridName--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>gridName</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;gridName</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use <a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#igniteInstanceName--"><code>igniteInstanceName()</code></a>. Nonempty <a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToSet.html#igniteInstanceName--"><code>igniteInstanceName()</code></a> takes precedence.</span></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Name of the grid to use. By default, no-name default grid is used.
Refer to <a href="../../../../../org/apache/ignite/Ignition.html" title="class in org.apache.ignite"><code>Ignition</code></a> for information about named grids.</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>""</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="igniteInstanceName--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>igniteInstanceName</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;igniteInstanceName</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Name of the Ignite instance to use. By default, no-name default Ignite instance is used.
Refer to <a href="../../../../../org/apache/ignite/Ignition.html" title="class in org.apache.ignite"><code>Ignition</code></a> for information about named Ignite instances.</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>""</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/GridifySetToSet.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/compute/gridify/GridifyRuntimeException.html" title="class in org.apache.ignite.compute.gridify"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/ignite/compute/gridify/GridifySetToValue.html" title="annotation in org.apache.ignite.compute.gridify"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/ignite/compute/gridify/GridifySetToSet.html" target="_top">Frames</a></li>
<li><a href="GridifySetToSet.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>Field&nbsp;|&nbsp;</li>
<li>Required&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.element.detail">Element</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>