strolch-website/docs/documentation/versioning/index.html

39 lines
13 KiB
HTML

<!doctype html><html lang=en class="js csstransforms3d"><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=generator content="Hugo 0.80.0"><meta name=description content="Strolch is a parameterized framework for use on servers and IoT"><meta name=author content="Strolch"><link rel=icon href=/favicon.ico type=image/ico><title>Versioning - Strolch</title><link href=/css/nucleus.css?1626091328 rel=stylesheet><link href=/css/fontawesome-all.min.css?1626091328 rel=stylesheet><link href=/css/hybrid.css?1626091328 rel=stylesheet><link href=/css/featherlight.min.css?1626091328 rel=stylesheet><link href=/css/perfect-scrollbar.min.css?1626091328 rel=stylesheet><link href=/css/auto-complete.css?1626091328 rel=stylesheet><link href=/css/atom-one-dark-reasonable.css?1626091328 rel=stylesheet><link href=/css/theme.css?1626091328 rel=stylesheet><link href=/css/hugo-theme.css?1626091328 rel=stylesheet><link href=/css/theme-green.css?1626091328 rel=stylesheet><script src=/js/jquery-3.3.1.min.js?1626091328></script><style>:root #header+#content>#left>#rlblock_left{display:none!important}</style></head><body data-url=/documentation/versioning/><nav id=sidebar><div id=header-wrapper><div id=header><a id=logo href=/><img src=/logo.png></a></div><div class=searchbox><label for=search-by><i class="fas fa-search"></i></label><input data-search-input id=search-by type=search placeholder=Search...>
<span data-search-clear><i class="fas fa-times"></i></span></div><script type=text/javascript src=/js/lunr.min.js?1626091328></script><script type=text/javascript src=/js/auto-complete.js?1626091328></script><script type=text/javascript>var baseurl="https:\/\/strolch.li\/";</script><script type=text/javascript src=/js/search.js?1626091328></script></div><section id=homelinks><ul><li><a class=padding href=/><i class="fas fa-home"></i>Home</a></li></ul></section><div class=highlightable><ul class=topics><li data-nav-id=/api/ title=API class=dd-item><a href=/api/>API</a></li><li data-nav-id=/history/ title=History class=dd-item><a href=/history/>History</a></li><li data-nav-id=/documentation/ title=Documentation class="dd-item
parent"><a href=/documentation/>Documentation</a><ul><li data-nav-id=/documentation/architecture/ title=Architecture class=dd-item><a href=/documentation/architecture/>Architecture</a></li><li data-nav-id=/documentation/model/ title=Model class=dd-item><a href=/documentation/model/>Model</a></li><li data-nav-id=/documentation/do-and-donts/ title="Do and Don't" class=dd-item><a href=/documentation/do-and-donts/>Do and Don't</a></li><li data-nav-id=/documentation/runtime-configuration/ title="Runtime Configuration" class=dd-item><a href=/documentation/runtime-configuration/>Runtime Configuration</a></li><li data-nav-id=/documentation/realms/ title=Realms class=dd-item><a href=/documentation/realms/>Realms</a></li><li data-nav-id=/documentation/components/ title=Components class=dd-item><a href=/documentation/components/>Components</a></li><li data-nav-id=/documentation/services-and-commands/ title="Services and Commands" class=dd-item><a href=/documentation/services-and-commands/>Services and Commands</a></li><li data-nav-id=/documentation/searches/ title=Searches class=dd-item><a href=/documentation/searches/>Searches</a></li><li data-nav-id=/documentation/queries/ title=Queries class=dd-item><a href=/documentation/queries/>Queries</a></li><li data-nav-id=/documentation/transactions/ title=Transactions class=dd-item><a href=/documentation/transactions/>Transactions</a></li><li data-nav-id=/documentation/policies/ title=Policies class=dd-item><a href=/documentation/policies/>Policies</a></li><li data-nav-id=/documentation/observers/ title=Observers class=dd-item><a href=/documentation/observers/>Observers</a></li><li data-nav-id=/documentation/versioning/ title=Versioning class="dd-item active"><a href=/documentation/versioning/>Versioning</a></li><li data-nav-id=/documentation/reports/ title=Reports class=dd-item><a href=/documentation/reports/>Reports</a></li><li data-nav-id=/documentation/priviles/ title=Privileges class=dd-item><a href=/documentation/priviles/>Privileges</a></li></ul></li><li data-nav-id=/plc/ title=PLC class=dd-item><a href=/plc/>PLC</a><ul><li data-nav-id=/plc/architecture/ title=Architecture class=dd-item><a href=/plc/architecture/>Architecture</a></li><li data-nav-id=/plc/example-set-up/ title="Example Set-Up" class=dd-item><a href=/plc/example-set-up/>Example Set-Up</a></li></ul></li><li data-nav-id=/tutorial/ title=Tutorial class=dd-item><a href=/tutorial/>Tutorial</a><ul><li data-nav-id=/tutorial/configuration/ title=Configuration class=dd-item><a href=/tutorial/configuration/>Configuration</a></li><li data-nav-id=/tutorial/model/ title=Model class=dd-item><a href=/tutorial/model/>Model</a></li><li data-nav-id=/tutorial/crud-book/ title="CRUD Book" class=dd-item><a href=/tutorial/crud-book/>CRUD Book</a></li></ul></li><li data-nav-id=/download/ title=Download class=dd-item><a href=/download/>Download</a></li><li data-nav-id=/development/ title=Development class=dd-item><a href=/development/>Development</a></li></ul><section id=shortcuts><h3>More</h3><ul><li><a class=padding href=https://strolch.li/tags><i class="fas fa-tags"></i>Tags</a></li><li><a class=padding href=https://github.com/strolch-li><i class="fab fa-github"></i>GitHub project</a></li></ul></section><section id=footer><p>Built with <a href=https://github.com/matcornic/hugo-theme-learn><i class="fas fa-heart"></i></a>from <a href=https://getgrav.org>Grav</a> and <a href=https://gohugo.io/>Hugo</a></p></section></div></nav><section id=body><div id=overlay></div><div class="padding highlightable"><div><div id=top-bar><div id=top-github-link><a class=github-link title="Edit this page" href=https://github.com/Pi4J/pi4j.github.io/tree/main/contentdocumentation/versioning.md target=blank><i class="fas fa-code-branch"></i><span id=top-github-link-text>Edit this page</span></a></div><div id=breadcrumbs itemscope itemtype=http://data-vocabulary.org/Breadcrumb><span id=sidebar-toggle-span><a href=# id=sidebar-toggle data-sidebar-toggle><i class="fas fa-bars"></i></a></span><span id=toc-menu><i class="fas fa-list-alt"></i></span><span class=links><a href=/>Strolch Overview</a> > <a href=/documentation/>Documentation</a> > Versioning</span></div><div class=progress><div class=wrapper><nav id=TableOfContents><ul><li><a href=#versioning>Versioning</a></li></ul></nav></div></div></div></div><div id=head-tags></div><div id=body-inner><h1>Versioning</h1><h2 id=versioning>Versioning</h2><p>One of Strolch&rsquo;s features that sets it apart from other frameworks, is that
versioning is baked into Strolch&rsquo;s fabric. The feature is opt-in, as it is not
required in all projects, but it only needs enabling, for all modifications to
objects to be versioned, so that rollbacks can be done when needed.</p><p>The feature is enabled for each realm. In the <code>StrolchConfiguration.xml</code> file
enable it by adding the <code>enableVersioning</code> propery per realm:</p><div class=highlight><pre style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=color:#f92672>&lt;StrolchConfiguration&gt;</span>
<span style=color:#f92672>&lt;env</span> <span style=color:#a6e22e>id=</span><span style=color:#e6db74>&#34;dev&#34;</span><span style=color:#f92672>&gt;</span>
...
<span style=color:#f92672>&lt;Component&gt;</span>
<span style=color:#f92672>&lt;name&gt;</span>RealmHandler<span style=color:#f92672>&lt;/name&gt;</span>
<span style=color:#f92672>&lt;api&gt;</span>li.strolch.agent.api.RealmHandler<span style=color:#f92672>&lt;/api&gt;</span>
<span style=color:#f92672>&lt;impl&gt;</span>li.strolch.agent.impl.DefaultRealmHandler<span style=color:#f92672>&lt;/impl&gt;</span>
<span style=color:#f92672>&lt;depends&gt;</span>PrivilegeHandler<span style=color:#f92672>&lt;/depends&gt;</span>
<span style=color:#f92672>&lt;Properties&gt;</span>
<span style=color:#f92672>&lt;realms&gt;</span>defaultRealm, otherRealm<span style=color:#f92672>&lt;/realms&gt;</span>
<span style=color:#f92672>&lt;enableVersioning&gt;</span>true<span style=color:#f92672>&lt;/enableVersioning&gt;</span>
<span style=color:#f92672>&lt;dataStoreMode&gt;</span>TRANSIENT<span style=color:#f92672>&lt;/dataStoreMode&gt;</span>
<span style=color:#f92672>&lt;dataStoreFile&gt;</span>StrolchModel.xml<span style=color:#f92672>&lt;/dataStoreFile&gt;</span>
<span style=color:#f92672>&lt;enableVersioning.otherRealm&gt;</span>true<span style=color:#f92672>&lt;/enableVersioning.otherRealm&gt;</span>
<span style=color:#f92672>&lt;dataStoreMode.otherRealm&gt;</span>TRANSIENT<span style=color:#f92672>&lt;/dataStoreMode.otherRealm&gt;</span>
<span style=color:#f92672>&lt;dataStoreFile.otherRealm&gt;</span>StrolchModel.xml<span style=color:#f92672>&lt;/dataStoreFile.otherRealm&gt;</span>
<span style=color:#f92672>&lt;/Properties&gt;</span>
<span style=color:#f92672>&lt;/Component&gt;</span>
<span style=color:#f92672>&lt;/env&gt;</span>
...
<span style=color:#f92672>&lt;/StrolchConfiguration&gt;</span>
</code></pre></div><p>Once versioning is enabled, versioning is handled automatically. The API for versioning is implemented on the ElementMaps.</p><p>Example: Revert to previous version of a Resource:</p><div class=highlight><pre style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java>Resource res <span style=color:#f92672>=</span> tx<span style=color:#f92672>.</span><span style=color:#a6e22e>getResourceBy</span><span style=color:#f92672>(</span><span style=color:#e6db74>&#34;TestType&#34;</span><span style=color:#f92672>,</span> <span style=color:#e6db74>&#34;MyTestResource&#34;</span><span style=color:#f92672>);</span>
ResourceMap resourceMap <span style=color:#f92672>=</span> tx<span style=color:#f92672>.</span><span style=color:#a6e22e>getResourceMap</span><span style=color:#f92672>();</span>
Resource previousVersion <span style=color:#f92672>=</span> resourceMap<span style=color:#f92672>.</span><span style=color:#a6e22e>revertToVersion</span><span style=color:#f92672>(</span>tx<span style=color:#f92672>,</span> res<span style=color:#f92672>);</span>
<span style=color:#75715e>// or
</span><span style=color:#75715e></span>Resource previousVersion <span style=color:#f92672>=</span> resourceMap<span style=color:#f92672>.</span><span style=color:#a6e22e>revertToVersion</span><span style=color:#f92672>(</span>tx<span style=color:#f92672>,</span> <span style=color:#e6db74>&#34;TestType&#34;</span><span style=color:#f92672>,</span> <span style=color:#e6db74>&#34;MyTestResource&#34;</span><span style=color:#f92672>,</span> 1<span style=color:#f92672>);</span>
</code></pre></div><p>Example: Retrieve all versions of a Resource:</p><div class=highlight><pre style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java>List<span style=color:#f92672>&lt;</span>Resource<span style=color:#f92672>&gt;</span> versions <span style=color:#f92672>=</span> resourceMap<span style=color:#f92672>.</span><span style=color:#a6e22e>getVersionsFor</span><span style=color:#f92672>(</span>tx<span style=color:#f92672>,</span> <span style=color:#e6db74>&#34;TestType&#34;</span><span style=color:#f92672>,</span> <span style=color:#e6db74>&#34;MyTestResource&#34;</span><span style=color:#f92672>);</span>
</code></pre></div><div class="notices tip"><p>Note: When reverting to a previous version, it is important to remember, that
any references on an element to other elements will also be restored. As long as
the relationship is to the same element, then this is not an issue, but should
the relationship have changed, then it this must be handled and the user
performing a revert be allowed to decided which element to reference in the
reverted version.</p></div><footer class=footline></footer></div></div><div id=navigation><a class="nav nav-prev" href=/documentation/observers/ title=Observers><i class="fa fa-chevron-left"></i></a><a class="nav nav-next" href=/documentation/reports/ title=Reports style=margin-right:0><i class="fa fa-chevron-right"></i></a></div></section><div style=left:-1000px;overflow:scroll;position:absolute;top:-1000px;border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px><div style=border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px></div></div><script src=/js/clipboard.min.js?1626091328></script><script src=/js/perfect-scrollbar.min.js?1626091328></script><script src=/js/perfect-scrollbar.jquery.min.js?1626091328></script><script src=/js/jquery.sticky.js?1626091328></script><script src=/js/featherlight.min.js?1626091328></script><script src=/js/highlight.pack.js?1626091328></script><script>hljs.initHighlightingOnLoad();</script><script src=/js/modernizr.custom-3.6.0.js?1626091328></script><script src=/js/learn.js?1626091328></script><script src=/js/hugo-learn.js?1626091328></script><script src=/mermaid/mermaid.js?1626091328></script><script>mermaid.initialize({startOnLoad:true});</script></body></html>