[New] Added all blog articles

This commit is contained in:
Robert von Burg 2021-07-12 17:29:49 +02:00
parent 30888b8f61
commit 50306d803c
28 changed files with 647 additions and 18 deletions

View File

@ -13,7 +13,7 @@ To start developing Strolch you need an installed:
Setting up Strolch is just a few lines:
```shell
git clone https://github.com/4treesCH/strolch.git
git clone https://github.com/strolch-li/strolch.git
cd strolch
mvn clean install -DskipTests
```

View File

@ -216,7 +216,7 @@ try (StrolchTransaction tx = runtimeMock.openUserTx(certificate, true)) {
```
{{% notice tip %}}
Note: Checkout [example-model.xml](https://github.com/4treesCH/strolch/blob/develop/li.strolch.service/src/test/resources/transienttest/data/example-model.xml "{target='_blank'}") and [SimpleModelTest.java](https://github.com/4treesCH/strolch/blob/develop/li.strolch.service/src/test/java/li/strolch/service/SimpleModelTest.java "{target='_blank'}") for these examples.
Note: Checkout [example-model.xml](https://github.com/strolch-li/strolch/blob/develop/li.strolch.service/src/test/resources/transienttest/data/example-model.xml "{target='_blank'}") and [SimpleModelTest.java](https://github.com/strolch-li/strolch/blob/develop/li.strolch.service/src/test/java/li/strolch/service/SimpleModelTest.java "{target='_blank'}") for these examples.
{{% /notice %}}
{{% notice tip %}}

View File

@ -305,5 +305,5 @@ List<JsonObject> result = new Report(tx, "stockReport") //
```
{{% notice tip %}}
Note: See the [GenericReportTest](https://github.com/4treesCH/strolch/blob/develop/li.strolch.service/src/test/java/li/strolch/report/GenericReportTest.java) for examples.
Note: See the [GenericReportTest](https://github.com/strolch-li/strolch/blob/develop/li.strolch.service/src/test/java/li/strolch/report/GenericReportTest.java) for examples.
{{% /notice %}}

View File

@ -41,13 +41,13 @@ clauses. Either
When extending the class, then the search expressions are available as methods
on the super class, otherwise you can statically import them from
[ExpressionsSupport](https://github.com/4treesCH/strolch/blob/develop/li.strolch.agent/src/main/java/li/strolch/search/ExpressionsSupport.java)
[ExpressionsSupport](https://github.com/strolch-li/strolch/blob/develop/li.strolch.agent/src/main/java/li/strolch/search/ExpressionsSupport.java)
.
And of course a where clause needs operators, which are called search
predicates. Just as search expressions are available in sub classes, so are
search predicates and can also be statically imported through
[PredicatesSupport](https://github.com/4treesCH/strolch/blob/develop/li.strolch.agent/src/main/java/li/strolch/search/PredicatesSupport.java)
[PredicatesSupport](https://github.com/strolch-li/strolch/blob/develop/li.strolch.agent/src/main/java/li/strolch/search/PredicatesSupport.java)
.
Examples of search expressions with search predicates follow:
@ -82,7 +82,7 @@ personSearch.where(person -> person.getName().length() == 3);
```
See
the [StrolchSearchTest](https://github.com/4treesCH/strolch/blob/develop/li.strolch.agent/src/test/java/li/strolch/search/StrolchSearchTest.java)
the [StrolchSearchTest](https://github.com/strolch-li/strolch/blob/develop/li.strolch.agent/src/test/java/li/strolch/search/StrolchSearchTest.java)
for many ways in which you can implement tests.
{{% notice tip %}} Note that strolch searches requires privileges, thus when you

View File

@ -1,6 +1,7 @@
---
title: 'History'
weight: 10
weight: 1000
hidden: true
---
## Overview

View File

@ -17,7 +17,7 @@ Of course using the Java language as a PLC has its limitations, we have manage
to use it for customers and are satisfied with the result. What follows is a
description in how to set up your own Strolch based PLC.
Checkout the code at [GitHub](https://github.com/4treesCH/strolch-plc)
Checkout the code at [GitHub](https://github.com/strolch-li/strolch-plc)
Currently, we have the following topics of discussion:

View File

@ -65,7 +65,7 @@ business logic and the PLC controls the I/Os.
</project>
```
3. Add a bower dependency: `"strolch-wc-plc": "4treesCH/strolch-wc-plc#^0.3.4"`
3. Add a bower dependency: `"strolch-wc-plc": "strolch-li/strolch-wc-plc#^0.3.4"`
to `src/main/webapp/bower.json`
After adding the dependency, run `gulp` in the webapp directory. Gulp should
@ -485,7 +485,7 @@ The action `On` would send true, and `Off` would send false. This is semantics,
is defined in each project depending on the hardware.
10. Copy the
file [plc-state.xml](https://github.com/4treesCH/strolch-plc/blob/develop/example/plc-state.xml)
file [plc-state.xml](https://github.com/strolch-li/strolch-plc/blob/develop/example/plc-state.xml)
to your runtime and reference it by use of
a `<IncludeFile file="plc-state.xml" />` element. Modify the `PlcId` to be the
same as the one you defined in the `StrolchConfiguration.xml`.
@ -534,6 +534,6 @@ is defined in each project depending on the hardware.
</StrolchModel>
```
See [strolch-plc-example-connections.xml](https://github.com/4treesCH/strolch-plc/blob/develop/example/strolch-plc-example-connections.xml) for further examples.
See [strolch-plc-example-connections.xml](https://github.com/strolch-li/strolch-plc/blob/develop/example/strolch-plc-example-connections.xml) for further examples.

16
content/posts/_index.md Normal file
View File

@ -0,0 +1,16 @@
---
title: 'Blog'
---
## About
The official Strolch blog with news, ideas, and thoughts on using Strolch.
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.
## Entries
{{% children description="true" depth="1" %}}

View File

@ -0,0 +1,62 @@
---
title: 'Release 1.0.0-RC1'
description: 'With the Go-Live of a Strolch-based application around the corner, it is time to release Version 1.0.0 of Strolch. To this affect we have now released version 1.0.0-RC1 which can be downloaded on the download page.'
weight: -1
date: 2014-08-20T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Release 1.0.0-RC1
With the Go-Live of a Strolch-based application around the corner, it is time to release Version 1.0.0 of Strolch. To this affect we have now released version 1.0.0-RC1 which can be downloaded on the download page.
-------
## Story
Strolch as a component based software agent has been two years in the making. The concepts in Strolch have been taken from a proprietary planning, scheduling and controlling software agent, which was, and is been, used in industrial automation, logistics and production. Strolch was created to bring the concepts, which were working well for small teams to go-live with large projects in short to medium time-frames to the open source world.
Strolch was completely rewritten using the key concepts of a parameterized object model and a component based agent but remembering which clutches the original implementation had, thus trying to eradicate those without bringing in new ones. It might not be perfect in version 1.0.0, but it is a starting point form which to carry on from.
## Features
Strolch isn't feature complete by a long shot, but it sure has got many features which make it useable in a concrete project, thus making sure it is not vaporware =)
The following is a list of key features, many of which were driven by concrete project requirements:
* Separate containers for models (mandates)
* Parameterized model with full CRUD for Resource and Order objects
* Timed values on Resources to map values by time
* Built-in versioning of model - configurable by Realm
* Transparent runtime modes: TRANSIENT, CACHED, TRANSACTIONAL*
* Service and Command pattern for reusing functionality
* XML File based persistence layer*
* PostgreSQL persistence layer*
* Querying using a fluent API
* Services to import and export a model to XML
* Integrated authentication and authorization to validate user privileges using Privilege
* Ready to use Observer pattern
* (currently) Read-only REST API to access the agent model remotely
* Configurable environments
* Opt-in audit trail (including read access, and the audits themselves)
* Basic components required to communicate with external devices using TCP/IP
* With the light weight implementation, where there are basically no third party libraries required for the normal runtime, Strolch has a minimal foot print which allows it to run on small devices for instance a BeagleBone Black. Using the in-memory mode, it is an easy feat to set up test environments with little to no further requirements than the JVM.
## Future
So what is planned for the future? Although Strolch has quite a few interesting features, it is by no way feature complete. The greatest wish is for Strolch to become a community driven platform, so many new features will arise in the future, but at least one major future feature which will be tackled in the near future and will certainly drive the next major release is a planning and scheduling engine using a Gantt chart to visualize the schedule.
The planning engine will use the timed values on Resources extensively to create a planning engine on which Workflows can be placed and allowing to detect violations and bottlenecks.
An extension of the planning of the scheduling engine will allow more than just placing Workflows on Resources, but actually searching groups of Resources for a time slot of when to place tasks. This will allow to use capacity constraints to plan and schedule workflows using different algorithms, and respecting calendars etc.
Further time will be spent on giving Strolch it's own UI. Currently the idea is to use Google's Polymer to implement the UI, thus creating reusable widgets that can be used in projects.
## Take it for a spin
So, now the important part is for new users to start using Strolch for their own projects. Go ahead, check out the Downloads page for the latest release and then checkout the two tutorial applications to get yourself up to speed!
Don't hesitate to send us feedback or questions, we will be delighted to help you get your Strolch-based application up and running, or provide feedback to your concerns!
## Developers
Robert von Burg
Reto Breitenmoser
Dr. Martin Smock
*Currently Transactional mode is missing concrete implementation for querying for the XML persistence

View File

@ -0,0 +1,22 @@
---
title: 'Release 1.0.0-RC2'
description: 'Scratch that RC1, here is the brand new 1.0.0-RC2 which can be downloaded on the download page.'
weight: -2
date: 2014-08-22T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Release 1.0.0-RC2
Scratch that RC1, here is the brand new 1.0.0-RC2 which can be downloaded on the
download page.
-------
So, as expected there were a few bugs, for instance the Strolch tutorial apps
didn't start, so now i fixed those and released an RC2. Go get it and give it a
try!

View File

@ -0,0 +1,46 @@
---
title: 'DB Initialization: Release 1.0.0-RC3'
description: 'Important feature Database Initialization added: Release of 1.0.0-RC3 which can be downloaded on the download page.'
weight: -3
date: 2014-08-24T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## DB Initialization: Release 1.0.0-RC3
Important feature Database Initialization added: Release of 1.0.0-RC3 which can
be downloaded on the download page.
-------
When living _continuous integration_ and _continuous delivery_, it is vital that
things like database migrations and initialization are performed in a
controlled, but automatic way.
A Strolch-based application is using the PostgreSQL persistence layer. The
implementation understands the concepts of migration, and validating the
database schema, but currently a mechanism to automatically initialize the
database with a minimal set of data was missing.
Migrating a database for Strolch is mostly a one time thing. The object model in
Strolch is quite static, so there is seldom a need to migrate the database.
Domain specific changes, i.e. new Resources, or adding Parameters to Resources,
is not a schema change. Thus, instead of going the way other frameworks go, e.g.
Ruby on Rails, we built the data initialization right into the
`PersistenceHandler`.
Now if the PostgreSQL PersistenceHandler creates the schema, then it might also
initialize the minimal set of data. For this to work, the PersistenceHandler
checks if the flags `allowSchemaCreation`, `allowSchemaDrop` and
`allowDbInitOnSchemaCreate`. If those flags are enabled, and the schema was
created during initialization, then the database is also initialized with the
contents of the XML file configured under key `dataStoreFile` of the relevant
`Realm`.
The database initialization is done as a system user action which must have the
name `db_initializer`. This is another fail-safe, so that on a production system,
this user can simply be deleted.
So, Strolch 1.0.0-RC3 is out the door, go ahead and [try it out](/download).

View File

@ -0,0 +1,38 @@
---
title: 'DurationParameter and other minor changes: Release 1.0.0-RC4'
description: 'New DurationParameter and additional minor changes: Release of 1.0.0-RC4 which can be downloaded on the download page.'
weight: -4
date: 2014-10-09T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## DurationParameter and other minor changes: Release 1.0.0-RC4
New `DurationParameter` and additional minor changes: Release of 1.0.0-RC4 which
can be downloaded on the [download page](/download).
-------
While implementing a use case in a Strolch based application it was detected
that an essential parameter type was missing, the `DurationParameter`. This
parameter currently stores the value as a long in memory and serializes to
[ISO8601](http://en.wikipedia.org/wiki/ISO_8601#Durations "{target='_blank'}").
As soon as we move Strolch to Java8, we will change this to use the
`Period` class in the new Java8 date and time API.
In addition to the new parameter, a couple of other changes were made:
* 32c1785 [Major] Added Session timeout handling
* d55371e [Minor] fixed component version descriptions
* c1cdfbb [Bugfix] added missing cloning of StringSetTimedState in Resources
* 8f50a15 [Major] changed XML format of time value of TimedStates to be ISO8601
* 5fbbe50 [Bugfix] fix NPE when cloning Resources with no state vars
* b77f4b2 [New] added TimeVariable.clear()-method
* Updated sub-module ch.eitchnet.utils to 906d24d
* Updated sub-module ch.eitchnet.privilege to aa16887
So, Strolch 1.0.0-RC4 is out the door, go ahead and [try it out](/download).

View File

@ -0,0 +1,47 @@
---
title: 'Strolch Release 1.0.0'
description: 'Finally Version 1.0.0 of Strolch has been released and can be downloaded immediately.'
weight: -5
date: 2015-03-31T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Strolch Release 1.0.0
Finally Version 1.0.0 of Strolch has been released and can be [downloaded](/download) immediately.
-------
Before 1.0.0 could be released, some major changes were decided, all driven by
the first big project using Strolch as its underlying stack. Those changes were
minor, and really major, but should make Strolch better and was important for
the first release.
Here is a list of the most interesting changes:
* Java 8 - Strolch was ported to Java 8. This gives a lot of cool features: The
stream API, lambdas, the new time API, etc.
* TX refactoring: Strolch transactions are instances of `Closeable` so that they
are closed using a try-with-resource block in Java7. The change that was
required was to not auto commit. Now a TX is read-only and one has to set the
auto commit as the last statement. See [this](https://github.com/strolch-li/strolch/commit/46ccb921dfa94f140cbaa3f459c2e434c913d720) commit for more information.
* Added a `tx.flush()` to allow an implementation to flush part of a transaction,
this feature is vital to perform parts of a transaction before deciding if the
TX should be committed.
* Fixed the issue where data store mode `CACHED` performed `TRANSACTIONAL` queries,
instead of staying in-memory.
* `ParameterSelection.stringListSelection()` uses a `StringMatchMode` instead of
just `equals()`
* `ParameterSelection.dateRangeSelection()` uses a `DateRange` instead of just
`equals()`
* Added the `MigrationsHandler` to use to perform code migrations of production
data bases where data shouldn't go lost.
* And many more...
Strolch 1.1.0 is already in development and can also be downloaded from the
download page. Here you can see the current change list
on [GitHub](https://github.com/strolch-li/strolch/compare/1.0.0...develop). For
instance heavy work has been done to implement privilege management by adding a
REST API. Looking forward to a wonderful next Strolch release.

View File

@ -0,0 +1,30 @@
---
title: 'Strolch Documentation'
description: 'Any good software has some decent documentation explaining concepts, best practices and gives examples.'
weight: -6
date: 2015-04-06T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Strolch Documentation
Any good software has some decent documentation explaining concepts, best
practices and gives examples.
-------
So this post is to announce that there is now a new page on Strolch's website
with a bit of documentation. This first documentation explains the Strolch
runtime and some of the do and don't in Strolch code.
Bear with us, writing documentation takes time and can be outdated quickly, so
we will make an effort to keep everything up to date and add more documentation,
but this is a start.
So go ahead and read the [documentation](/documentation) , and if you haven't already, also read
the rest of the website which should give some more insight into the [what](/), [why](/history)
and [how](/api) of Strolch.

View File

@ -0,0 +1,44 @@
---
title: 'Activities: Beginning of the planning engine'
description: 'The ground work of the Strolch planning engine has been laid.'
weight: -7
date: 2015-07-08T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Activities: Beginning of the planning engine
The ground work of the Strolch planning engine has been laid.
-------
One of the core ideas in building Strolch was to create a planning engine. The
planning engine would work in combination of `Order` objects representing customer
orders, `Resource` objects representing machines, human resources, etc., and
`Activity`/`Action` hierarchies defining a workflow.
With the latest couple of commits to Strolch we have now added Activities and a
basic planning of Actions onto Resources. Activities have an ordered list of
`IActivityElement` which allows creating an arbitrary deep tree structure of
Activity and Action elements.
Action objects have a list of `IValueChange` objects which define the start, end
and further value changes over time on a referenced Resource. Thus planning an
Activity is done by iterating the Activity hierarchy and for every Action
selecting a relevant Resource and then then applying the changes of the Action
on to the referenced `TimeState` on the Resource.
This implementation is currently very simple as it ignores all constraints which
a Resource might have. In further development we shall implement a `Violation`
model so that UIs can be built to visualize the over-use of Resources.
In even further steps we would then start implementing algorithms to not just
apply the changes onto a Resource, but to actually search the Resource for time
slots when the value changes would not violate any constraints applied to the
resource.
We are very much looking forward to these new features. Stay tuned for your
updates - even though they do take their time to arrive =).

View File

@ -0,0 +1,68 @@
---
title: 'Strolch Update'
description: 'Long due update on Strolch development.'
weight: -8
date: 2016-04-09T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Strolch Update
Long due update on Strolch development.
-------
Although we have been rather quiet in the last couple of months, anyone viewing
Strolch's commit log, will see that we certainly didn't halt Strolch
development.
We have been hard at work, using Strolch in projects, which required many new
features and fixes. The commit log shows as of today over 180 commits since the
release tag 1.0.0.
Some of the most exciting changes are:
* REST API to query model, incl. privilege management.
* JSON marshalling of all elements.
* Added `Policies`
* Added persisting of user sessions.
* New JavaScript based UI to view Strolch's model. This is an initial version
and more UI elements and functions will follow.
* Basic planning engine functionality.
Further new features and changes are:
* Implemented a REST API to the privilege management - Now users can be added,
changed, etc. via call to the appropriate URL under `../strolch/privilege/*`.
* Implemented a REST API to query the user sessions. Incl. invalidating sessions
to forcefully logout users.
* Implemented a REST API to query `Audits`.
* Implemented REST API to query `Orders`, `Resources` and `Activities`/`Actions`
* Implemented REST API to update `Resources` and `Orders` from XML
* REST API to authenticate now adds a cookie, so authorization is much simpler.
* Added convenience methods in `Service` and `Command` to easily perform system user
actions.
* Added audits for login/logout of users.
* Added audits for changes to privilege management.
* PostgreSQL persistence layer now
uses [HikariCP](https://github.com/brettwooldridge/HikariCP "{target='_blank'}")
for connection pooling.
* Implemented a performance test project
* Added new Parameters of type `IntegerList`, `FloatList` and `LongList`.
* Added feature to ignore a realm on DB init.
* Implemented core planning functionality.
* Added `strolch_minimal` and `strolch_minimal_rest` projects to easily get started.
* Query API now has built in ordering.
* Added `Policy` to all root elements.
* Added new planning web app project. This is a test application for demoing the
planning engine functionality of Strolch.
* Adding the persisting and reloading of user sessions, so that a new start of
Strolch does not logout users.
* Implemented to JSON visitors for all root elements.
So, although we've been rather quiet on the blog and on social media, we have
not been quiet in Strolch's development. We are planning to release version
1.1.0 soon, so stay tuned!

View File

@ -0,0 +1,26 @@
---
title: 'Release 1.2.0'
description: 'Release of Strolch 1.2.0'
weight: -9
date: 2016-07-04T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Release 1.2.0
Release of Strolch 1.2.0
-------
A few months ago we informed of the soon to be released version 1.1.0. Well, we
decided to jump to 1.2.0 because we did some refactorings. All the eitchnet
projects have been melted into Strolch and thus now it's all one nice package.
This will result in simpler development and less constraints on APIs between the
two projects.
Other than that, not much changed, but we are continually working on Strolch, so
go grab your latest copy and have fun coding!

View File

@ -0,0 +1,34 @@
---
title: 'Versioning of objects'
description: 'Opt-In versioning of objects'
weight: -10
date: 2016-08-08T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Versioning of objects
Opt-In versioning of objects
-------
A major new feature has landed in Strolch. Now, using opt-in, it is possible to
have all changes to the object model be versioned. This means that any change to
`Order`, `Resource` or `Activity` is automatically versioned and one can then revert
to this version later on.
This will make it far easier to implement undo operations in applications since
it is an inherent part of the lifecycle of objects in Strolch.
Since Strolch is supposed to be used also in small footprint hardware, this
option is opt-in.
A side affect of this new feature is that we have for the time being not ported
the XML persistence layer. If this is required, then someone drop us a note and
we'll check on it.
So now go ahead and add `<enableVersioning>true</enableVersioning>` to your Realm
so that versioning is enabled.

View File

@ -0,0 +1,40 @@
---
title: 'Strolch now on Maven Central'
description: 'Release Version 1.3.0 released and deployed to Maven Central'
weight: -11
date: 2016-09-22T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Strolch now on Maven Central
Release Version 1.3.0 released and deployed to Maven Central
-------
We have released a new version of Strolch so that you can now go and use the the
latest features in Strolch.
Further we have now deployed Strolch to Maven Central, so it is easier than ever
to use Strolch in your projects. No need to download first or use a special
repository - just define the dependencies as you would any other dependency.
Some of the new features:
* Marshallers for JSON
* Versioning built into Strolch
* Implemented password reset API for Privilege
* New Component MailHandler
* New ToFlatJsonVisitor for simple marshalling in REST APIs
* Added CRUD Commands and Services for Activities
* Further additional bugfixes
Strolch has also been moved to
another [organisation](https://github.com/strolch-li/strolch) on GitHub, so if
you're compiling Strolch from source, please update your GIT remote
configurations.
Have fun using the latest and greatest version of Strolch!

View File

@ -0,0 +1,87 @@
---
title: 'Wow, the many changes!'
description: 'So many changes, and so long no update - not good!'
weight: -12
date: 2017-03-21T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Wow, the many changes!
So many changes, and so long no update - not good!
-------
Oh boy, have we forgotten to update you all on the latest awesome features in
Strolch! There are
over [123 commits](https://github.com/strolch-li/strolch/compare/1.3.0...develop)
since the last tag 1.3.0, so that alone merits a new blog post.
Currently the latest tag is 1.5.5, but this version is actually already quite
old, as it was created on 31. January 2017 and there are 53 new commits ahead of
the tag.
Enough of all the commits, lets get to the new features:
* Added new generic report creator
* Added Activity.TimeOrdering and updated Model XSD
* Implemented State Model on Activity/Actions
* Implemented execution of Activities
* Implemented EventBasedExecutionHandler
* Added StrolchXmlParser to quickly parse from a file
* Add Activity.remove(String) to remove an element
* Refactored LockHandler to use Locator
* Added Activity.getActionsWithState(State)
* Moved *ToFlat and *FromFlat Json Visitors to strolch model
* Added StrolchElementQuery.internal()
* Added Parameter.clearValue() and list parameters use , as sep
* Json Tags are now in Tags.Json and are drinking camel-case
* Moved PrivilegeAddUserService to command, added tests
* Lots of JavaDoc updates
* Refactored code for REST Inspector to use gson
* Added inspector REST api for activities
* Inspector now has offset/limit for queries
* Added new StringMapArgument for StrolchServices
* Added missing activity observer calls in AbstractTransaction
* Added StringMapResult to use as a ServiceResult
* Removed many visitors and implemented proper visitor pattern...
* Don't log stack trace if certificate does not exist
* SmtpMailer now understands whitelists for override
* Fixed locator finding for Activity and Action
* Fixed undo logic for general commands
To summarize, **execution** and **reporting** are the two new features that make
Strolch really awesome! We use execution to perform a number of actions on a
remote device connected to a Strolch agent through WebSockets. This allows
serial and parallel execution of actions and of course locking of concurrently
used resources.
In an enterprise world reports can never be missed, so we needed an API to
create reports. Of course that API was created in a way that all things are done
in Strolch: generically. Thus a report is created as a Resource, defining the
report object, columns and any relevant joins.
And one of the really cool things is that we have started with a UI for Strolch.
There is now an [Inspector](https://github.com/strolch-li/strolch-wc-inspector)
with which the entire data model of a running agent can be seen. This inspector
is built using Polymer and WebComponents and thus can be easily embedded in your
application.
To facilitate the authentication of a user for the inspector,
an [authentication component](https://github.com/strolch-li/strolch-wc-auth) was
created as well. And of course i18n can't be forgotten, so there is a component
for [that](https://github.com/strolch-li/strolch-wc-localize-behavior) too.
To simplify tasks in a web project, there is also
a [StrolchJs](https://github.com/strolch-li/strolchjs) repository where certain
Strolch specific things are handled e.g. querying the authenticated user's roles
etc.
The release of the next Strolch version isn't defined yet, as we are internally
building a project on all these changes and with the release 1.0.0 of that
project (which will be soon), we shall perform the next release of Strolch.
Until then, happy coding!

View File

@ -0,0 +1,26 @@
---
title: 'Strolch Searches'
description: 'Strolch queries are deprecated!'
weight: -13
date: 2017-06-30T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Strolch Searches
Strolch queries are deprecated!
-------
Strolch has had once again many changes, and fixes etc. One important thing to
note is that we have removed support for transactional mode and have rewritten
how models are searched. Thus the search API was born.
Go check out the [Strolch Search](/documentation/searches) documentation and
then go rewrite your searches =)).
Strolch tag [1.6.51](http://search.maven.org/#search%7Cga%7C1%7Cstrolch "{target='_blank'}") has all
those juicy changes!

View File

@ -0,0 +1,23 @@
---
title: 'Strolch Reports'
description: 'Strolch can do reports!'
weight: -14
date: 2017-06-30T00:00:00+01:00
LastModifierDisplayName: "Robert von Burg"
LastModifierEmail: "eitch@eitchnet.ch"
---
## Strolch Reports
Strolch can do reports!
-------
A feature we haven't written about yet is the report API. Strolch has it's own
API to generate reports of data, and since we have a generic model, we use
`Resource` of type `Report` to define them.
Go check out the [documentation](/documentation/reports) and then enjoy using this easy way to deliver the
reports your peers require.

View File

@ -0,0 +1,19 @@
---
title: 'XXXXX'
description: 'XXXXX'
weight: -9999999
draft: true
---
## XXXXX
XXXXX
-------
XXXXX
So, Strolch 1.0.0-RC4 is out the door, go ahead and [try it out](/download).

View File

@ -22,7 +22,7 @@ The book store will have the following features:
* Notify the user when the order is sent
The code to the book can be downloaded
from [GitHub](https://github.com/4treesCH/strolch-bookshop) and will be updated
from [GitHub](https://github.com/strolch-li/strolch-bookshop) and will be updated
as this tutorial is updated.
The tutorial consists of the following parts:

View File

@ -1,7 +1,7 @@
<!doctype html><html lang=en class="js csstransforms3d"><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=generator content="Hugo 0.80.0"><meta name=description content="Strolch is a parameterized framework for use on servers and IoT"><meta name=author content="Strolch"><link rel=icon href=/favicon.ico type=image/ico><title>Development - Strolch</title><link href=/css/nucleus.css?1626095200 rel=stylesheet><link href=/css/fontawesome-all.min.css?1626095200 rel=stylesheet><link href=/css/hybrid.css?1626095200 rel=stylesheet><link href=/css/featherlight.min.css?1626095200 rel=stylesheet><link href=/css/perfect-scrollbar.min.css?1626095200 rel=stylesheet><link href=/css/auto-complete.css?1626095200 rel=stylesheet><link href=/css/atom-one-dark-reasonable.css?1626095200 rel=stylesheet><link href=/css/theme.css?1626095200 rel=stylesheet><link href=/css/hugo-theme.css?1626095200 rel=stylesheet><link href=/css/theme-green.css?1626095200 rel=stylesheet><script src=/js/jquery-3.3.1.min.js?1626095200></script><style>:root #header+#content>#left>#rlblock_left{display:none!important}</style></head><body data-url=/development/><nav id=sidebar><div id=header-wrapper><div id=header><a id=logo href=/><img src=/logo.png></a></div><div class=searchbox><label for=search-by><i class="fas fa-search"></i></label><input data-search-input id=search-by type=search placeholder=Search...>
<span data-search-clear><i class="fas fa-times"></i></span></div><script type=text/javascript src=/js/lunr.min.js?1626095200></script><script type=text/javascript src=/js/auto-complete.js?1626095200></script><script type=text/javascript>var baseurl="https:\/\/strolch.li\/";</script><script type=text/javascript src=/js/search.js?1626095200></script></div><section id=homelinks><ul><li><a class=padding href=/><i class="fas fa-home"></i>Home</a></li></ul></section><div class=highlightable><ul class=topics><li data-nav-id=/api/ title=API class=dd-item><a href=/api/>API</a></li><li data-nav-id=/history/ title=History class=dd-item><a href=/history/>History</a></li><li data-nav-id=/documentation/ title=Documentation class=dd-item><a href=/documentation/>Documentation</a><ul><li data-nav-id=/documentation/architecture/ title=Architecture class=dd-item><a href=/documentation/architecture/>Architecture</a></li><li data-nav-id=/documentation/model/ title=Model class=dd-item><a href=/documentation/model/>Model</a></li><li data-nav-id=/documentation/do-and-donts/ title="Do and Don't" class=dd-item><a href=/documentation/do-and-donts/>Do and Don't</a></li><li data-nav-id=/documentation/runtime-configuration/ title="Runtime Configuration" class=dd-item><a href=/documentation/runtime-configuration/>Runtime Configuration</a></li><li data-nav-id=/documentation/realms/ title=Realms class=dd-item><a href=/documentation/realms/>Realms</a></li><li data-nav-id=/documentation/components/ title=Components class=dd-item><a href=/documentation/components/>Components</a></li><li data-nav-id=/documentation/services-and-commands/ title="Services and Commands" class=dd-item><a href=/documentation/services-and-commands/>Services and Commands</a></li><li data-nav-id=/documentation/searches/ title=Searches class=dd-item><a href=/documentation/searches/>Searches</a></li><li data-nav-id=/documentation/queries/ title=Queries class=dd-item><a href=/documentation/queries/>Queries</a></li><li data-nav-id=/documentation/transactions/ title=Transactions class=dd-item><a href=/documentation/transactions/>Transactions</a></li><li data-nav-id=/documentation/policies/ title=Policies class=dd-item><a href=/documentation/policies/>Policies</a></li><li data-nav-id=/documentation/observers/ title=Observers class=dd-item><a href=/documentation/observers/>Observers</a></li><li data-nav-id=/documentation/versioning/ title=Versioning class=dd-item><a href=/documentation/versioning/>Versioning</a></li><li data-nav-id=/documentation/reports/ title=Reports class=dd-item><a href=/documentation/reports/>Reports</a></li><li data-nav-id=/documentation/priviles/ title=Privileges class=dd-item><a href=/documentation/priviles/>Privileges</a></li></ul></li><li data-nav-id=/plc/ title=PLC class=dd-item><a href=/plc/>PLC</a><ul><li data-nav-id=/plc/architecture/ title=Architecture class=dd-item><a href=/plc/architecture/>Architecture</a></li><li data-nav-id=/plc/example-set-up/ title="Example Set-Up" class=dd-item><a href=/plc/example-set-up/>Example Set-Up</a></li></ul></li><li data-nav-id=/tutorial/ title=Tutorial class=dd-item><a href=/tutorial/>Tutorial</a><ul><li data-nav-id=/tutorial/configuration/ title=Configuration class=dd-item><a href=/tutorial/configuration/>Configuration</a></li><li data-nav-id=/tutorial/model/ title=Model class=dd-item><a href=/tutorial/model/>Model</a></li><li data-nav-id=/tutorial/crud-book/ title="CRUD Book" class=dd-item><a href=/tutorial/crud-book/>CRUD Book</a></li></ul></li><li data-nav-id=/download/ title=Download class=dd-item><a href=/download/>Download</a></li><li data-nav-id=/development/ title=Development class="dd-item
parent
active"><a href=/development/>Development</a></li></ul><section id=shortcuts><h3>More</h3><ul><li><a class=padding href=https://strolch.li/tags><i class="fas fa-tags"></i>Tags</a></li><li><a class=padding href=https://github.com/strolch-li><i class="fab fa-github"></i>GitHub project</a></li></ul></section><section id=footer><p>Built with <a href=https://github.com/matcornic/hugo-theme-learn><i class="fas fa-heart"></i></a>from <a href=https://getgrav.org>Grav</a> and <a href=https://gohugo.io/>Hugo</a></p></section></div></nav><section id=body><div id=overlay></div><div class="padding highlightable"><div><div id=top-bar><div id=top-github-link><a class=github-link title="Edit this page" href=https://github.com/strolch-li/strolch-website/tree/develop/content/development/_index.md target=blank><i class="fas fa-code-branch"></i><span id=top-github-link-text>Edit this page</span></a></div><div id=breadcrumbs itemscope itemtype=http://data-vocabulary.org/Breadcrumb><span id=sidebar-toggle-span><a href=# id=sidebar-toggle data-sidebar-toggle><i class="fas fa-bars"></i></a></span><span id=toc-menu><i class="fas fa-list-alt"></i></span><span class=links><a href=/>Strolch Overview</a> > Development</span></div><div class=progress><div class=wrapper><nav id=TableOfContents><ul><li><a href=#prerequisites>Prerequisites</a></li><li><a href=#building-strolch>Building Strolch</a></li><li><a href=#creating-a-strolch-app>Creating a Strolch App</a><ul><li><a href=#creating-a-java-strolch-web-app>Creating a Java Strolch Web App</a></li><li><a href=#creating-a-simple-java-strolch-app>Creating a simple Java Strolch App</a></li></ul></li><li><a href=#tools-used>Tools used</a></li></ul></nav></div></div></div></div><div id=head-tags></div><div id=body-inner><h1>Development</h1><h2 id=prerequisites>Prerequisites</h2><p>To start developing Strolch you need an installed:</p><ul><li>Java JDK 11</li><li>Apache Maven 3.x</li></ul><h2 id=building-strolch>Building Strolch</h2><p>Setting up Strolch is just a few lines:</p><div class=highlight><pre style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>git clone https://github.com/4treesCH/strolch.git
active"><a href=/development/>Development</a></li></ul><section id=shortcuts><h3>More</h3><ul><li><a class=padding href=https://strolch.li/tags><i class="fas fa-tags"></i>Tags</a></li><li><a class=padding href=https://github.com/strolch-li><i class="fab fa-github"></i>GitHub project</a></li></ul></section><section id=footer><p>Built with <a href=https://github.com/matcornic/hugo-theme-learn><i class="fas fa-heart"></i></a>from <a href=https://getgrav.org>Grav</a> and <a href=https://gohugo.io/>Hugo</a></p></section></div></nav><section id=body><div id=overlay></div><div class="padding highlightable"><div><div id=top-bar><div id=top-github-link><a class=github-link title="Edit this page" href=https://github.com/strolch-li/strolch-website/tree/develop/content/development/_index.md target=blank><i class="fas fa-code-branch"></i><span id=top-github-link-text>Edit this page</span></a></div><div id=breadcrumbs itemscope itemtype=http://data-vocabulary.org/Breadcrumb><span id=sidebar-toggle-span><a href=# id=sidebar-toggle data-sidebar-toggle><i class="fas fa-bars"></i></a></span><span id=toc-menu><i class="fas fa-list-alt"></i></span><span class=links><a href=/>Strolch Overview</a> > Development</span></div><div class=progress><div class=wrapper><nav id=TableOfContents><ul><li><a href=#prerequisites>Prerequisites</a></li><li><a href=#building-strolch>Building Strolch</a></li><li><a href=#creating-a-strolch-app>Creating a Strolch App</a><ul><li><a href=#creating-a-java-strolch-web-app>Creating a Java Strolch Web App</a></li><li><a href=#creating-a-simple-java-strolch-app>Creating a simple Java Strolch App</a></li></ul></li><li><a href=#tools-used>Tools used</a></li></ul></nav></div></div></div></div><div id=head-tags></div><div id=body-inner><h1>Development</h1><h2 id=prerequisites>Prerequisites</h2><p>To start developing Strolch you need an installed:</p><ul><li>Java JDK 11</li><li>Apache Maven 3.x</li></ul><h2 id=building-strolch>Building Strolch</h2><p>Setting up Strolch is just a few lines:</p><div class=highlight><pre style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>git clone https://github.com/strolch-li/strolch.git
cd strolch
mvn clean install -DskipTests
</code></pre></div><div class="notices tip"><p>Note: To run the tests you will need to configure the PostgreSQL Databases. See

View File

@ -185,7 +185,7 @@ listing will perform simple operations:</p><div class=highlight><pre style=color
<span style=color:#f92672>.</span><span style=color:#a6e22e>where</span><span style=color:#f92672>(</span>ExpressionsSupport<span style=color:#f92672>.</span><span style=color:#a6e22e>relationParam</span><span style=color:#f92672>(</span><span style=color:#e6db74>&#34;customer&#34;</span><span style=color:#f92672>).</span><span style=color:#a6e22e>isEqualTo</span><span style=color:#f92672>(</span>customerId<span style=color:#f92672>)).</span><span style=color:#a6e22e>search</span><span style=color:#f92672>(</span>tx<span style=color:#f92672>).</span><span style=color:#a6e22e>toList</span><span style=color:#f92672>();</span>
assertEquals<span style=color:#f92672>(</span>1<span style=color:#f92672>,</span> orders<span style=color:#f92672>.</span><span style=color:#a6e22e>size</span><span style=color:#f92672>());</span>
<span style=color:#f92672>}</span>
</code></pre></div><div class="notices tip"><p>Note: Checkout <a href=https://github.com/4treesCH/strolch/blob/develop/li.strolch.service/src/test/resources/transienttest/data/example-model.xml target=_blank>example-model.xml</a> and <a href=https://github.com/4treesCH/strolch/blob/develop/li.strolch.service/src/test/java/li/strolch/service/SimpleModelTest.java target=_blank>SimpleModelTest.java</a> for these examples.</p></div><div class="notices tip"><p>There is an XML Schema which defines the model in XML: <a href=/assets/xsd/StrolchModel-1.6.xsd target=_blank>StrolchModel-1.6.xsd</a></p></div><p>Here is an example of all the possible elements in Strolch:</p><div class=highlight><pre style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=color:#f92672>&lt;StrolchModel</span> <span style=color:#a6e22e>xmlns:xsi=</span><span style=color:#e6db74>&#34;http://www.w3.org/2001/XMLSchema-instance&#34;</span>
</code></pre></div><div class="notices tip"><p>Note: Checkout <a href=https://github.com/strolch-li/strolch/blob/develop/li.strolch.service/src/test/resources/transienttest/data/example-model.xml target=_blank>example-model.xml</a> and <a href=https://github.com/strolch-li/strolch/blob/develop/li.strolch.service/src/test/java/li/strolch/service/SimpleModelTest.java target=_blank>SimpleModelTest.java</a> for these examples.</p></div><div class="notices tip"><p>There is an XML Schema which defines the model in XML: <a href=/assets/xsd/StrolchModel-1.6.xsd target=_blank>StrolchModel-1.6.xsd</a></p></div><p>Here is an example of all the possible elements in Strolch:</p><div class=highlight><pre style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=color:#f92672>&lt;StrolchModel</span> <span style=color:#a6e22e>xmlns:xsi=</span><span style=color:#e6db74>&#34;http://www.w3.org/2001/XMLSchema-instance&#34;</span>
<span style=color:#a6e22e>xmlns=</span><span style=color:#e6db74>&#34;https://strolch.li/xsd/StrolchModel-1.6.xsd&#34;</span>
<span style=color:#a6e22e>xsi:schemaLocation=</span><span style=color:#e6db74>&#34;https://strolch.li/xsd/StrolchModel-1.6.xsd StrolchModel-1.6.xsd&#34;</span><span style=color:#f92672>&gt;</span>

View File

@ -17,11 +17,11 @@ clauses. Either</p><ul><li>override the <code>define()</code>-method in your sub
calling the <code>where()</code> method, or</li><li>define special methods on the class e.g. <code>byColor()</code> which also calls the
<code>where()</code>-method to add a search expression, or</li><li>directly call the <code>where()</code>-method after instantiating a search.</li></ul><p>When extending the class, then the search expressions are available as methods
on the super class, otherwise you can statically import them from
<a href=https://github.com/4treesCH/strolch/blob/develop/li.strolch.agent/src/main/java/li/strolch/search/ExpressionsSupport.java>ExpressionsSupport</a>
<a href=https://github.com/strolch-li/strolch/blob/develop/li.strolch.agent/src/main/java/li/strolch/search/ExpressionsSupport.java>ExpressionsSupport</a>
.</p><p>And of course a where clause needs operators, which are called search
predicates. Just as search expressions are available in sub classes, so are
search predicates and can also be statically imported through
<a href=https://github.com/4treesCH/strolch/blob/develop/li.strolch.agent/src/main/java/li/strolch/search/PredicatesSupport.java>PredicatesSupport</a>
<a href=https://github.com/strolch-li/strolch/blob/develop/li.strolch.agent/src/main/java/li/strolch/search/PredicatesSupport.java>PredicatesSupport</a>
.</p><p>Examples of search expressions with search predicates follow:</p><div class=highlight><pre style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java>ResourceSearch search<span style=color:#f92672>=</span><span style=color:#66d9ef>new</span> ResourceSearch<span style=color:#f92672>();</span>
<span style=color:#75715e>// predicate either as parameter, or chained
@ -42,7 +42,7 @@ search<span style=color:#f92672>.</span><span style=color:#a6e22e>where</span><s
parameter to the expression.</p><p>In addition to using predefined search search expressions, one can also just
pass a lambda expression which performs a custom filter:</p><div class=highlight><pre style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java>personSearch<span style=color:#f92672>.</span><span style=color:#a6e22e>where</span><span style=color:#f92672>(</span>person <span style=color:#f92672>-&gt;</span> person<span style=color:#f92672>.</span><span style=color:#a6e22e>getName</span><span style=color:#f92672>().</span><span style=color:#a6e22e>length</span><span style=color:#f92672>()</span> <span style=color:#f92672>==</span> 3<span style=color:#f92672>);</span>
</code></pre></div><p>See
the <a href=https://github.com/4treesCH/strolch/blob/develop/li.strolch.agent/src/test/java/li/strolch/search/StrolchSearchTest.java>StrolchSearchTest</a>
the <a href=https://github.com/strolch-li/strolch/blob/develop/li.strolch.agent/src/test/java/li/strolch/search/StrolchSearchTest.java>StrolchSearchTest</a>
for many ways in which you can implement tests.</p><div class="notices tip"><p>Note that strolch searches requires privileges, thus when you
use a strolch search, add it to the role of the user in <code>PrivilegeRoles.xml</code>:</p></div><div class=highlight><pre style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml>
<span style=color:#f92672>&lt;Privilege</span> <span style=color:#a6e22e>name=</span><span style=color:#e6db74>&#34;li.strolch.search.StrolchSearch&#34;</span> <span style=color:#a6e22e>policy=</span><span style=color:#e6db74>&#34;DefaultPrivilege&#34;</span><span style=color:#f92672>&gt;</span>

File diff suppressed because one or more lines are too long