Hola:
Efectivamente, todo el tema de compatibilidad que comentas es un problema y no es tan sencillo como yo lo indico (salvo que sea una aplicación no muy compleja).
No entiendo lo que dices de que ORM y JPA están muy orientados a la base de datos elegida. De hecho, una de las grandes ventajas de estos mecanismos es independizarte de la base de datos. Eso sí, hay que tratar de usarlos de una forma genérica que sirva para cualquier base de datos (salvo que se quiera algo muy específico y no quede más remedio). Por ejemplo, en hibernate puedes poner que la forma de generar los id de una tabla sea "native" y vale para cualquier base de datos. Evidentemente, hibernate soporta que le pongas "sequence", pero entonces estas perdiendo esa independencia, mientras que "native" generará automáticamente la "sequence" si la base de datos la soporta, o "auto-increment" o lo que sea.
Tampoco usar SQLs sino que es mejor usar el lenguaje HQL o el del ORM que sea, que hibernate o el ORM que sea se encargará de traducir al dialecto SQL específico de la base de datos.
Aun así, a veces es necesario hacer cosas específicas para cada base de datos (tirggers o crear funciones por ejemplo) y en ese caso tu aplicación sólo soportará aquellas bases de datos para las que se ha pensado. Suelen tener scripts que hacen esas tareas específicas (normalmente de creación de tablas/triggers/procedures) y no se usan para nada en tiempo de ejecución.
No es necesario recompilar nada. La aplicación va con el driver de la base de datos que se elija por defecto (e incluso puede llevar adicionalmente los de las bases de datos más conocidas) y se le dice al usuario que se baje el driver de la base de datos que quiera (un jar) y lo ponga en el classpath (habitualmente un directorio concreto), además de tocar en algún fichero de configuración una propiedad que indica el nombre de la clase del driver (además de usuario, password y database). Una vez hecho esto, sólo tiene que arrancar la aplicación.
sonar es una herramienta para mostrar métricas de código java, viene con apachederby embebido y soporta cuatro base de datos más
http://docs.codehaus.org/display/SONAR/Requirements
Liferay es una especie de portal web que te permite añadir tu propio contenido. Viene por defecto con HSQL, pero permite otras bases de datos
http://www.liferay.com/community/wik...+Configuration Eso sí, lleva sus propios scripts de creación de tablas, supongo que no admitirá todos los tipos.
Se bueno.