The CDM library itself is devided into several layers, as to provide a seperation of concerns.
Domain objects (also called business objects sometimes) are directly taken as POJOs from the CommonDataModel. The logic inherent to the domain objects are restricted to their own object graph, i.e. their own properties and related objects. But not unrelated objects available through DAOs only. Typical logic includes validation and calculations.
We have implemented java.bean propertyChangeSupport methods for the entire cdm domain classes to send change events to registered listeners. The TaxonomicEditor makes use of these through a data binding framework. See wiki:JavaResources#DataBinding for more.
For data exchange purposes, serialization/deserialization of the domain objects of the cdmlib-model to/from XML format is supported via the [https://jaxb.dev.java.net/ JAXB] framework.
we use Hibernate for persistence. We run unit and integration tests for MySQL, Hypersonic, Postgres and MS SQL Server on a regular basis.