Como acessar o MySQL e o Oracle com a mesma classe Dao
14 respostas
javaprogramação
fventurajr
Aprendi em um curso que devemos criar um pacote de persistência onde há uma classe Dao, em que são definidos objetos que serão usados na conexão, abertura e fechamento de banco de dados. Para cada entidade a ser persistida devo criar uma classe derivada da Dao, como ProdutoDao, ClienteDao, …
Até aí, tudo bem, mas na Dao já é apontada a instância de um banco de dados específico, mas e se eu necessitar que a minha aplicação acesse, por exemplo uma base MySql e Oracle? Devo criar uma Dao com um argumento que me permita alternar entre as bases? Há um padrão de projeto para isso? Talvez o factory?
Pode definir uma interface ou classe abstrata com as operações de acesso ao banco, e ter uma implementação concreta para cada banco
javaflex
Se realmente necessitar você investe esforço nisso, pois é muito raro acontecer. Quando acontece a tendência é usar coisas como JPA/Hibernate.
j-menezes
Isso quase sempre acontece quando a gente deixa a disposicao do cliente escolher qual banco de dados quer usar, principalmente em ERP.
É resolvido na camada de implementacao que carrega a DAO.
pmlm
Mas deve aceder a Mysql e Oracle simultaneamente? Ou deve aceder a Mysql ou Oracle consoante diferentes instalações?
j-menezes
Isso facilmente resolve usando a implementacao.
Uma implementacao para cada Banco.
É instanciado e usado o correto.
fventurajr
Fizeram uma sugestáo para eu transformar o aceso ao Oracle(legado) criando um webservice, enquanto uso o MySQL como banco para a aplicação. Acha uma boa ideia?
fventurajr
Sim. Estou desenvolvendo uma aplicação informal para a secretaria e disponho e quero usar o mysql, mas exite uma tabela no Oracle que me atende e me pouparia trabalho.
fventurajr
Vocë diz para eu criar uma interface Dao e duas implementações, uma para cada banco?
Só se tiver a necessidade, pra nao virar overhead. Se já usam Oracle, pq adicionar mais um SGDB?
fventurajr
O Oracle é da empresa. Eu usaria a instância de desenvolvimento apenas para consulta. MySql é free. Se você me disser que eu posso usar o Oracle XE vou responder que não existe ele para o Mac.
Neste caso está aumentando a complexidade da aplicação por limitacao do seu ambiente, não pela necessidade do cliente.
j-menezes
Isso, por ai mesmo.
fventurajr
Mas deve haver um método consagrado pelas boas práticas. Talvez uma fábrica de conexões, pois mesmo que não tenha muita lógica trabalhar com mais de um sgbd, o mesmo não sepode dizer de uma aplicação que acesse, dentro do mesmo SGBD, bancos diferentes.
Por exemplo, posso estar fazendo uma aplicação financeira que use um banco FINANCAS no MySQL e exista um aplicação do RH da empresa onde existam os cadastros e aí quero acessar o banco CADASTRO em MySQL. Do mesmo jeito a minha Dao precisa, ora apontar para um banco, ora para outro.
javaflex
Quando necessário para o cliente nenhum problema, mas você tinha informado que era por causa do sistema operacional que você usa não suportar.
Mas se quer fazer isso, não precisa de nenhuma firula de padrões ou overhead de webservice. Cria uma classe pra conectar e retornar a conexão com o Oracle, com isso bastar usar a conexão na classe que fará acesso a essa tabela que voce precisa do Oracle.