BackEnds
Regardless of which backend the programmer uses, the Fénix Framework provides automatic management of bidirectional relations between domain entities modelled in DML (for example, when adding an object to a collection, both ends are updated).
Bundled with Fénix Framework 2.0, there are currently two backend implementations: The Infinispan Direct backend, and the OGM backend. Both backends provide bindings to the underlying storage provided by Infinispan’s cache. However, each backend provides a different mapping between the objects and their key-value representation.
Infinispan Direct backend
The Infinispan Direct backend leverages on the fact that Infinispan’s cache is already build into the application’s memory space, and thus uses very lightweight domain objects. These objects’ attributes and relations to other objects don’t take up any additional memory space. Whenever the value of any attribute or relation is requested, the generated code fetches the value directly from the corresponding cache entry in Infinispan. As such, the objects themselves, are hollow, in the sense that they only contain their primary key attribute.
OGM Backend
The OGM backend relies on Hibernate Core’s engine, stacked with the Hibernate Object/Grid Mapper to do the actual load/store operations from/to Infinispan. As such, the code generation for domain entities creates typical POJOs together with a standard Java Persistence API mapping.
STM-based backends
The first implementations of the Fénix Framework (prior to version 2.0) have no notion of replaceable backend, and support only an STM-based transactional system (using JVSTM). The main development branch supported only data storage on top of MySQL using OJB as data mapper. There was, however, parallel work that supported some NoSQL storage systems (HBase, Berkeley DB, Infinispan) to a limited extent. Namely, on top of NoSQL databases, Fénix Framework only supports a single node, whereas on top of MySQL it can run multiple application servers.
We are currently working to develop and STM-based backend on the new architecture. We plan to provide storage support for at least MySQL and Infinispan.