DAOs com Transações

6 respostas
chcl

Pessoal alguem ai ja usou DAO com transações e o modelo de transações seja generico ??

Tipo suponha que vc tem um Factory de DAOs que retorne DAOs para Hibernate e DAOs implementados com JDBC na unha.

Onde vc utiliza os DAOs como por exemplo em um service facade, como tratar essas duas origems de DAOs diferentes com modelos de transações diferentes na hora de utilizar no Facade ??
Suponha que hoje uso o modelo do Hibernate e preciso mudar pra JDBC.

Sera que a criacao e uma fabrica de Transactions baseado no tipo de DAO é o ideal ??

Como devo abstrair essa camada de transações para ser flexivel para varios tipos de DAOs ?

Estou com umas ideias mais gostaria de opnioes antes fazer algo concreto!

Valews!!

6 Respostas

Ferryman

Eai,

Então acho que vc poderia criar um objeto TransactionManager, e uma factory pra ele, e aí, pra conseguir uma transação entre varios DAOS, vc pede uma transactionManager pra factory passando uma lista com o nome dos DAOS que vc irá utilizar…

A factory de TransactionManager pega todos estes DAOS da DaoFactory, passando a conexão que o transactionManager deve gerenciar, e joga os DAOS buscados em um mapa que tem como chave o nome dos daos.

Os seus DAOS devem estar preparados pra utilizar a conexao fornecida pelo transactionManager, então através do transactionManager vc acessa os DAOS que precisar, faz as operações e no final faz um transactionManager.comit().

Eu nunca utilizei isso e pensei agora, então não sei como será pra implementar isso, é apenas uma idéia.

Espero ter ajudado

Abraço.
Ferry

Abdon

A solução do TransactionManger é bem viavel.
Basicamente vc vai ter que abrir uma conexão jdbc, injetar esta conexão em um session do hibernate

SessionFactory.openSession(Connection conn)

Injetar esta conexão nos seus DAOs jdbc.

Criar uma camada na qual ira chamar o seus DAOs (Serviço) criar a conexão, abrir a transação, injetar a conexão e utilizar!

chcl

Valew Ferryman, eu ate utilizo em um outro sistema aqui onde os DAOs sao feitos utilizando JDBC puro esse modelo de um TransactionManager e inclusive ate o nome é esse mesmo!!hehehe

O detalhe que nao estou conseguindo abstrair é que estou querendo utilizar EJB3/JPA com gerenciamento de transações do Container entao quando eu utilizar os DAOs de entidades vindas do JPA é de um jeito e com JDBC normal de outro totalmente diferente ta dificil abstrair isso.

chcl

Abdom, despertou uma curiosidade e algo que talvez seja util em outras situacoes tambem. Tem como pegar uma Connection ou java.sql.Connection de um EntityManager ??

Ferryman

Deixa eu ver se entendi. Você quer tratar as transações de uma maneira abstrata, que deverá funcionar para os seus daos jdbc com o transactionManager e tambem para as transações do JPA?

Eu não sei como funciona JPA e o seu controle de transações… como vc trabalha com as transações via JPA?

chcl

Ferryman usando JPA eu posso controlar as transações mannualmente com …begin()… commit() ou deixar que o container controle isso pra mim. simplesmente chamando os metodos e deixando que o container propague e controle a trasação. To chegando a conclusao que isso é meio dificil ate mesmo por este conceito como o container gerencia as transações eu nao tenho como abstrair isso pra um DAO com JDBC que eu controlo a transação, no maximo eu tenho que conseguir abstrair a definicao de usar transacao do container ou usar um gerenciador que eu implemente.

Um outro problema na minha arquitetura é, vou utilizar de inicio JPA e caso nao fique bom por ser um sistema de missao critica eu vou utilizar DAOs com JDBC porem utilizar DAOs com JDBC e acessando os objetos da forma como é feito com JPA meus DAOs deveriam reimplentar um JPA proprio o que seria inviavel.

Nossa ta foda isso!

Criado 28 de junho de 2007
Ultima resposta 28 de jun. de 2007
Respostas 6
Participantes 3