<!doctype html><htmllang=enclass="js csstransforms3d"><head><metacharset=utf-8><metaname=viewportcontent="width=device-width,initial-scale=1"><metaname=generatorcontent="Hugo 0.80.0"><metaname=descriptioncontent="Strolch is a parameterized framework for use on servers and IoT"><metaname=authorcontent="Strolch"><linkrel=iconhref=/favicon.icotype=image/ico><title>Components - Strolch</title><linkhref=/css/nucleus.css?1631087427rel=stylesheet><linkhref=/css/fontawesome-all.min.css?1631087427rel=stylesheet><linkhref=/css/hybrid.css?1631087427rel=stylesheet><linkhref=/css/featherlight.min.css?1631087427rel=stylesheet><linkhref=/css/perfect-scrollbar.min.css?1631087427rel=stylesheet><linkhref=/css/auto-complete.css?1631087427rel=stylesheet><linkhref=/css/atom-one-dark-reasonable.css?1631087427rel=stylesheet><linkhref=/css/theme.css?1631087427rel=stylesheet><linkhref=/css/hugo-theme.css?1631087427rel=stylesheet><linkhref=/css/theme-green.css?1631087427rel=stylesheet><scriptsrc=/js/jquery-3.3.1.min.js?1631087427></script><style>:root#header+#content>#left>#rlblock_left{display:none!important}</style></head><bodydata-url=/documentation/components/><navid=sidebar><divid=header-wrapper><divid=header><aid=logohref=/><imgsrc=/logo.png></a></div><divclass=searchbox><labelfor=search-by><iclass="fas fa-search"></i></label><inputdata-search-inputid=search-bytype=searchplaceholder=Search...>
parent"><ahref=/documentation/>Documentation</a><ul><lidata-nav-id=/documentation/architecture/title=Architectureclass=dd-item><ahref=/documentation/architecture/>Architecture</a></li><lidata-nav-id=/documentation/model/title=Modelclass=dd-item><ahref=/documentation/model/>Model</a></li><lidata-nav-id=/documentation/do-and-donts/title="Do and Don't"class=dd-item><ahref=/documentation/do-and-donts/>Do and Don't</a></li><lidata-nav-id=/documentation/runtime-configuration/title="Runtime Configuration"class=dd-item><ahref=/documentation/runtime-configuration/>Runtime Configuration</a></li><lidata-nav-id=/documentation/realms/title=Realmsclass=dd-item><ahref=/documentation/realms/>Realms</a></li><lidata-nav-id=/documentation/components/title=Componentsclass="dd-item active"><ahref=/documentation/components/>Components</a></li><lidata-nav-id=/documentation/services-and-commands/title="Services and Commands"class=dd-item><ahref=/documentation/services-and-commands/>Services and Commands</a></li><lidata-nav-id=/documentation/searches/title=Searchesclass=dd-item><ahref=/documentation/searches/>Searches</a></li><lidata-nav-id=/documentation/queries/title=Queriesclass=dd-item><ahref=/documentation/queries/>Queries</a></li><lidata-nav-id=/documentation/transactions/title=Transactionsclass=dd-item><ahref=/documentation/transactions/>Transactions</a></li><lidata-nav-id=/documentation/policies/title=Policiesclass=dd-item><ahref=/documentation/policies/>Policies</a></li><lidata-nav-id=/documentation/observers/title=Observersclass=dd-item><ahref=/documentation/observers/>Observers</a></li><lidata-nav-id=/documentation/versioning/title=Versioningclass=dd-item><ahref=/documentation/versioning/>Versioning</a></li><lidata-nav-id=/documentation/reports/title=Reportsclass=dd-item><ahref=/documentation/reports/>Reports</a></li><lidata-nav-id=/documentation/priviles/title=Privilegesclass=dd-item><ahref=/documentation/priviles/>Privileges</a></li></ul></li><lidata-nav-id=/plc/title=PLCclass=dd-item><ahref=/plc/>PLC</a><ul><lidata-nav-id=/plc/architecture/title=Architectureclass=dd-item><ahref=/plc/architecture/>Architecture</a></li><lidata-nav-id=/plc/example-set-up/title="Example Set-Up"class=dd-item><ahref=/plc/example-set-up/>Example Set-Up</a></li></ul></li><lidata-nav-id=/tutorial/title=Tutorialclass=dd-item><ahref=/tutorial/>Tutorial</a><ul><lidata-nav-id=/tutorial/configuration/title=Configurationclass=dd-item><ahref=/tutorial/configuration/>Configuration</a></li><lidata-nav-id=/tutorial/model/title=Modelclass=dd-item><ahref=/tutorial/model/>Model</a></li><lidata-nav-id=/tutorial/crud-book/title="CRUD Book"class=dd-item><ahref=/tutorial/crud-book/>CRUD Book</a></li></ul></li><lidata-nav-id=/download/title=Downloadclass=dd-item><ahref=/download/>Download</a></li><lidata-nav-id=/development/title=Developmentclass=dd-item><ahref=/development/>Development</a></li><lidata-nav-id=/blog/title=Blogclass=dd-item><ahref=/blog/>Blog</a><ul><lidata-nav-id=/blog/post-00016/title="Strolch PLC now also on Maven Central"class=dd-item><ahref=/blog/post-00016/>Strolch PLC now also on Maven Central</a></li><lidata-nav-id=/blog/post-00015/title="Release of Strolch 1.6.100"class=dd-item><ahref=/blog/post-00015/>Release of Strolch 1.6.100</a></li><lidata-nav-id=/blog/post-00014/title="Strolch Reports"class=dd-item><ahref=/blog/post-00014/>Strolch Reports</a></li><lidata-nav-id=/blog/post-00013/title="Strolch Searches"class=dd-item><ahref=/blog/post-00013/>Strolch Searches</a></li><lidata-nav-id=/blog/post-00012/title="Wow, the many changes!"class=dd-item><ahref=/blog/post-00012/>Wow, the many changes!</a></li><lidata-nav-id=/blog/post-00011/title="Strolch now on Maven Central"class=dd-item><ahref=/blog/post-00011/>Strolch now on Maven Central</a></li><lidata-nav-id=/blog/post-00010/title="Versioning of objects"class=dd-item><ahref=/blog/post-00010/>Versioning of objects</a></li><lidata-nav-id=/blog/post-00009/title="Release 1.2.0"
is basically a container for classes extending StrolchComponent with a life
cycle. These classes mostly implement an interface which describes the
operations that are supported by the component.</p><p>The following represents a list of the most used components:</p><ul><li><code>RealmHandler</code>: li.strolch.agent.impl.DefaultRealmHandler</li><li><code>PrivilegeHandler</code>: li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler</li><li><code>EnumHandler</code>: li.strolch.runtime.query.enums.DefaultEnumHandler</li><li><code>PolicyHandler</code>: li.strolch.policy.DefaultPolicyHandler</li><li><code>ServiceHandler</code>: li.strolch.service.api.DefaultServiceHandler</li><li><code>StrolchSessionHandler</code>: li.strolch.rest.DefaultStrolchSessionHandler</li><li><code>PersistenceHandler</code>: multiple implementations</li><li><code>PostInitializer</code>: project specific implementation</li><li><code>MailHandler</code>: li.strolch.handler.mail.SmtpMailHandler</li></ul><p>A component has a life-cycle, which is governed by the Agent’s own life-cycle.
The life-cycle is as follows:</p><pre><code>setup -> initialize -> start <-> stop -> destroy
</code></pre><p>The setup step is used to instantiate the component, the initialize step is
used to validate configuration parameters, and the run step is used to start
the component, i.e. start threads, etc. The stop step stops these threads and
also allows the component to be started again. The destroy step destroys the
instance and makes it unusable anymore, i.e. shutdown of the agent.</p><p>Each component has its own configuration parameters. A component is
registered in the <code>StrolchConfiguration.xml</code> file with a</p><ul><li>name</li><li>api class name</li><li>implementation class name</li><li>configuration parameters</li><li>any required dependencies</li></ul><p>The dependencies is an important feature as the dependencies of a component
are always started before the actual component.</p><h2id=example-component-implementation-and-configuration>Example Component implementation and configuration</h2><p>By example of the <code>MailHandler</code> we shall show how a strolch component would
be implemented.</p><p>First define an interface:</p><divclass=highlight><prestyle=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><codeclass=language-javadata-lang=java><spanstyle=color:#66d9ef>public</span><spanstyle=color:#66d9ef>interface</span><spanstyle=color:#a6e22e>MailHandler</span><spanstyle=color:#f92672>{</span>
E.g from inside a Service:</p><divclass=highlight><prestyle=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><codeclass=language-javadata-lang=java><spanstyle=color:#66d9ef>public</span><spanstyle=color:#66d9ef>class</span><spanstyle=color:#a6e22e>MyService</span><spanstyle=color:#66d9ef>extends</span> AbstractService<spanstyle=color:#f92672><</span>ServiceArgument<spanstyle=color:#f92672>,</span> ServiceResult<spanstyle=color:#f92672>></span><spanstyle=color:#f92672>{</span>