245 lines
13 KiB
HTML
245 lines
13 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="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 on the 2016-09-16.</p>
|
|
|
|
<h4>Basic runtime dependencies</h4>
|
|
<ul>
|
|
<li>commons-cli:commons-cli:jar:1.2:compile
|
|
<p>Implements the command line parameter parsing when starting from a main class</p></li>
|
|
|
|
<li>org.postgresql:postgresql:jar:9.4.1208.jre7:compile
|
|
<p>Implements the PostgreSQL Persistence layer used by li.strolch.persistence.postgresql</p></li>
|
|
<li>com.zaxxer:HikariCP:jar:2.3.6:compile
|
|
<p>Implements connection pooling for JDBC access</p></li>
|
|
|
|
<li>com.google.code.gson:gson:jar:2.3.1:compile
|
|
<p>Used to transform to JSON</p></li>
|
|
|
|
<li>javax.activation:activation:jar:1.1:compile
|
|
<p>Used when sending e-mails</p></li>
|
|
<li>javax.mail:mail:jar:1.5.0-b01:compile
|
|
<p>Used when sending e-mails</p></li>
|
|
|
|
<li>log4j:log4j:jar:1.2.17:runtime
|
|
<p>Used for logging</p></li>
|
|
<li>org.slf4j:slf4j-api:jar:1.7.2:compile
|
|
<p>Used for logging</p></li>
|
|
<li>org.slf4j:slf4j-log4j12:jar:1.7.2:runtime
|
|
<p>Used for logging</p></li>
|
|
</ul>
|
|
|
|
|
|
<h4>Web Restful dependencies</h4>
|
|
|
|
<p>If you want to access Strolch using the RESTful API, then we got you covered - but sadly RESTful service
|
|
development requires quite a few extra dependencies:</p>
|
|
<ul>
|
|
<li>com.github.petitparser.java-petitparser:petitparser-core:jar:2.0.2:compile</li>
|
|
<li>javax.annotation:javax.annotation-api:jar:1.2:compile</li>
|
|
<li>javax.servlet:javax.servlet-api:jar:3.0.1:provided</li>
|
|
<li>javax.validation:validation-api:jar:1.1.0.Final:compile</li>
|
|
<li>javax.ws.rs:javax.ws.rs-api:jar:2.0:compile</li>
|
|
<li>org.eclipse.persistence:org.eclipse.persistence.antlr:jar:2.5.0:compile</li>
|
|
<li>org.eclipse.persistence:org.eclipse.persistence.asm:jar:2.5.0:compile</li>
|
|
<li>org.eclipse.persistence:org.eclipse.persistence.core:jar:2.5.0:compile</li>
|
|
<li>org.eclipse.persistence:org.eclipse.persistence.moxy:jar:2.5.0:compile</li>
|
|
<li>org.glassfish.hk2.external:aopalliance-repackaged:jar:2.3.0-b05:compile</li>
|
|
<li>org.glassfish.hk2.external:javax.inject:jar:2.3.0-b05:compile</li>
|
|
<li>org.glassfish.hk2:hk2-api:jar:2.3.0-b05:compile</li>
|
|
<li>org.glassfish.hk2:hk2-locator:jar:2.3.0-b05:compile</li>
|
|
<li>org.glassfish.hk2:hk2-utils:jar:2.3.0-b05:compile</li>
|
|
<li>org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile</li>
|
|
<li>org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.11:compile</li>
|
|
<li>org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.11:compile</li>
|
|
<li>org.glassfish.jersey.containers:jersey-container-servlet:jar:2.11:compile</li>
|
|
<li>org.glassfish.jersey.core:jersey-client:jar:2.11:compile</li>
|
|
<li>org.glassfish.jersey.core:jersey-common:jar:2.11:compile</li>
|
|
<li>org.glassfish.jersey.core:jersey-server:jar:2.11:compile</li>
|
|
<li>org.glassfish.jersey.ext:jersey-entity-filtering:jar:2.11:compile</li>
|
|
<li>org.glassfish.jersey.media:jersey-media-moxy:jar:2.11:compile</li>
|
|
<li>org.javassist:javassist:jar:3.18.1-GA:compile</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>
|