Como escolher qual banco utilizar pela aplicação?

Olá pessoal,

Trabalho no projeto [url="http://www.scadabr.org.br"]ScadaBR[/url] que visa o desenvolvimento de um software [url="http://en.wikipedia.org/wiki/SCADA"]SCADA[/url] brasileiro e open-source.

A aplicação é web e no primeiro deploy, consulta um arquivo de propriedades para saber qual banco de dados usar. Se não acha configurações específicas, usa por padrão o derby. Isso funciona sem problemas, mas eu gostaria de implementar uma funcionalidade de escolha de banco de dados em runtime. Penso que isso funcionaria mais ou menos assim:

1 - o usuário chama a aplicação que lê um arquivo de configurações da conexão com o banco de dados;
2 - nesse arquivo existe um boolean que diz se é a primeira vez que a aplicação é executada;
3 - se esse boolean for true a aplicação chama o configurador de banco de dados e se for false, chama a tela de login;
4 - quando a configuração do banco está completa, a aplicação testa a conexão e depois executa um script de criação das tabelas.

Como a aplicação é open-source, pensei em oferecer suporte para os bancos open-source: MySQL, PostGres, Derby e HSQLDB. E, se não quiser usar qualquer destas opções, permitir que o usuário use o banco que desejar

Em uma segunda etapa, estaria a configuração automatizada de um pool de conexões.

Sei que isso é bastante comum em programas PHP, mas como fazer isso em Java?

De repente o BoneCP é o que você precisa.