Features

An easy-to-use transparent persistence layer over a JDBC relational database. The programmer can define table rows to be extensible Java objects, without having to write any more code than she would for an equivalent non-persistent object. Implicit permissions checks on accesses to persistent objects (table rows), based on a flexible and efficient user/group/capability authentication system. A self-trimming, (LRU/1), cache of persistent objects such that available memory is efficiently used but reclaimed when needed by the JVM. Thsi ensures that databse accesses are reduced to a minimum. Support for transactions, either explicitly or transparently, with a simple default pattern appropriate for servicing typical HTTP requests; and behind that, of course, `connection pooling'. Transparent (and transaction-safe) cacheing of rows from the most intensively used tables, such as lookups or localisation phrases. Convenient and flexible templating of persistent objects. CSV utilities to initialise a database from CSV files. A comprehensive administration system, supporting the following operations on any Melati database without requiring configuration: list records in a table matching a template add/edit/delete records list records linked to (or linking to) a record change the capabilities required to read/write a record add/delete tables and fields upload files cascading deletes Javascript form validation Javascript client side tree browsing

Code for a generic Messageboard System, a generic Shopping Trolley and a CMS are also available.

For a detailed exposition of Melati see William's post to the OCAML list.