groovy-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alain Stalder <>
Subject [CASE STORY] Jexler powered by Grengine
Date Tue, 28 Feb 2017 09:44:45 GMT
Jexler is a container for running Groovy scripts,
"great for prototyping and useful for automating".

It consists of a relatively basic web GUI; screenshot:

In the file system, the structure is also very simple;
all *.groovy files in the WEB-INF/jexlers directory
are part of the container:

   - Jexler1.groovy
   - Jexler2.groovy
   - Util1.groovy
   - Config.groovy
   - ...

Scripts usually register events they would like to receive
at startup and are then idle until they get an event.

Until recently, I simply used a GroovyClassLoader, in which
I added the jexlers directory to the classpath and did this
for each jexler script individually.

This had the advantage that the container scripts could be
"dirty", only the ones that the specific jexler really needed
where compiled and loaded when needed.

Since I am also the author of Grengine, I had often imagined
to switch to Grengine, but usually dismissed the thought again,
considering Grengine more appropriate for a more static setup.

But last week I still gave it a try and the result was quite a
bit more satisfying than I had expected - not completely black
and white a clear winner, but in this specific use case I will
stick with it.

The new setup using Grengine distinguishes jexler scripts that
are run from utility scripts/config/etc. scripts (by a
specific comment that must be present in the script file to
make it a "jexler" script file).

Utility scripts are part of the Grengine engine code layers,
they are always compiled together with full dependencies.
Jexler scripts run each in their own classloader on top of the
class loader for the utility scripts.

So, if a jexler script does not compile, this has only the effect
that it cannot be started, no impact on other jexler scripts and
also not on the utility scripts.

If utility scripts are modified such they do not compile any more,
this does not impact already running jexlers nor even prevent to
stop and restart them, because the Grengine automatically keeps
the last known good state if compilation fails.

I have been operating jexler since about 2014 and am quite happy
in practice with the new architecture using Grengine - makes it
easier to maintain the container scripts and I can still use it
quite freely to prototype things etc.


(To try it out, either get
or checkout, run 'gradle test'
and visit http://localhost:9080/)



View raw message