For real 10 years later : RIFE2 is now available up on GitHub

5 views
Skip to first unread message

Geert Bevin

unread,
Oct 31, 2022, 9:33:44 AM10/31/22
to rife-...@googlegroups.com
Hi everyone,

Yup, I sent an announcement about RIFE v2 out in 2013 but never got it to a completion stage.

This time around, I didn’t send out anything until I actually finished a full redesign and rework.

Here’s a little bit of background. I’ve been in charge of software development at Moog Music for 8 years now and this year we’ve made a big push, including going to direct sales for our newly announced Moogerfooger plugins. When looking into the available platforms to do ecommerce for digital products, everything felt clunky with too few customization options and a lot of overhead. We actually honestly tried the most promising one out, trying hard to stay away from the NIH syndrome, but even the non-engineering folks agreed that it was not suitable to go to launch with.

So I eventually decided to look at making our own. I liked what I saw in the Spark Java framework (https://sparkjava.com) but then realized it had not been updated to the latest servlet spec and didn’t run with any of the recent servlet container releases, I moved on with a fork that did. It’s when I got to using a template engine, that I just couldn’t bear it anymore and decided to put efforts in seeing what I could port over from RIFE. Initially I planned on just doing the template engine, I ended up doing most of the framework instead :-)

The project is here:
https://github.com/gbevin/rife2

I released v0.5.0 yesterday on Maven central.

The readme shows some examples of where I'm going with the web engine, it feels very focused with the goals of being as concise as possible, while also leveraging as much of modern Java as possible. There’s still some work remaining on the web engine to fully leverage potentially useful annotations and default injections, but apart from that it’s very functional. We went through our product launch two weeks ago and everything held up perfectly. My team and I will continue to build out our web infrastructure with RIFE2 as the cornerstone, so the project has a driving force again.

Here’s a summary of some of what I did so far:

* re-implemented the template engine using Antlr4 (which now fully supports unicode)
* tightened up the template engine syntax to get rid of as much noise as possible
* moved everything that was full caps to camel case
* removed hierarchical properties infrastructure
* removed map-based central configuration
* I’m punting on continuations for now until I can research project Loom in detail
* completely redesigned web engine without any declaration, using functional interfaces with lambdas but also offering much more functionality when extracting elements into dedicated classes
* introduction of typed routes into the web engine for type-safe linking and connections
* removed the element inheritance feature and in-engine state handling in favor of grouped before and after elements
* state is taken from and passed straight onto the request response instances
* redesigned RifeConfig to be used without XML and with a fluent interface
* moved to Gradle as a build tool
* trimmed the database layer to only include PostgreSQL, Oracle, MySQL, Derby, H2 and HsqlDB
* tested and adapted all the database features to work with the latest versions of these databases
* refactored the datasources definition to be used without XML
* reworked the out-of-container testing framework to use JSoup for parsing out HTML
* redesigned the application initialization to be pure Java
* integrated support for Jetty with a structure that seamlessly can be deployed into a war archive
* redesigned the authentication layer to not use inheritance but before/after elements instead
* removed XML configuration from the authentication layer, introducing a new Java config class
* ported over the scheduler infrastructure
* extracted constraints and validation into a dedicated package and updated the features
* extracted form handling and generation into a dedicate package and updated the features
* introduced the concept of a name selector that can be used to dynamically switch the configuration based on the active environment (for instance different datasources for dev and production)
* updated all the code for modern coding standards, using var for local variables, changing field names to trailing underscores, …
* migrated all the relevant tests to JUnit 5, wrote a bunch more (3611 tests at this point)
* migrated everything in the tools package that was still relevant

There’s quite a bit more, but this is already a lot to read :-)

In the near future, I’ll be spending more time on the authentication layer and the web engine. After that I’ll probably port over the content management framework.

It’s weird but also very fun to be back here after such a long time.

I’m considering moving away from Google Groups, but using GitHub Discussions instead, any thoughts about that?
https://github.com/gbevin/rife2/discussions

I hope some of you are still active or interested, curious to hear what you’ve been up to!

Take care,

Geert Bevin (he/him)
Software Engineering & Product Manager | Moog Music Inc.
Member, Technical Standards Board | MIDI Association
Principle Software Engineer | Roger Linn Design
Founder, Owner & Engineer | Uwyn LLC

Reply all
Reply to author
Forward
0 new messages