| <!DOCTYPE HTML> |
| <html lang="en-US"> |
| <head> |
| <meta http-equiv="CACHE-CONTROL" content="NO-CACHE"> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title>Code Usage</title> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| <meta name="generator" content="Jekyll v4.1.1"> |
| <link rel="stylesheet" href="/css/font-awesome.min.css"> |
| <link rel="stylesheet" href="/css/screen.css"> |
| <link rel="icon" type="image/x-icon" href="/favicon.ico"> |
| <script src="/js/jquery-3.2.1.min.js"></script> |
| <!--[if lt IE 9]> |
| <script src="/js/html5shiv.min.js"></script> |
| <script src="/js/respond.min.js"></script> |
| <![endif]--> |
| <script src="/js/screen.js"></script> |
| <script type="text/javascript" src="/assets/javascripts/bundle.js" charset="utf-8"></script> |
| </head> |
| |
| |
| <body> |
| <header role="banner"> |
| <nav class="mobile-nav show-on-mobiles"> |
| <ul> |
| <li class=""> |
| <a href="/">Home</a> |
| </li> |
| <li class="current"> |
| <a href="/docs/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a> |
| </li> |
| </li> |
| <li class=""> |
| <a href="/downloads/">Downloads</a> |
| </li> |
| <li class=""> |
| <a href="/talks/">Talks</a> |
| </li> |
| <li class=""> |
| <a href="/news/">News</a> |
| </li> |
| <li class=""> |
| <a href="/develop/">Develop</a> |
| </li> |
| <li class=""> |
| <a href="/help/">Help</a> |
| </li> |
| </ul> |
| |
| </nav> |
| <div class="grid"> |
| <div class="unit one-third center-on-mobiles"> |
| <h1> |
| <a href="/"> |
| <span class="sr-only">Apache Mnemonic</span> |
| <img src="/img/mnemonic_logo_v2.png" width="289" alt="Mnemonic Logo" class="logo"> |
| </a> |
| <a href="https://www.apache.org/events/current-event.html"> |
| <img src="https://www.apache.org/events/current-event-234x60.png"/> |
| </a> |
| </h1> |
| </div> |
| <nav class="main-nav unit two-thirds hide-on-mobiles"> |
| <ul> |
| <li class=""> |
| <a href="/">Home</a> |
| </li> |
| <li class="current"> |
| <a href="/docs/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a> |
| </li> |
| </li> |
| <li class=""> |
| <a href="/downloads/">Downloads</a> |
| </li> |
| <li class=""> |
| <a href="/talks/">Talks</a> |
| </li> |
| <li class=""> |
| <a href="/news/">News</a> |
| </li> |
| <li class=""> |
| <a href="/develop/">Develop</a> |
| </li> |
| <li class=""> |
| <a href="/help/">Help</a> |
| </li> |
| </ul> |
| |
| </nav> |
| </div> |
| <!-- Return to Top --> |
| <a href="#top" id="return-to-top"><i class="fa fa-chevron-up"></i></a> |
| </header> |
| |
| |
| <section class="docs"> |
| <div class="grid"> |
| |
| <div class="docs-nav-mobile unit whole show-on-mobiles"> |
| <select onchange="if (this.value) window.location.href=this.value"> |
| <option value="">Navigate the docs…</option> |
| |
| <optgroup label="Overview"> |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/arch.html">Architecture</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/features.html">Features</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/modes.html">Mnemonic Modes</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/memsrvcmp.html">Durable Memory Service Comparison</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/integration.html">Integration with other projects</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/domusecases.html">DOM Use Cases</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/dcmusecases.html">DCM Use Cases</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/msusecases.html">MS Use Cases</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/sparkusecases.html">Apache Spark Integration Use Cases</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/hadoopusecases.html">Apache Hadoop Integration Use Cases</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/gcdata.html">Java GC data</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/security.html">Security</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| </optgroup> |
| |
| <optgroup label="Usage"> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/getstarted.html">Get Started</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/devsetup.html">Development Setup</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/submitchanges.html">Submit Changes</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/build.html">Project Build</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/runtest.html">Run tests</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/docker.html">Docker usage</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| </optgroup> |
| |
| </select> |
| </div> |
| |
| |
| <div class="unit four-fifths"> |
| <article> |
| <h1>Code Usage</h1> |
| |
| <h3 id="how-to-use-it-">How to use it ?</h3> |
| |
| <h4 id="define-a-non-volatile-class">Define a Non-Volatile class:</h4> |
| |
| <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/** |
| * a durable class should be abstract, implement Durable interface and marked with @DurableEntity annotation |
| */</span> |
| <span class="nd">@DurableEntity</span> |
| <span class="kd">public</span> <span class="kd">abstract</span> <span class="kd">class</span> <span class="nc">Person</span><span class="o"><</span><span class="no">E</span><span class="o">></span> <span class="kd">implements</span> <span class="nc">Durable</span><span class="o">,</span> <span class="nc">Comparable</span><span class="o"><</span><span class="nc">Person</span><span class="o"><</span><span class="no">E</span><span class="o">>></span> <span class="o">{</span> |
| <span class="no">E</span> <span class="n">element</span><span class="o">;</span> <span class="c1">// Generic Type</span> |
| |
| <span class="cm">/** |
| * callback for this durable object creation |
| */</span> |
| <span class="nd">@Override</span> |
| <span class="kd">public</span> <span class="kt">void</span> <span class="nf">initializeAfterCreate</span><span class="o">()</span> <span class="o">{</span> |
| <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Initializing After Created"</span><span class="o">);</span> |
| <span class="o">}</span> |
| |
| <span class="cm">/** |
| * callback for this durable object recovery |
| */</span> |
| <span class="nd">@Override</span> |
| <span class="kd">public</span> <span class="kt">void</span> <span class="nf">initializeAfterRestore</span><span class="o">()</span> <span class="o">{</span> |
| <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Initializing After Restored"</span><span class="o">);</span> |
| <span class="o">}</span> |
| |
| <span class="cm">/** |
| * setup generic info manually to avoid performance penalty |
| */</span> |
| <span class="nd">@Override</span> |
| <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setupGenericInfo</span><span class="o">(</span><span class="nc">EntityFactoryProxy</span><span class="o">[]</span> <span class="n">efproxies</span><span class="o">,</span> <span class="nc">GenericField</span><span class="o">.</span><span class="na">GType</span><span class="o">[]</span> <span class="n">gftypes</span><span class="o">)</span> <span class="o">{</span> |
| |
| <span class="o">}</span> |
| |
| <span class="nd">@Test</span> |
| <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testOutput</span><span class="o">()</span> <span class="kd">throws</span> <span class="nc">RetrieveDurableEntityError</span> <span class="o">{</span> |
| <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">printf</span><span class="o">(</span><span class="s">"Person %s, Age: %d ( %s ) \n"</span><span class="o">,</span> <span class="n">getName</span><span class="o">(),</span> <span class="n">getAge</span><span class="o">(),</span> |
| <span class="kc">null</span> <span class="o">==</span> <span class="n">getMother</span><span class="o">()?</span> <span class="s">"No Recorded Mother"</span> <span class="o">:</span> <span class="s">"Has Recorded Mother"</span><span class="o">);</span> |
| <span class="o">}</span> |
| |
| <span class="kd">public</span> <span class="kt">int</span> <span class="nf">compareTo</span><span class="o">(</span><span class="nc">Person</span><span class="o"><</span><span class="no">E</span><span class="o">></span> <span class="n">anotherPerson</span><span class="o">)</span> <span class="o">{</span> |
| <span class="kt">int</span> <span class="n">ret</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> |
| <span class="k">if</span> <span class="o">(</span><span class="mi">0</span> <span class="o">==</span> <span class="n">ret</span><span class="o">)</span> <span class="n">ret</span> <span class="o">=</span> <span class="n">getAge</span><span class="o">().</span><span class="na">compareTo</span><span class="o">(</span><span class="n">anotherPerson</span><span class="o">.</span><span class="na">getAge</span><span class="o">());</span> |
| <span class="k">if</span> <span class="o">(</span><span class="mi">0</span> <span class="o">==</span> <span class="n">ret</span><span class="o">)</span> <span class="n">ret</span> <span class="o">=</span> <span class="n">getName</span><span class="o">().</span><span class="na">compareTo</span><span class="o">(</span><span class="n">anotherPerson</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span> |
| <span class="k">return</span> <span class="n">ret</span><span class="o">;</span> |
| <span class="o">}</span> |
| |
| <span class="cm">/** |
| * Getters and Setters for non-volatile fields marked with @DurableGetter and @DurableSetter |
| */</span> |
| <span class="nd">@DurableGetter</span><span class="o">(</span><span class="nc">Id</span> <span class="o">=</span> <span class="mi">1L</span><span class="o">)</span> |
| <span class="kd">abstract</span> <span class="kd">public</span> <span class="nc">Short</span> <span class="nf">getAge</span><span class="o">();</span> |
| <span class="nd">@DurableSetter</span> |
| <span class="kd">abstract</span> <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setAge</span><span class="o">(</span><span class="nc">Short</span> <span class="n">age</span><span class="o">);</span> |
| |
| <span class="nd">@DurableGetter</span><span class="o">(</span><span class="nc">Id</span> <span class="o">=</span> <span class="mi">2L</span><span class="o">)</span> |
| <span class="kd">abstract</span> <span class="kd">public</span> <span class="nc">String</span> <span class="nf">getName</span><span class="o">()</span> <span class="kd">throws</span> <span class="nc">RetrieveDurableEntityError</span><span class="o">;</span> |
| <span class="nd">@DurableSetter</span> |
| <span class="kd">abstract</span> <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setName</span><span class="o">(</span><span class="nc">String</span> <span class="n">name</span><span class="o">,</span> <span class="kt">boolean</span> <span class="n">destroy</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">OutOfPersistentMemory</span><span class="o">,</span> <span class="nc">RetrieveDurableEntityError</span><span class="o">;</span> |
| |
| <span class="nd">@DurableGetter</span><span class="o">(</span><span class="nc">Id</span> <span class="o">=</span> <span class="mi">3L</span><span class="o">)</span> |
| <span class="kd">abstract</span> <span class="kd">public</span> <span class="nc">Person</span><span class="o"><</span><span class="no">E</span><span class="o">></span> <span class="nf">getMother</span><span class="o">()</span> <span class="kd">throws</span> <span class="nc">RetrieveDurableEntityError</span><span class="o">;</span> |
| <span class="nd">@DurableSetter</span> |
| <span class="kd">abstract</span> <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setMother</span><span class="o">(</span><span class="nc">Person</span><span class="o"><</span><span class="no">E</span><span class="o">></span> <span class="n">mother</span><span class="o">,</span> <span class="kt">boolean</span> <span class="n">destroy</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">RetrieveDurableEntityError</span><span class="o">;</span> |
| |
| <span class="nd">@DurableGetter</span><span class="o">(</span><span class="nc">Id</span> <span class="o">=</span> <span class="mi">4L</span><span class="o">)</span> |
| <span class="kd">abstract</span> <span class="kd">public</span> <span class="nc">Person</span><span class="o"><</span><span class="no">E</span><span class="o">></span> <span class="nf">getFather</span><span class="o">()</span> <span class="kd">throws</span> <span class="nc">RetrieveDurableEntityError</span><span class="o">;</span> |
| <span class="nd">@DurableSetter</span> |
| <span class="kd">abstract</span> <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setFather</span><span class="o">(</span><span class="nc">Person</span><span class="o"><</span><span class="no">E</span><span class="o">></span> <span class="n">mother</span><span class="o">,</span> <span class="kt">boolean</span> <span class="n">destroy</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">RetrieveDurableEntityError</span><span class="o">;</span> |
| <span class="o">}</span> |
| |
| </code></pre></div></div> |
| |
| <h4 id="use-a-non-volatile-class">Use a non-volatile class:</h4> |
| |
| <h5 id="setup-an-allocator-for-non-volatile-object-graphs">Setup an allocator for non-volatile object graphs.</h5> |
| |
| <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="c1">// create an allocator instance</span> |
| <span class="nc">NonVolatileMemAllocator</span> <span class="n">act</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">NonVolatileMemAllocator</span><span class="o">(</span><span class="mi">1024</span> <span class="o">*</span> <span class="mi">1024</span> <span class="o">*</span> <span class="mi">8</span><span class="o">,</span> <span class="s">"./pobj_person.dat"</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span> |
| |
| <span class="c1">// fetch handler store capacity from this non-volatile storage managed by this allocator</span> |
| <span class="no">KEYCAPACITY</span> <span class="o">=</span> <span class="n">act</span><span class="o">.</span><span class="na">handlerCapacity</span><span class="o">();</span> |
| <span class="o">....</span> |
| <span class="c1">// close it after use</span> |
| <span class="n">act</span><span class="o">.</span><span class="na">close</span><span class="o">();</span> |
| </code></pre></div></div> |
| |
| <h5 id="generate-structured-non-volatile-objects">Generate structured non-volatile objects.</h5> |
| <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="c1">// create a new non-volatile person object from this specific allocator</span> |
| <span class="n">person</span> <span class="o">=</span> <span class="nc">PersonFactory</span><span class="o">.</span><span class="na">create</span><span class="o">(</span><span class="n">act</span><span class="o">);</span> |
| |
| <span class="c1">// set attributes</span> |
| <span class="n">person</span><span class="o">.</span><span class="na">setAge</span><span class="o">((</span><span class="kt">short</span><span class="o">)</span><span class="n">rand</span><span class="o">.</span><span class="na">nextInt</span><span class="o">(</span><span class="mi">50</span><span class="o">));</span> |
| <span class="n">person</span><span class="o">.</span><span class="na">setName</span><span class="o">(</span><span class="nc">String</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="s">"Name: [%s]"</span><span class="o">,</span> <span class="no">UUID</span><span class="o">.</span><span class="na">randomUUID</span><span class="o">().</span><span class="na">toString</span><span class="o">()),</span> <span class="kc">true</span><span class="o">);</span> |
| |
| <span class="c1">// keep this person on non-volatile handler store</span> |
| <span class="n">act</span><span class="o">.</span><span class="na">setHandler</span><span class="o">(</span><span class="n">keyidx</span><span class="o">,</span> <span class="n">person</span><span class="o">.</span><span class="na">getHandler</span><span class="o">());</span> |
| |
| <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">deep</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">deep</span> <span class="o"><</span> <span class="n">rand</span><span class="o">.</span><span class="na">nextInt</span><span class="o">(</span><span class="mi">100</span><span class="o">);</span> <span class="o">++</span><span class="n">deep</span><span class="o">)</span> <span class="o">{</span> |
| |
| <span class="c1">// create another person as mother</span> |
| <span class="n">mother</span> <span class="o">=</span> <span class="nc">PersonFactory</span><span class="o">.</span><span class="na">create</span><span class="o">(</span><span class="n">act</span><span class="o">);</span> |
| <span class="n">mother</span><span class="o">.</span><span class="na">setAge</span><span class="o">((</span><span class="kt">short</span><span class="o">)(</span><span class="mi">50</span> <span class="o">+</span> <span class="n">rand</span><span class="o">.</span><span class="na">nextInt</span><span class="o">(</span><span class="mi">50</span><span class="o">)));</span> |
| <span class="n">mother</span><span class="o">.</span><span class="na">setName</span><span class="o">(</span><span class="nc">String</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="s">"Name: [%s]"</span><span class="o">,</span> <span class="no">UUID</span><span class="o">.</span><span class="na">randomUUID</span><span class="o">().</span><span class="na">toString</span><span class="o">()),</span> <span class="kc">true</span><span class="o">);</span> |
| |
| <span class="c1">// set the person's mother</span> |
| <span class="n">person</span><span class="o">.</span><span class="na">setMother</span><span class="o">(</span><span class="n">mother</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span> |
| |
| <span class="n">person</span> <span class="o">=</span> <span class="n">mother</span><span class="o">;</span> |
| <span class="o">}</span> |
| |
| </code></pre></div></div> |
| |
| <h5 id="use-the-non-volatile-objects">Use the non-volatile objects</h5> |
| |
| <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="k">for</span> <span class="o">(</span><span class="kt">long</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o"><</span> <span class="no">KEYCAPACITY</span><span class="o">;</span> <span class="o">++</span><span class="n">i</span><span class="o">)</span> <span class="o">{</span> |
| |
| <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">printf</span><span class="o">(</span><span class="s">"----------Key %d--------------\n"</span><span class="o">,</span> <span class="n">i</span><span class="o">);</span> |
| <span class="c1">// iterate non-volatile handlers from handler store of this specific allocator</span> |
| <span class="n">val</span> <span class="o">=</span> <span class="n">act</span><span class="o">.</span><span class="na">getHandler</span><span class="o">(</span><span class="n">i</span><span class="o">);</span> |
| <span class="k">if</span> <span class="o">(</span><span class="mi">0L</span> <span class="o">==</span> <span class="n">val</span><span class="o">)</span> <span class="o">{</span> |
| <span class="k">break</span><span class="o">;</span> |
| <span class="o">}</span> |
| |
| <span class="c1">// restore person objects from this specific allocator</span> |
| <span class="nc">Person</span><span class="o"><</span><span class="nc">Integer</span><span class="o">></span> <span class="n">person</span> <span class="o">=</span> <span class="nc">PersonFactory</span><span class="o">.</span><span class="na">restore</span><span class="o">(</span><span class="n">act</span><span class="o">,</span> <span class="n">val</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span> |
| |
| <span class="k">while</span> <span class="o">(</span><span class="kc">null</span> <span class="o">!=</span> <span class="n">person</span><span class="o">)</span> <span class="o">{</span> |
| <span class="n">person</span><span class="o">.</span><span class="na">testOutput</span><span class="o">();</span> |
| <span class="c1">// iterate all mother's ancestors</span> |
| <span class="n">person</span> <span class="o">=</span> <span class="n">person</span><span class="o">.</span><span class="na">getMother</span><span class="o">();</span> |
| <span class="o">}</span> |
| <span class="o">}</span> |
| |
| </code></pre></div></div> |
| |
| <h5 id="perform-the-durable-native-computing-eg-printing-wo-packingunpacking-massive-object-graphs">Perform the durable native computing (e.g. printing) w/o packing/unpacking massive object graphs</h5> |
| |
| <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="c1">// fetch print service</span> |
| <span class="nc">GeneralComputingService</span> <span class="n">gcsvr</span> <span class="o">=</span> <span class="nc">Utils</span><span class="o">.</span><span class="na">getGeneralComputingService</span><span class="o">(</span><span class="s">"print"</span><span class="o">);</span> |
| <span class="c1">// instantiate a value info for a value matrix</span> |
| <span class="nc">ValueInfo</span> <span class="n">vinfo</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ValueInfo</span><span class="o">();</span> |
| <span class="c1">// instantiate a object stack</span> |
| <span class="nc">List</span><span class="o"><</span><span class="kt">long</span><span class="o">[][]></span> <span class="n">objstack</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ArrayList</span><span class="o"><</span><span class="kt">long</span><span class="o">[][]>();</span> |
| <span class="c1">// fill up with all durable object info in order</span> |
| <span class="n">objstack</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">firstnv</span><span class="o">.</span><span class="na">getNativeFieldInfo</span><span class="o">());</span> |
| <span class="n">objstack</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">person</span><span class="o">.</span><span class="na">getNativeFieldInfo</span><span class="o">());</span> |
| <span class="c1">// configure the Id stack for each level of durable objects</span> |
| <span class="kt">long</span><span class="o">[][]</span> <span class="n">fidinfostack</span> <span class="o">=</span> <span class="o">{{</span><span class="mi">2L</span><span class="o">,</span> <span class="mi">1L</span><span class="o">},</span> <span class="o">{</span><span class="mi">0L</span><span class="o">,</span> <span class="mi">1L</span><span class="o">}};</span> |
| <span class="c1">// configure the handler of a value matrix</span> |
| <span class="n">vinfo</span><span class="o">.</span><span class="na">handler</span> <span class="o">=</span> <span class="n">handler</span><span class="o">;</span> |
| <span class="c1">// set translate table from handler's allocator</span> |
| <span class="n">vinfo</span><span class="o">.</span><span class="na">transtable</span> <span class="o">=</span> <span class="n">m_act</span><span class="o">.</span><span class="na">getTranslateTable</span><span class="o">();</span> |
| <span class="c1">// specify the durable type of value</span> |
| <span class="n">vinfo</span><span class="o">.</span><span class="na">dtype</span> <span class="o">=</span> <span class="nc">DurableType</span><span class="o">.</span><span class="na">SHORT</span><span class="o">;</span> |
| <span class="c1">// generate frames for this value matri from both stacks</span> |
| <span class="n">vinfo</span><span class="o">.</span><span class="na">frames</span> <span class="o">=</span> <span class="nc">Utils</span><span class="o">.</span><span class="na">genNativeParamForm</span><span class="o">(</span><span class="n">objstack</span><span class="o">,</span> <span class="n">fidinfostack</span><span class="o">);</span> |
| <span class="c1">// form an array of value infos</span> |
| <span class="nc">ValueInfo</span><span class="o">[]</span> <span class="n">vinfos</span> <span class="o">=</span> <span class="o">{</span><span class="n">vinfo</span><span class="o">};</span> |
| <span class="c1">// perform the print operation</span> |
| <span class="n">gcsvr</span><span class="o">.</span><span class="na">perform</span><span class="o">(</span><span class="n">vinfos</span><span class="o">);</span> |
| </code></pre></div></div> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| </article> |
| </div> |
| |
| <div class="unit one-fifth hide-on-mobiles"> |
| <aside> |
| |
| <h4>Overview</h4> |
| |
| |
| <ul> |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/arch.html">Architecture</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/features.html">Features</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/modes.html">Mnemonic Modes</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/memsrvcmp.html">Durable Memory Service Comparison</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/integration.html">Integration with other projects</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/domusecases.html">DOM Use Cases</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/dcmusecases.html">DCM Use Cases</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/msusecases.html">MS Use Cases</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/sparkusecases.html">Apache Spark Integration Use Cases</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/hadoopusecases.html">Apache Hadoop Integration Use Cases</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/gcdata.html">Java GC data</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/security.html">Security</a></li> |
| |
| |
| |
| </ul> |
| |
| |
| <h4>Usage</h4> |
| |
| |
| <ul> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/getstarted.html">Get Started</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/devsetup.html">Development Setup</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/submitchanges.html">Submit Changes</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/build.html">Project Build</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/runtest.html">Run tests</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/docker.html">Docker usage</a></li> |
| |
| |
| |
| </ul> |
| |
| |
| </aside> |
| </div> |
| |
| |
| <div class="clear"></div> |
| |
| </div> |
| </section> |
| |
| |
| <footer role="contentinfo"> |
| <p><div align="center">Apache Mnemonic, Mnemonic, Apache, and the Mnemonic logo are trademarks of The Apache Software Foundation.</div> |
| <div align="center"> Copyright © 2020 <a href="https://www.apache.org/">The Apache Software Foundation</a></div></p> |
| </footer> |
| |
| <script> |
| var anchorForId = function (id) { |
| var anchor = document.createElement("a"); |
| anchor.className = "header-link"; |
| anchor.href = "#" + id; |
| anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>"; |
| anchor.title = "Permalink"; |
| return anchor; |
| }; |
| |
| var linkifyAnchors = function (level, containingElement) { |
| var headers = containingElement.getElementsByTagName("h" + level); |
| for (var h = 0; h < headers.length; h++) { |
| var header = headers[h]; |
| |
| if (typeof header.id !== "undefined" && header.id !== "") { |
| header.appendChild(anchorForId(header.id)); |
| } |
| } |
| }; |
| |
| document.onreadystatechange = function () { |
| if (this.readyState === "complete") { |
| var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0]; |
| if (!contentBlock) { |
| return; |
| } |
| for (var level = 1; level <= 6; level++) { |
| linkifyAnchors(level, contentBlock); |
| } |
| } |
| }; |
| </script> |
| |
| |
| </body> |
| </html> |