Transações em java

MySQL

Java

25/08/2017

Sou iniciante e tenho a seguinte classe de conexão utilizando jdbc:


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConexaoBD {
private static Connection con;
public static Connection getConnection() throws ClassNotFoundException, SQLException {
try {
if (con == null || con.isClosed()) {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/evs";
String user = "root";
String pass = null;
con = DriverManager.getConnection(url, user, pass);
}
return con;
} catch (SQLException e) {
throw new SQLException("Não foi possível estabelecer uma conexão com o banco de dados! \\n"
+ "Mensagem de erro: " + e.getMessage());
}
}
}

Ao utilizar transações (con.setAutoCommit(false)) e fazer inserções ou updates em um determinado método acontece um rollback. A dúvida é seguinte: em um cenário onde esse sistema estiver sendo utilizado por milhares de usuários, onde muitas conexões criadas, e no caso do código acima seria recuperado um conexão que já foi criada, o rollback de um método afetaria um outro método que recuperasse um conexão existente que esteja executando uma transação?
Exemplo: um usuário esteja cadastrando um fornecedor e digamos que outro esteja fazendo lançamentos no caixa, os métodos sempre passam por essa classe de conexão, o getConnection() que nem sempre retorna uma nova conexão. Pode ser utilizado o código de conexão dessa maneira para aumentar o desempenho?
Esdras Silva

Esdras Silva

Curtidas 0

Respostas

Estevão Dias

Estevão Dias

25/08/2017

Olá Esdras, tudo bom?

De acordo com a documentação disponibilizada pela Oracle e IBM:

Typically, transactions in Java™ Database Connectivity (JDBC) are local. This means that a single connection performs all the work of the transaction and that the connection can only work on one transaction at a time.



Infelizmente você não conseguirá criar múltiplas transações a partir de uma mesma conexão. Uma vez que você dê commit, todas as alterações desde o último commit, para aquela conexão, serão salvas.


É verdade que, geralmente, criar múltiplas conexões pode ser custoso, mas o impacto dessa decisão pode ser minimizado implementando um pool de conexões. E em se tratando de uma aplicação desktop creio que o impacto será amortecido pela plataforma, na qual é comum termos poucos clientes conectados ao mesmo tempo.


Para mais detalhes recomendo ler o artigo abaixo, ele conta com alguns exemplos práticos de como proceder com relação ao JDBC.


https://www.devmedia.com.br/java-jdbc-melhorando-o-desempenho-de-aplicacoes-java/31976


Um abraço.
GOSTEI 0
Esdras Silva

Esdras Silva

25/08/2017

Obrigado pela atenção Estevão.
GOSTEI 0
POSTAR