Galera,
Vi alguns controles de transação em algumas aplicações por aqui, mas não estou concordando muito com a forma como estão.
Tem app que quando precisa-se criar mais de um DAO ou fazer mais de uma operação com o banco, simplemente passando a conexao via set, para dentro do VO, onde exixste uma váriavel de Connnection, passa-se esse VO para o método do DAO, inserir(VO), e lá dentro verificam se essa variávle está null ou não para criar ou não outra conexão.
Também tem outra app em que as conexões são passadas no cabeçalho do método, inserir(AlgumaCoisa, conexão).
E uma que fiquei mais intrigado, é que a conexão é passada na criação do DAO, new DAO(conexão, flag), onde passam true ou false no flag, pra saber se vão ou não fechar essa conexão.
Enfim,
Como você geralemtne gerenciam suas transações quando necessitam de numa mesma conexão efetuar mais de uma operaçao com o banco, mais de uma instanciação de DAO, JTS, JTA, conexão no cabeçalho mesmo?
Uma maneira elegante, simples e certa de preferência 
Agraço

