Hi everyone,

... I'd like to point your attention to the new command processing
component. For those that didn't see this proposal, please follow these
links for details:

   - Jira: https://issues.apache.org/jira/browse/FINERACT-2169
   - Wiki:
   
https://cwiki.apache.org/confluence/display/FINERACT/FSIP-5%3A+New+command+processing+infrastructure

Viktor and Oleksandr already prepared a ton of REST resource classes to
have proper Java types (instead of the String blobs). This will make
maintaining the OpenAPI descriptor much easier. To be simplify maintenance
from top (REST resource classes) to bottom (business logic services) the
new (type safe) command processing component is needed. Have a look at the
unit tests and the refactoring instructions (work in progress) to see the
impact this will have on developer productivity and being able to remove (a
ton) of boilerplate code related to manual JSON parsing. There will be no
more Google GSON use and everything will be handled by Jackson (mostly)
without adding a single line of code related to JSON de-/serialization.

As I said in a previous email, we'll start to migrate some non-critical
services first (SMS campaign, document management...). We'll adjust things
as needed, but will try hard to keep that component:

   - independent of anything else in the Git repo
   - simple and minimal (takes 5min to read the code)
   - focused on one specific goal: processing commands

So, if you ask how maker-checker will be handled: this was/is baked into
the current command processing infrastructure, but in fact belongs more to
the security domain. I'll draft a different proposal for that... taking
into account that we maybe want to have a more modular security stack. The
services we are targeting now are not affected by this.

Performance: I showed some of you that the new command processing will be
able to handle command execution in 3 performance levels:

   - synchronous (that's how we do things now anyway)
   - asynchronous (with CompletableFuture etc.; should be interesting to
   see with virtual threads enabled)
   - non-blocking using the LMAX disruptor library (just to have another
   completely different approach to the 2 obvious ones)

While the mechanics are already working pretty nicely in the unit tests,
async and non-blocking processing modes will need separate extensive
testing and therefore are out of scope for the current migration effort.
We'll circle back to them later when we are done and/or have some time for
this. One thing that needs to be ensured is that all ThreadLocal variables
are available in those execution contexts (especially async). But again,
that's for another day to keep things simple. The goals for this round now
are:

   - type safety everywhere
   - remove any reference to the API communication protocol (JSON) from the
   business logic services (no more JsonCommand etc.)
   - get rid of manual JSON parsing
   - simple to understand and easy to debug command processing mechanics

So... please checkout the PR at
https://github.com/apache/fineract/pull/4281 and
send your comments (or just leave a -1/0/+1).

Big thank you to Victor Romero and Adam Sagy who reviewed the PR and
already approved it.

Cheers,

Aleks

Reply via email to