The Separation of Concerns principle aims at providing systematic means for effective modularization of crosscutting concerns, providing many benefits to software developers. The specific Aspect-Oriented Programming technique offers explicit language support for modularizing application concerns that crosscut the application functional code.
Although, persistence is often described as a classical candidate for aspectization, the existing aspect tools do not seem to be really suitable for developing persistence aspects. In addition, current aspect tools do not offer really dynamic weaving mechanisms, and all of them are dependent of a fixed programming language.
We have identified computational reflection as an appropriate technique to overcome the limitations mentioned. Our nitrO system is a reflective platform that offers non-restrictive computational reflection at runtime. Any application, written in any language, may use Python code to access its (or another one´s) meta-level, achieving the modification of its structure or semantics.
A persistence framework has been codified in Python at the system´s meta-level, offering dynamic persistence features transparently to the user. Taking Java as a sample language, programmers can develop transient applications without any reference to persistence, following the SoC principle. Then, employing any language, the user, the own application, or even another program, could set, unset, and modify, different persistence settings at runtime.
Our current implementation offers dynamic selection of storages, indexing mechanisms and update policies. This choice can be performed programmatically, depending on runtime emerging requirements. Therefore, the persistence system might be programmed to configure itself according to dynamic contexts. It can be also used as a parameter tuning or database research platform.