<!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.5.0-b1/javadoc/org/apache/ignite/compute/gridify/Gridify.html" />
<!-- Generated by javadoc (version 1.7.0_21) on Tue Dec 01 23:28:51 MSK 2015 -->
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>Gridify (Ignite 1.5.0-b1)</title>
<meta name="date" content="2015-12-01">
<link rel="stylesheet" type="text/css" href="../../../../../javadoc.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="Gridify (Ignite 1.5.0-b1)";
    }
//-->
</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/Gridify.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>Ignite - In-Memory Data Fabric</em></div>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Class</li>
<li><a href="../../../../../org/apache/ignite/compute/gridify/GridifyArgument.html" title="interface in org.apache.ignite.compute.gridify"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/ignite/compute/gridify/Gridify.html" target="_top">Frames</a></li>
<li><a href="Gridify.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>Required&nbsp;|&nbsp;</li>
<li><a href="#annotation_type_optional_element_summary">Optional</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&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 Gridify" class="title">Annotation Type Gridify</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Retention.html?is-external=true#value()" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Target.html?is-external=true#value()" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/7/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="strong">Gridify</span></pre>
<div class="block"><code>Gridify</code> annotation is the main way to grid-enable existing code.
 <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>
 By default, when neither <a href="../../../../../org/apache/ignite/compute/gridify/Gridify.html#taskClass()"><code>taskClass()</code></a> or <a href="../../../../../org/apache/ignite/compute/gridify/Gridify.html#taskName()"><code>taskName()</code></a> are specified
 a method with <code>@Gridify</code> annotation will be executed on randomly picked remote node.
 <p>
 Note that when using <code>@Gridify</code> annotation with default task (without
 specifying explicit grid task), the state of the whole instance will be
 serialized and sent out to remote node. Therefore the class must implement
 <a href="http://docs.oracle.com/javase/7/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>
 Refer to <a href="../../../../../org/apache/ignite/compute/ComputeTask.html" title="interface in org.apache.ignite.compute"><code>ComputeTask</code></a> documentation for more information on how a task
 can be split into multiple sub-jobs.
 <p>
 <h1 class="header">Java Example</h1>
 Here is a simple example how to grid-enable a Java method. The method <code>sayIt</code>
 with <code>@Gridify</code> annotation will be executed on remote node.
 <pre name="code" class="java">
 ...
 &#64;Gridify
 public static void sayIt(String arg) {
    // Simply print out the argument.
    System.out.println(arg);
 }
 ...
 </pre>
 Here is an example of how to grid-enable a Java method with custom task. The custom task
 logic will provide a way to split and aggregate the result. The method <code>sayIt</code> will
 be executed on remote node.
 <pre name="code" class="java">
 public class GridifyHelloWorldTaskExample {
     ...
     &#64;Gridify(taskClass = GridifyHelloWorldTask.class, timeout = 3000)
     public static integer sayIt(String arg) {
         // Simply print out the argument.
         System.out.println(">>> Printing '" + arg + "' on this node from grid-enabled method.");

         return arg.length();
     }
     ...
 }
 </pre>
 The custom task will actually take the String passed into <code>sayIt(String)</code> method,
 split it into words and execute every word on different remote node.
 <pre name="code" class="java">
 public class GridifyHelloWorldTask extends GridifyTaskSplitAdapter&lt;Integer&gt; {
    &#64;Override public Integer apply(String e) {
        return F.outJobs(F.yield(((String)arg.getMethodParameters()[0]).split(" "), new C1&lt;String, Integer&gt;() {
            &#64;Override public Integer apply(String e) {
                // Note that no recursive cross-cutting will happen here.
                return GridifyHelloWorldTaskExample.sayIt(e);
            }
        }));
    }

    public Integer reduce(List&lt;GridComputeJobResult&gt; results) throws IgniteCheckedException {
        return results.size() - 1 + F.sum(F.&lt;Integer&gt;jobResults(results));
    }
 }
 </pre>
 <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.
 <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="overviewSummary" 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="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/ignite/compute/gridify/Gridify.html#gridName()">gridName</a></strong></code>
<div class="block">Name of the grid to use.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/ignite/compute/gridify/GridifyInterceptor.html" title="interface in org.apache.ignite.compute.gridify">GridifyInterceptor</a>&gt;</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/ignite/compute/gridify/Gridify.html#interceptor()">interceptor</a></strong></code>
<div class="block">Optional interceptor class.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/ignite/compute/ComputeTask.html" title="interface in org.apache.ignite.compute">ComputeTask</a>&lt;<a href="../../../../../org/apache/ignite/compute/gridify/GridifyArgument.html" title="interface in org.apache.ignite.compute.gridify">GridifyArgument</a>,?&gt;&gt;</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/ignite/compute/gridify/Gridify.html#taskClass()">taskClass</a></strong></code>
<div class="block">Optional gridify task class.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><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></code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/ignite/compute/gridify/Gridify.html#taskName()">taskName</a></strong></code>
<div class="block">Optional gridify task name.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/ignite/compute/gridify/Gridify.html#timeout()">timeout</a></strong></code>
<div class="block">Optional gridify task execution timeout.</div>
</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="taskName()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>taskName</h4>
<pre>public abstract&nbsp;<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;taskName</pre>
<div class="block">Optional gridify task name. Note that either this name or <a href="../../../../../org/apache/ignite/compute/gridify/Gridify.html#taskClass()"><code>taskClass()</code></a> must
 be specified - but not both. If neither one is specified tasks' fully qualified name
 will be used as a default name.</div>
<dl>
<dt>Default:</dt>
<dd>""</dd>
</dl>
</li>
</ul>
<a name="taskClass()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>taskClass</h4>
<pre>public abstract&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/ignite/compute/ComputeTask.html" title="interface in org.apache.ignite.compute">ComputeTask</a>&lt;<a href="../../../../../org/apache/ignite/compute/gridify/GridifyArgument.html" title="interface in org.apache.ignite.compute.gridify">GridifyArgument</a>,?&gt;&gt;&nbsp;taskClass</pre>
<div class="block">Optional gridify task class. Note that either this name or <a href="../../../../../org/apache/ignite/compute/gridify/Gridify.html#taskName()"><code>taskName()</code></a> must
 be specified - but not both. If neither one is specified tasks' fully qualified name
 will be used as a default name.</div>
<dl>
<dt>Default:</dt>
<dd>org.apache.ignite.compute.gridify.aop.GridifyDefaultTask.class</dd>
</dl>
</li>
</ul>
<a name="timeout()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>timeout</h4>
<pre>public abstract&nbsp;long&nbsp;timeout</pre>
<div class="block">Optional gridify task execution timeout. Default is <code>0</code>
 which indicates that task will not timeout.</div>
<dl>
<dt>Default:</dt>
<dd>0L</dd>
</dl>
</li>
</ul>
<a name="interceptor()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>interceptor</h4>
<pre>public abstract&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/ignite/compute/gridify/GridifyInterceptor.html" title="interface in org.apache.ignite.compute.gridify">GridifyInterceptor</a>&gt;&nbsp;interceptor</pre>
<div class="block">Optional interceptor class. Since <code>null</code> are not supported the value of
 <code>GridifyInterceptor.class</code> acts as a default value.</div>
<dl>
<dt>Default:</dt>
<dd>org.apache.ignite.compute.gridify.GridifyInterceptor.class</dd>
</dl>
</li>
</ul>
<a name="gridName()">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>gridName</h4>
<pre>public abstract&nbsp;<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;gridName</pre>
<div class="block">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.</div>
<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><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/Gridify.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>Ignite - In-Memory Data Fabric</em></div>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Class</li>
<li><a href="../../../../../org/apache/ignite/compute/gridify/GridifyArgument.html" title="interface in org.apache.ignite.compute.gridify"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/ignite/compute/gridify/Gridify.html" target="_top">Frames</a></li>
<li><a href="Gridify.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>Required&nbsp;|&nbsp;</li>
<li><a href="#annotation_type_optional_element_summary">Optional</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&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://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>Ignite Fabric</b>                                                         </td>                                                         <td>:&nbsp;&nbsp;                                                             ver. <strong>1.5.0-b1</strong>                                                         </td>                                                     </tr>                                                     <tr style="padding: 0; margin: 0">                                                         <td>                                                             <b>Release Date</b>                                                         </td>                                                         <td>:&nbsp;&nbsp;                                                             December 1 2015                                                         </td>                                                     </tr>                                                 </tbody>                                             </table>                                         </td>                                     </tr>                                     </table></small></p>
</body>
</html>
