[Project] Changed index page for the website
This commit is contained in:
parent
c6b7a957a6
commit
d7f090ed9e
|
@ -60,7 +60,9 @@
|
||||||
<p>Transactions handle the following:</p>
|
<p>Transactions handle the following:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Opening and closing database connections</li>
|
<li>Opening and closing database connections</li>
|
||||||
<li>Releasing locks to strolch elements, if <code>tx.lock(StrolchRootElement)</code> was called</li>
|
<li>Releasing locks to strolch elements, if <code>tx.lock(StrolchRootElement)</code> or <code>tx.lock(Locator)</code>
|
||||||
|
was called
|
||||||
|
</li>
|
||||||
<li>Performing Commands by executing them in the added order, and validating them first.</li>
|
<li>Performing Commands by executing them in the added order, and validating them first.</li>
|
||||||
<li>Exception handling</li>
|
<li>Exception handling</li>
|
||||||
<li>Auditing</li>
|
<li>Auditing</li>
|
||||||
|
@ -100,8 +102,11 @@
|
||||||
<pre>
|
<pre>
|
||||||
try (StrolchTransaction tx = openTx(...)) {
|
try (StrolchTransaction tx = openTx(...)) {
|
||||||
|
|
||||||
// find a car by locator
|
// read lock our object
|
||||||
Locator ferrariLoc = Resource.locatorFor("Car", "ferrari");
|
Locator ferrariLoc = Resource.locatorFor("Car", "ferrari");
|
||||||
|
tx.lock(ferrariLoc);
|
||||||
|
|
||||||
|
// find a car by locator
|
||||||
Resource ferrari = tx.findElement(ferrariLoc);
|
Resource ferrari = tx.findElement(ferrariLoc);
|
||||||
|
|
||||||
// get a car by ID
|
// get a car by ID
|
||||||
|
@ -121,13 +126,13 @@ try (StrolchTransaction tx = openTx(...)) {
|
||||||
|
|
||||||
// check resource exists
|
// check resource exists
|
||||||
if (tx.hasResource("Car", "audi")) {
|
if (tx.hasResource("Car", "audi")) {
|
||||||
Resource audi = tx.getResourceBy("Car", "audi", true);
|
Resource audi = tx.getResourceBy("Car", "audi", true);
|
||||||
|
|
||||||
// assert has privilege to remove a car
|
// assert has privilege to remove a car
|
||||||
tx.assertHasPrivilege(Operation.REMOVE, audi);
|
tx.assertHasPrivilege(Operation.REMOVE, audi);
|
||||||
|
|
||||||
// remove the car
|
// remove the car
|
||||||
tx.remove(audi);
|
tx.remove(audi);
|
||||||
}
|
}
|
||||||
|
|
||||||
// iterate all cars
|
// iterate all cars
|
||||||
|
@ -137,7 +142,7 @@ try (StrolchTransaction tx = openTx(...)) {
|
||||||
|
|
||||||
// commit if TX was changed
|
// commit if TX was changed
|
||||||
if (tx.needsCommit())
|
if (tx.needsCommit())
|
||||||
tx.commitOnClose();
|
tx.commitOnClose();
|
||||||
}</pre>
|
}</pre>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,264 @@
|
||||||
|
<!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 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>
|
|
@ -47,181 +47,92 @@
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<h1 class="page-title">Strolch Overview</h1>
|
<h1 class="page-title">Strolch Overview</h1>
|
||||||
|
|
||||||
<p class="lead page-description">This page describes the Strolch software agent and the motivation behind its
|
<p class="lead page-description">A short introduction to Strolch.</p>
|
||||||
development.</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|
||||||
<h2>Overview</h2>
|
<h2>Strolch in short</h2>
|
||||||
|
|
||||||
<p>Strolch is an open source component based software agent written in Java and can be compared, in a light
|
<p>Strolch is framework for developing Software. It's main features are:</p>
|
||||||
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>
|
<ul>
|
||||||
<li>org.slf4j:slf4j-api:jar:1.7.25</li>
|
<li>Complete persisted <a href="documentation-model.html">data model</a>:
|
||||||
<li>ch.qos.logback:logback-classic:jar:1.2.3</li>
|
<ul>
|
||||||
<li>ch.qos.logback:logback-core:jar:1.2.3</li>
|
<li>Parameters and values by time</li>
|
||||||
</ul>
|
<li>Resources, Orders with arbitrary parameter grouping</li>
|
||||||
|
<li>Activity/Action hierarchy with arbitrary depth</li>
|
||||||
<p>Utils</p>
|
<li>Policies for delegation</li>
|
||||||
<ul>
|
<li>JSON as well as XML transformation</li>
|
||||||
<li>javax.mail:javax.mail-api:jar:1.6.0</li>
|
<li>Locator API</li>
|
||||||
<li>com.sun.mail:javax.mail:jar:1.6.0</li>
|
</ul>
|
||||||
<li>javax.activation:activation:jar:1.1</li>
|
</li>
|
||||||
</ul>
|
<li><a href="documentation-transactions.html">Transactions with pessimistic locking and optional
|
||||||
|
read-locking</a></li>
|
||||||
<p>Testing</p>
|
<li><a href="documentation-searches.html">Search API</a></li>
|
||||||
<ul>
|
<li>Component based</li>
|
||||||
<li>junit:junit:jar:4.12</li>
|
<li><a href="documentation-privileges.html">Deeply integrated privilege handling</a></li>
|
||||||
<li>org.hamcrest:hamcrest-core:jar:1.3</li>
|
<li>Fully in-memory</li>
|
||||||
<li>org.hamcrest:hamcrest-library:jar:1.3</li>
|
<li>Persisted auditing, versioning, operations log</li>
|
||||||
<li>org.mockito:mockito-core:jar:2.0.8-beta</li>
|
<li>DAOs for file system or PostgreSQL, easily extended</li>
|
||||||
<li>org.objenesis:objenesis:jar:2.1</li>
|
<li>Execution framework</li>
|
||||||
</ul>
|
<li><a href="documentation-services-and-commands.html">Service / Command oriented</a></li>
|
||||||
|
<li><a href="documentation-reports.html">Reporting API configured by Resource objects</a></li>
|
||||||
<p>Model</p>
|
<li>REST API for data access</li>
|
||||||
<ul>
|
<li>WebComponents UI for
|
||||||
<li>com.google.code.gson:gson:jar:2.8.2</li>
|
<ul>
|
||||||
</ul>
|
<li>Inspector</li>
|
||||||
|
<li>Users</li>
|
||||||
<p>SOQL</p>
|
<li>Roles</li>
|
||||||
<ul>
|
<li>Operations Log</li>
|
||||||
<li>org.abego.treelayout:org.abego.treelayout.core:jar:1.0.3</li>
|
<li>Login Screen</li>
|
||||||
<li>org.antlr:antlr-runtime:jar:3.5.2</li>
|
<li>Jobs</li>
|
||||||
<li>org.antlr:antlr4-runtime:jar:4.7</li>
|
</ul>
|
||||||
<li>org.antlr:antlr4:jar:4.7</li>
|
</li>
|
||||||
<li>org.antlr:ST4:jar:4.0.8</li>
|
<li>runs on plain old Java SE</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>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<h4>API</h4>
|
<h2>Strolch Intro</h2>
|
||||||
|
|
||||||
|
<p>It is a different framework to Spring and other similar type of Java frameworks, as the model is defined as
|
||||||
|
an abstract model, where you always have the same three types of objects: Resources, Orders and Activities.
|
||||||
|
The fields are mapped as Parameter objects, of which the important primitives are available.</p>
|
||||||
|
|
||||||
|
<p>The nice part about this framework is, that you can be up and ready in a matter of minutes, and start
|
||||||
|
building your project immediately in that you open your favourite XML editor and start modelling your
|
||||||
|
data.</p>
|
||||||
|
|
||||||
|
<p>Once your data is defined, you write your business logic in the form of Services, Commands and Searches.
|
||||||
|
There are many predefined services and commands to manipulate the object model, so that you write your own
|
||||||
|
services when you need to enforce special business rules.</p>
|
||||||
|
|
||||||
|
<p>Through the use of Policy objects, you decouple algorithms from your object model, so that at runtime you can
|
||||||
|
change the behaviour, or easily implement different behaviour depending on your use-case. For instance you
|
||||||
|
might have a simple billing service which performs a few preparatory steps, and then calls the configured
|
||||||
|
billing policy to execute the billing depending on the customer, the warehouse, etc.</p>
|
||||||
|
|
||||||
|
<p>And of course persistence is as simple as configuring the persistence handler, pointing to your RDBMS and
|
||||||
|
then setting the mode to CACHED. For you as a developer there is no more thinking in terms of SQL etc., as
|
||||||
|
this is completely hidden from the developer. There is even a simple file persistence layer if you are
|
||||||
|
running IoT devices.</p>
|
||||||
|
|
||||||
|
<p>The runtime can be just about anything. Usually it is run inside an Apache Tomcat instance as a webapp, as a
|
||||||
|
WEB UI has been required for all current Strolch projects. You could just as well use a main class. Accessing
|
||||||
|
the Strolch Agent remotely is usually done through REST.</p>
|
||||||
|
|
||||||
|
<p>Strolch is being actively developed, and customers constantly give us reasons to improve and extend the
|
||||||
|
framework. There is a Polymer Inspector component which makes it easy to see and manipulate the actual data.
|
||||||
|
The new Search API makes it really easy to query your data.</p>
|
||||||
|
|
||||||
|
<p>Yes, Strolch is different, but the concept has come out of the planning and execution segment, and has been
|
||||||
|
refined over the years until it has become what it is today.</p>
|
||||||
|
|
||||||
|
<h2>API</h2>
|
||||||
|
|
||||||
<p>Check out the <a href="api.html">API page</a> to see how to use Strolch.</p>
|
<p>Check out the <a href="api.html">API page</a> to see how to use Strolch.</p>
|
||||||
|
|
||||||
|
<a href="history.html">More to motivation etc.</a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- /.content -->
|
<!-- /.content -->
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue