strolch/li.strolch.website/www.strolch.li/documentation-architecture....

159 lines
6.4 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="google-site-verification" content="CPhbjooaiTdROm7Vs4E7kuHZvBfkeLUtonGgcVUbTL8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="ico/favicon.ico">
<title>Strolch: Architecture</title>
<!-- Bootstrap core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/custom.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --><!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script><![endif]-->
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="index.html">Strolch</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="index.html">Overview</a></li>
<li><a href="api.html">API</a></li>
<li class="active"><a href="documentation.html">Documentation</a></li>
<li><a href="tutorial.html">Tutorial</a></li>
<li><a href="downloads.html">Downloads</a></li>
<li><a href="development.html">Development</a></li>
<li><a href="blog.html">Blog</a></li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
</div>
<div class="container">
<div class="page-header">
<h1 class="page-title">Documentation: Architecture</h1>
<p class="lead page-description">This page discusses the architecture of a Strolch Agent</p>
</div>
<div class="content">
<h2>Birds View</h2>
<p>A Strolch agent's architecture can be seen as a simple three-tier architecture. The presentation layer is
mostly a web frontend, where the communication with the agent is done via REST API calls.</p>
<p>The agent itself implements the business logic using Services, Commands, Queries etc.</p>
<p>The agent can communicate with other 3rd systems using any API, where it is preferred to use JSON over
REST.</p>
<p>The agent can use a standard RDBMS as a storage system, where currently DAOs have been implemented only for
PostgreSQL. Should it be required, then any JDBC cabable RDBMS can be used, as no PostgreSQL specific SQL
commands are used.</p>
<p>The following diagram helps visualize this:</p>
<img src="images/Strolch-Bird-View.svg" class="img-responsive center-block" alt="Strolch Agent Bird View">
<br />
<h2>Squirrel View</h2>
<p>The following diagram shows a more detailed view of the architecture of a Strolch Agent.</p>
<img src="images/Strolch-Squirrel-View.svg"
class="img-responsive center-block"
alt="Strolch Agent Squirrel View">
<br />
<p>A Strolch agent consists of the following main parts:</p>
<ul>
<li>REST Endpoints &rarr; expose an API to access the Strolch agent outside of the Java VM</li>
<li>Services and Commands &rarr; implements business logic</li>
<li>Searches &rarr; implements specific queries against the Strolch model</li>
<li>Components &rarr; Implements additional logic, which is best implement as a component. E.g. active
components which have threads, etc.
</li>
<li>Realms &rarr; implements multi-tenant capabilities</li>
</ul>
<p>In addition to the main parts, Strolch contains inherit capabilities, which gives Strolch unique features
when compared to other Java Frameworks:</p>
<ul>
<li>Policies &rarr; Policies allow injecting different algorithms. All root elements can store Policy
definitions, so that a service can delegate to a Policy and thus behave differently, depending on the
element being accessed.
</li>
<li>Transactions &rarr; Transactions handle locking/unlocking of objects, updating the model and are the
central API for the developer.
</li>
<li>Privileges &rarr; Strolch is user agnostic and any action, i.e. Service, Query, etc. is authorized
against the authenticated user.
</li>
<li>Observers &rarr; modifications to the model are propagated to listeners using the observer pattern.</li>
<li>Audits &rarr; Every access (read, modify) of the model are audited</li>
<li>Versioning &rarr; modifications to objects are versioned and thus can be rolled back at a later time.
</li>
</ul>
<!-- content here -->
</div>
<!-- /.content -->
<div id="footer">
<div class="container">
<p class="text-muted">&copy; Strolch / <a href="mailto:eitch@eitchnet.ch">Robert von Burg</a> / Hosting by
<a href="http://www.eitchnet.ch">eitchnet.ch</a></p>
</div>
</div>
</div>
<!-- /.container -->
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual xsd as needed -->
<script src="js/bootstrap.min.js"></script>
<!-- Piwik -->
<script type="text/javascript">
var _paq = _paq || [];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function () {
var u = (("https:" == document.location.protocol) ? "https" : "http") + "://piwik.eitchnet.ch/";
_paq.push(['setTrackerUrl', u + 'piwik.php']);
_paq.push(['setSiteId', 2]);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.type = 'text/javascript';
g.defer = true;
g.async = true;
g.src = u + 'piwik.js';
s.parentNode.insertBefore(g, s);
})();
</script>
<noscript><p><img src="http://piwik.eitchnet.ch/piwik.php?idsite=2" style="border:0;" alt="" /></p></noscript>
<!-- End Piwik Code -->
</body>
</html>