266 lines
14 KiB
HTML
266 lines
14 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: Overview</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 class="active"><a href="index.html">Overview</a></li>
|
|
<li><a href="api.html">API</a></li>
|
|
<li><a href="documentation.html">Documentation</a></li>
|
|
<li><a href="plc.html">PLC</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">Strolch Overview</h1>
|
|
|
|
<p class="lead page-description">This page describes the Strolch software agent and the motivation behind its
|
|
development.</p>
|
|
</div>
|
|
|
|
<div class="content">
|
|
|
|
<h2>Overview</h2>
|
|
|
|
<p>Strolch is an open source component based software agent written in Java and can be compared, in a light
|
|
sense, with the Java EE stack: Strolch takes care of persistence, implements Services for use cases, Commands
|
|
as re-usable algorithms and has a parameterized data model.</p>
|
|
|
|
<p>Strolch has an intrinsic understanding for mandates, which are called realms so that a single agent can be
|
|
used to implement applications with multiple users/customers for instance in SaaS environments.</p>
|
|
|
|
<p>The parameterized data model consists of three top level objects, Resources, Orders and Activities. These
|
|
objects can have any number of ParameterBags which in turn can have any number of Parameters on them. This
|
|
allows for a very dynamic modelling of data structures including modification at run time. Multiple ready to
|
|
use Parameter types are already implemented which handle the primitive types in Java including ListParameters
|
|
for collections of these primitive types.</p>
|
|
|
|
<p>One of the main features of the Strolch agent, is that persistence is handled transparently and the user must
|
|
not be worried about databases and the likes. Currently there are two implementations for persisting the
|
|
Strolch model, a PostgreSQL and an XML file persistence. Currently both persistence layers persist the data
|
|
by converting to XML and storing it into the database. The XML file persistence stores each object in its own
|
|
file.</p>
|
|
|
|
<p>The agent itself has a small memory footprint and requires very few components to start. For the agent to be
|
|
useful it needs additional functionality which is implemented in StrolchComponents. Each component is
|
|
registered via its Java interface on the agent and is bound to the life cycle of the agent. When the agent is
|
|
started, these components can be retrieved and used to perform any number of functionalities. This is the
|
|
preferred way to extend the Strolch agent. There are a number of components already implemented, e.g. the
|
|
ServiceHandler which executes Services in a controlled fashion and can validate authorized access to these
|
|
services.</p>
|
|
|
|
<p>No software product is complete without a system for authentication and authorization. Strolch implements
|
|
this by using the Privilege framework which has been written by Robert von Burg. The standard ServiceHandler
|
|
detects the existence of the PrivilegeHandler and then validates that the user has authorization to perform
|
|
the service. This framework is implemented as its own Strolch component, thus can be retrieved at any time
|
|
during execution to perform fine grained and special authorization validation.</p>
|
|
|
|
<h2>Motivation</h2>
|
|
|
|
<p>A question often asked is why create Strolch. What are its benefits in contrast to using Java SE with an
|
|
OR-Mapper like Hibernate, or using Java EE on JBoss or Glassfish? Especially since many of the features
|
|
existing in those stacks needed to be re-created in Strolch.</p>
|
|
|
|
<p>The first answer to this question is that those systems are often overly complicated and bloated. Java SE
|
|
with Hibernate certainly is a viable option when it comes to being light-weightier but Hibernate, even though
|
|
it is supposed to, often fails to truly help remove the need to really understand an RDBMS. Often enough
|
|
Hibernate will just get in the way of the most important part of development: writing the business code.
|
|
Being an OR-Mapper which is supposed to implement all the nitty-gritty details of an RDBMS system, Hibernate,
|
|
and JPA for that matter, still often has the developer go back to understanding these details.</p>
|
|
|
|
<p>Strolch tries a different approach to persistence. Instead of writing pojos/entities, Strolch's model has the
|
|
concept that each element's attributes are part of a composition pattern: each attribute is its own object
|
|
and thus can be dynamically changed at runtime, but also makes persistence of such an element generic.
|
|
Instead of having fixed attributes for a concrete class, these parameters are stored in a map and are
|
|
accessed through the parameter's ID.</p>
|
|
|
|
<p>Assigning an ID to an attribute for accessing of course brings its own downsides, i.e. the parameter might
|
|
simply not be there, when being accessed. This is certainly an issue that the developer must handle, when
|
|
implementing a project using Strolch, but allows the developer to not need to worry about persistence, as
|
|
this is generically handled.</p>
|
|
|
|
<p>Since the persistence is generically handled, and Strolch stays lightweight on its requirements at runtime,
|
|
the developer can quickly get down to what is important for business value: Writing the business logic and
|
|
the presentation layer. Here too Strolch tries to help the developer by bringing in concepts which are easy
|
|
to follow: Use cases are implemented as Services, and re-usable business logic is put into Commands.</p>
|
|
|
|
<p>There will be reasons against using Strolch, as there will be against using the Java EE stack, or an
|
|
OR-Mapper or even the Java ecosystem for that fact. Important is to note, that the concepts behind Strolch
|
|
are nothing new, but have been implemented in at least two previous proprietary products. Since those
|
|
products are not accessible to the public, it was decided that a re-implementation might be of use to the
|
|
programming community at large.</p>
|
|
|
|
<p>Currently there is at least one company using Strolch in a commercial project which helps drive Strolch's
|
|
development and further motivates its existence.</p>
|
|
|
|
<p>Strolch is an open source project and licensed under the Apache License 2.0.</p>
|
|
|
|
<h2>Technologoy</h2>
|
|
|
|
<p>Strolch is written in Java and is programmed against the JDK 8. Strolch runs on any JRE 8 compliant
|
|
environment. Strolch is tested on the Oracle JRE 8.</p>
|
|
|
|
<h3>Dependencies</h3>
|
|
|
|
<p>Strolch strives to use as few external dependencies as possible, so that the Strolch runtime is not bloated
|
|
unnecessarily. The following list of Strolch dependencies is a summary and was created using mvn
|
|
dependency:tree on the strolch_minimal project for release 1.6.47.</p>
|
|
|
|
<p>Logging</p>
|
|
<ul>
|
|
<li>org.slf4j:slf4j-api:jar:1.7.25</li>
|
|
<li>ch.qos.logback:logback-classic:jar:1.2.3</li>
|
|
<li>ch.qos.logback:logback-core:jar:1.2.3</li>
|
|
</ul>
|
|
|
|
<p>Utils</p>
|
|
<ul>
|
|
<li>javax.mail:javax.mail-api:jar:1.6.0</li>
|
|
<li>com.sun.mail:javax.mail:jar:1.6.0</li>
|
|
<li>javax.activation:activation:jar:1.1</li>
|
|
</ul>
|
|
|
|
<p>Testing</p>
|
|
<ul>
|
|
<li>junit:junit:jar:4.12</li>
|
|
<li>org.hamcrest:hamcrest-core:jar:1.3</li>
|
|
<li>org.hamcrest:hamcrest-library:jar:1.3</li>
|
|
<li>org.mockito:mockito-core:jar:2.0.8-beta</li>
|
|
<li>org.objenesis:objenesis:jar:2.1</li>
|
|
</ul>
|
|
|
|
<p>Model</p>
|
|
<ul>
|
|
<li>com.google.code.gson:gson:jar:2.8.2</li>
|
|
</ul>
|
|
|
|
<p>SOQL</p>
|
|
<ul>
|
|
<li>org.abego.treelayout:org.abego.treelayout.core:jar:1.0.3</li>
|
|
<li>org.antlr:antlr-runtime:jar:3.5.2</li>
|
|
<li>org.antlr:antlr4-runtime:jar:4.7</li>
|
|
<li>org.antlr:antlr4:jar:4.7</li>
|
|
<li>org.antlr:ST4:jar:4.0.8</li>
|
|
<li>org.glassfish:javax.json:jar:1.0.4</li>
|
|
<li>com.ibm.icu:icu4j:jar:58.2</li>
|
|
</ul>
|
|
|
|
<p>PostgreSQL</p>
|
|
<ul>
|
|
<li>com.zaxxer:HikariCP:jar:2.7.1</li>
|
|
<li>org.postgresql:postgresql:jar:42.1.4</li>
|
|
</ul>
|
|
|
|
<p>REST</p>
|
|
<ul>
|
|
<li>javax.annotation:javax.annotation-api:jar:1.3.1</li>
|
|
<li>javax.servlet:javax.servlet-api:jar:3.1.0</li>
|
|
<li>javax.ws.rs:javax.ws.rs-api:jar:2.1</li>
|
|
</ul>
|
|
|
|
<p>REST testing</p>
|
|
<ul>
|
|
<li>javax.validation:validation-api:jar:1.1.0.Final</li>
|
|
<li>org.glassfish.grizzly:grizzly-framework:jar:2.3.28</li>
|
|
<li>org.glassfish.grizzly:grizzly-http-server:jar:2.3.28</li>
|
|
<li>org.glassfish.grizzly:grizzly-http-servlet:jar:2.3.28</li>
|
|
<li>org.glassfish.grizzly:grizzly-http:jar:2.3.28</li>
|
|
<li>org.glassfish.hk2:hk2-api:jar:2.5.0-b32</li>
|
|
<li>org.glassfish.hk2:hk2-locator:jar:2.5.0-b32</li>
|
|
<li>org.glassfish.hk2:hk2-utils:jar:2.5.0-b32</li>
|
|
<li>org.glassfish.hk2:osgi-resource-locator:jar:1.0.1</li>
|
|
<li>org.glassfish.hk2.external:aopalliance-repackaged:jar:2.5.0-b32</li>
|
|
<li>org.glassfish.hk2.external:javax.inject:jar:2.5.0-b32</li>
|
|
<li>org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.25.1</li>
|
|
<li>org.glassfish.jersey.containers:jersey-container-grizzly2-http:jar:2.25.1</li>
|
|
<li>org.glassfish.jersey.containers:jersey-container-grizzly2-servlet:jar:2.25.1</li>
|
|
<li>org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.25.1</li>
|
|
<li>org.glassfish.jersey.containers:jersey-container-servlet:jar:2.25.1</li>
|
|
<li>org.glassfish.jersey.core:jersey-client:jar:2.25.1</li>
|
|
<li>org.glassfish.jersey.core:jersey-common:jar:2.25.1</li>
|
|
<li>org.glassfish.jersey.core:jersey-server:jar:2.25.1</li>
|
|
<li>org.glassfish.jersey.media:jersey-media-jaxb:jar:2.25.1</li>
|
|
<li>org.glassfish.jersey.test-framework:jersey-test-framework-core:jar:2.25.1</li>
|
|
<li>org.javassist:javassist:jar:3.20.0-GA</li>
|
|
</ul>
|
|
|
|
|
|
<h4>API</h4>
|
|
|
|
<p>Check out the <a href="api.html">API page</a> to see how to use Strolch.</p>
|
|
|
|
</div>
|
|
<!-- /.content -->
|
|
|
|
<div id="footer">
|
|
<div class="container">
|
|
<p class="text-muted">© 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>
|