... just FYI: new command processing has been merged into the develop
branch.

On Fri, Apr 18, 2025 at 12:01 PM Aleksandar Vidakovic <al...@apache.org>
wrote:

> 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