Dúvida sobre Conexão com Banco: Manter singleton?

Olá.

Eu tenho o seguinte cenário. Eu tenho uma aplicação que roda dentro de uma máquina com recursos limitados (Memória RAM, por exemplo, 256MB). Essa aplicação é constituida de 5 threads que acessam o banco.
Uma thread insere dados no banco (vindos de um servidor através de webServices (jetty)). Outra thread lê o banco atrás dessas informações e enfilera elas. Uma outra thread, que gerencia a aquisição de dados de um equipamento lê a fila, faz troca de dados e grava os resultados no banco. Uma outra Lê os resultados do banco e manda de volta pro servidor (via web service).

Enfim, existem várias threads interagindo com o banco. é um número limitado, e a maioria delas (tirando a de gerência de aquisição de dados) interege com um certo intervalo de tempo (alguns segundos ou até minutos, dependendo da thread).

Atualmente esse sistema está organizado da seguinte forma. duas classes singleton Uma para inserts e updates e uma para queries (selects). Eu to querendo mudar isso, porque está uma bagunça. A classes de inserts e updates passa das 1.500 linhas de código, fora que são 6 ou 7 tabelas. Quero implementar o padrão DAO. Vou manter essa classes de insert e queries, mas ao invés de interagir direto com o banco vão interagir com os DAOS.

Mais um detalhe, esse sistema foi arquitetado em cima de HSQL embarcado (acesso via arquivo) e agora ele vai funcionar com postgresql.

Não tem necessidade no momento, de usar Hibernate, pois não se tem necessidade ou previsão de trocar o banco.

Com tudo isso em mente, vem minha dúvida sobre a conexão com o banco. Nesse cenário o que é melhor forma de fazer a conexão?

Singleton pra conexão? Connection factory, fornecendo uma nova conexão pra cada DAO (tipo no construtor do DAO colocar ConeccetcionFactory.getConnection) ou ainda fazer um pool de conexões dentro da factory ?

Lembrando que a conexão com o postgresql (via JDBC) já é thread safe.