Transaction em DAO

Preciso fazer com insira em duas tables ao executar o método insere a seguir, ele está inserindo, mas quando simulo um erro ele insere numa tabela e não na outra, ou seja, não está funcionando a transação

Arquivo AcessoDAO.java
public boolean insere(Object obj) throws SQLException,Exception {
// TODO Auto-generated method stub
try{
@SuppressWarnings(“unused”)
SimpleDateFormat formataData = new SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”);
AcessoHp acessoHp = (AcessoHp) obj;
conected.setAutoCommit(false);
acessoHp.setIdAcesso(super.insereAcesso(acessoHp));
ps = this.conected.prepareStatement(“INSERT INTO TSYS_acessoHP(”
+ “TSYS_acessoHP.idAcesso,”
+ “TSYS_acessoHP.label,”
+ “TSYS_acessoHP.link,”
+ “TSYS_acessoHP.acessoPai) VALUES(?,?,?,?)”);
ps.setInt(1, acessoHp.getIdAcesso());
ps.setString(2, acessoHp.getLabel());
ps.setString(3, acessoHp.getLink());
ps.setInt(4, acessoHp.getAcessoPai().getIdAcesso());
ps.execute();
conected.commit();
} catch (SQLException sql) {
System.out.println("Erro AcessoHPDAO SQL em: " + sql.getMessage());
System.out.println("Erro AcessoHPDAO SQL tipo: " + sql.getSQLState());
System.out.println("Erro AcessoHPDAO SQL código: " + sql.getErrorCode());
conected.setAutoCommit(true);
throw new SQLException(sql.getNextException());
} catch (Exception e) {
// TODO: handle exception
System.out.println("Exceção AcessoHPDAO mensagem: " + e.getMessage());
System.out.println("Exceção AcessoHPDAO local: " + e.getLocalizedMessage());
System.out.println("Exceção AcessoHPDAO causa: " + e.getCause());
conected.setAutoCommit(true);
conected.rollback();
throw new Exception(e.getCause());
} finally {
conected.setAutoCommit(true);
conected.close();
//rs.close();
ps.close();
}
return true;
}

Arquivo AcessoHpDAO.java
public int insereAcesso(Object obj) throws SQLException,Exception {
// TODO Auto-generated method stub
int idReturn = 0;
try{
Acesso acesso = (Acesso) obj;
conected.setAutoCommit(true);
ps = this.conected.prepareStatement("DECLARE @idAcesso INT " +
"INSERT INTO TSYS_acesso(TSYS_acesso.tipoAcesso) " +
"VALUES(?) " +
"SET @idAcesso = @@IDENTITY " +
“SELECT @idAcesso AS idAcesso”);
ps.setInt(1, acesso.getTipoAcesso().getIdAcesso());
conected.setAutoCommit(false);
conected.commit();
rs = ps.executeQuery();
rs.next();
idReturn = rs.getInt(“idAcesso”);

	/*	ps = this.conected.prepareStatement("INSERT INTO TSYS_acesso(TSYS_acesso.tipoAcesso) " +
											"VALUES(?)");
		ps.setInt(1, acesso.getTipoAcesso().getIdAcesso()); */
		ps.execute();
		conected.commit();
	} catch (SQLException sql) {
		System.out.println("Erro AcessoDAO SQL em: " + sql.getMessage());
		System.out.println("Erro AcessoDAO SQL tipo: " + sql.getSQLState());
		System.out.println("Erro AcessoDAO SQL código: " + sql.getErrorCode());			
		conected.setAutoCommit(true);
		conected.rollback();
		throw new SQLException(sql.getNextException());			
	} catch (Exception e) {
		System.out.println("Exceção AcessoDAO mensagem: " + e.getMessage());
		System.out.println("Exceção AcessoDAO local: " + e.getLocalizedMessage());
		System.out.println("Exceção AcessoDAO causa: " + e.getCause());			
		conected.setAutoCommit(true);
		conected.rollback();
		throw new Exception(e.getCause());			
	} finally {
		conected.setAutoCommit(true);
		conected.close();
		ps.close();
		rs.close();			
	}		
	return idReturn;			
}	

Alguém tem alguma dica sobre isso?

Faça o controle transacional FORA do DAO.
Faça o DAO procurar a conexão “corrente” em vez de ter uma conexão fixa.

Cara, do jeito que está vc teria que compartilhar a Connection entre seus DAOs e tirar o commit()de onde estão.

algo assim

public void salvar(Object obj){ conn.setAutoCommit(false); insere(obj); new AcessoHpDAO().insereAcesso(obj, conn); conn.commit(); }

a depender do seu modelo vc tbem pode ter apensar um DAO pra gerenciar o Acesso, aí o compartilhamento fica mais facil

Cara eu sou novo com java.
Quando vc diz compartilhar conexão, sinceramente eu só faço do jeito que está aí em cima. Cada DAO com uma conexão, de qualquer forma agradeço a ajuda. Mas continuo no mesmo pé em que estava.
Há uma forma mais fácil de realizar um controle de transação entre 2 DAO’s (insert/update/delete).