How do I write an adapter to support a database that is not yet supported?

You need to implement a custom DbAdapter. Most likely you won't have to do it from scratch and can extend a JdbcAdapter or one of the existing db-specific adapters.

If the adapter is for a database that we currently do not support and you are planning to donate it to Cayenne, you can do this first:

  • Open a JIRA issue where all contributed code will go.
  • Subscribe to the developer mailing list and introduce yourself to Cayenne developers.
Implementation procedure is roughly the following:
  • Create a barebone adapter that inherits from JdbcAdapter.
It is a good idea to put all new adapter code in its own Java package, e.g. org.apache.cayenne.dba.mydb, as default resource loading depends on that.
  • Copy types.xml file from org.apache.cayenne.dba package and edit it to map standard JDBC types to the target database native types.
Correct mapping is needed for the Modeler to do schema generation. Technically it is not required for the runtime. However types.xml should still be there.
  • Run existing Cayenne unit tests with the new adapter, analyze the failures and change adapter code accordingly.
  • Repeat the last step until all tests pass.
  • Report success in JIRA and the dev list - one of the committers will integrate your code to Cayenne.