Hi Convergence team,
I’m an experienced software architect exploring using Convergence as the collaboration layer for an application I’m building. This application, much like a spreadsheet, will need to support data values that are literal, as well as values that are dependent on other values in the model’s data tree via the evaluation of expressions using an expression language (e.g. like SpEL or JEXL). I was wondering how that might look in Convergence Server? Execution speed and transaction boundaries are important of course.
Looking through the documentation some features that catch my attention are event support and the batch API. With these features I could build what would effectively be a bot client that listens to model element changes and implements the necessary logic to find, calculate, and update dependent values. However, I worry that it would be too slow (transport over the network, even if local, is slower than resident code sitting IN the Convergence Server process) and I’m not sure I’d be able to implement proper transactions with that approach.
If my value dependency graph is non circular and only uses local model values and no external data, I should be able to calculate the entire set of changes generated by one source change and apply all the changes together as an atomic update. Though maybe that’s too idealistic? There is a non-zero unknown cost to calculating dependent values, even if it’s all local, and so trying to keep the original change and all derived changes as a single atomic unit might be a fool’s errand? I wouldn’t want to block writes from other users.
Anyway, what I am imagining is writing some kind of server side plugin that can observe model changes and execute expressions to derive additional update operations for a batch. Is there any facility for custom server side code in Convergence Server that can plug into the model CRUD, or am I thinking about this all wrong?
For reference, I have a mediocre amount of experience around the JVM, Java, and Kotlin (mostly Spring REST APIs) and almost none for Scala specifically.
Any guidance as to whether this use case is a good fit for Convergence would be very welcome.