SCBCD - Study guide Mikalai Zaikin - Topico Transactions

1 resposta
Carol_M_de_Paula

Boa tarde, no link abaixo, MZ ensina que em Stateful session beans eh possivel manter uma Transaction entre multiplos metodos. Em seu exemplo, uma transaction comeca no method1 e eh committed no method3. Isso esta correto!
Minha duvida no entanto eh com relacao ao method2, onde fecha-se a conexao com o datasource, con.close().
O fechamento da conexao nao deveria ser no method3, apos o u.commit()?
Fechar a conexao com o db nao deveria acontecer apos o commit da Transaction?
Como o Transaction vai commit se a conexao foi fechada?
Em todos os exemplos, o MZ fecha a conexao apos o commit, com excecao desse exemplo.
Ajudem por favor! :cry:

http://java.boot.by/scbcd5-guide/ch09.html#c9s1

@Stateful

@TransactionManagement(BEAN)

public class MySessionBean implements MySession {
@Resource javax.Transaction.UserTransaction ut;
@Resource javax.sql.DataSource database1;

public void method1(...) {
	// start a transaction
	ut.begin();
}

[b]public void method2(...) [/b]{
	java.sql.Connection con;
	java.sql.Statement stmt;

	// open connection
	con = database1.getConnection();
	
	// make some updates on con
	stmt = con.createStatement();
	stmt.executeUpdate(...);
	stmt.executeUpdate(...);
	
	// close the connection
	stmt.close();
	[b]con.close();[/b]   :?: 
}

[b]public void method3(...)[/b] {
	// commit the transaction
	[b]ut.commit();[/b]
}
...

}

1 Resposta

Carol_M_de_Paula

Acho que encontrei uma resposta.

http://www.coderanch.com/t/315928/EJB-JEE/java/EJB-JDBC-Transactions

De acordo com o link acima e um pouco mais de analise, a questao eh:

1-) o uso de java.sql.Connection.close() nao causa o commit da transacao. O que e bom, pois de acordo com a spec, nao eh para commit absolutamente nada entre o javax.transaction.UserTransaction.begin() e javax.transaction.UserTransaction.commit().
2-) quando a transacao executa o commit(), no method3, o container gerencia obter uma conexao, no pool de conexoes, para entao fazer o commit na base de dados.

Entao, basicamente, nao importa fechar a conexao ANTES ou DEPOIS de executar javax.transaction.UserTransaction.commit().

Criado 24 de junho de 2011
Ultima resposta 24 de jun. de 2011
Respostas 1
Participantes 1