Pessoal,
eu estava implementando o pattern DAO num modelo que tenho e fiquei em duvida de como implementar as transações de bd quando a mesma requer mais de uma operação em classes DAO.
Por exemplo, se eu tiver uma operação no meu objeto de negócio que altera dados em mais classes DAO, sendo que a operação só deve ser gravada (commit) no bd se for executada por completo, senão deve ser emitido erro e desfeitas as alterações (rollback)…
Fiquei confuso onde vou iniciar a transação. Na documentação DAO da Sun ela sugere colocar o create connection para pegar uma conexao com o bd nas classes que implementam o DAO, mas neste caso, se eu entendi direito, a transação se resume a métodos nestas classes. Sem contar que estas classes DAO deveriam ter apenas métodos CRUD, ou não?
Então presumi que eu deveria criar ou pegar a connection na classe de negócio… mas aí me deparei com outro problema, pois eu não quero deixar o negócio dependente de bd, haja vista que posso querer mudar a implementação no futuro para um prevayler ou coisa parecida.
Pensei em utilizar uma especie de SessionFactory para criar a sessão com os atributos necessários para cada tipo de fonte de dados, no caso do bd teria um atributo do tipo Connection, etc…, sendo que esta seria passada de parâmetro para os DAOs.
Não sei se estou no caminho certo, ou se consegui me fazer entender…
Antes que me esqueça, estou utilizando no modelo: classes de negócio (por exemplo: Aluno), interfaces DAO (AlunoDAO), classes que implementam o DAO (JDBCAlunoDAO), uma AbstractFactory (DAOFactory) e uma Factory os DAOs (JDBCDAOFactory)… talvez vocês me digam que não seja necessário tudo isso, mas estou querendo implementar o pattern DAO completo para estudo…
Até!