Fork me on GitHub


  • 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.