From 51cafbf3e54a16bc912aeeaaf7aae3f1ab317a1e Mon Sep 17 00:00:00 2001 From: Cleverson Sacramento Date: Wed, 20 Feb 2013 08:10:05 -0300 Subject: [PATCH] Correção da falha ao tentar definir o autocommit false em transações gerenciadas. --- impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ConnectionProducer.java | 28 ++++++++++++++++++---------- impl/extension/jdbc/src/main/resources/demoiselle-jdbc-bundle.properties | 1 + 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ConnectionProducer.java b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ConnectionProducer.java index 3315266..aeb3f56 100644 --- a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ConnectionProducer.java +++ b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ConnectionProducer.java @@ -2,6 +2,7 @@ package br.gov.frameworkdemoiselle.internal.producer; import java.io.Serializable; import java.sql.Connection; +import java.sql.SQLException; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -55,18 +56,18 @@ public class ConnectionProducer implements Serializable { } public Connection getConnection(String name) { - Connection result = null; + Connection connection = null; if (cache.containsKey(name)) { - result = cache.get(name); + connection = cache.get(name); } else { try { - result = producer.create(name).getConnection(); - result.setAutoCommit(false); + connection = producer.create(name).getConnection(); + disableAutoCommit(connection); - cache.put(name, result); - this.logger.info(bundle.getString("connection-was-created", name)); + cache.put(name, connection); + logger.info(bundle.getString("connection-was-created", name)); } catch (Exception cause) { // TODO Colocar uma mensagem amigável @@ -75,15 +76,22 @@ public class ConnectionProducer implements Serializable { } } - return result; + return connection; + } + + private void disableAutoCommit(Connection connection) { + try { + connection.setAutoCommit(false); + + } catch (SQLException cause) { + logger.debug(bundle.getString("set-autocommit-failed")); + } } private String getName(InjectionPoint ip, JDBCConfig config) { String result; if (ip != null && ip.getAnnotated() != null && ip.getAnnotated().isAnnotationPresent(Name.class)) { - // TODO Quando o comando Beans.getReference é usado para simular injeção, não existe - // anotação @Inject então precisamos testar se #getAnnotated() retorna nulo aqui. result = ip.getAnnotated().getAnnotation(Name.class).value(); } else { @@ -101,7 +109,7 @@ public class ConnectionProducer implements Serializable { String result = config.getDefaultDataDourceName(); if (result != null) { - this.logger.debug(bundle.getString("getting-default-datasource-name-from-properties", result)); + logger.debug(bundle.getString("getting-default-datasource-name-from-properties", result)); } return result; diff --git a/impl/extension/jdbc/src/main/resources/demoiselle-jdbc-bundle.properties b/impl/extension/jdbc/src/main/resources/demoiselle-jdbc-bundle.properties index 365e519..56ce39f 100644 --- a/impl/extension/jdbc/src/main/resources/demoiselle-jdbc-bundle.properties +++ b/impl/extension/jdbc/src/main/resources/demoiselle-jdbc-bundle.properties @@ -34,6 +34,7 @@ # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. more-than-one-datasource-defined=Existe mais de um banco de dados definido. Utilize @{0} no ponto de inje\u00E7\u00E3o ou defina o atributo "frameworkdemoiselle.persistence.default.datasource.name" no arquivo demoiselle.properties. +set-autocommit-failed=Falha ao tentar executar connection.setAutoCommit(false) numa transa\u00E7\u00E3o gerenciada. N\u00E3o se preocupe, este comportamento \u00E9 esperado. load-jndi-datasource-failed=Falha ao tentar obter a conex\u00E3o "{0}" via JNDI. load-duplicated-configuration-failed=Falha no carregamento das configura\u00E7\u00F5es JDBC. Verifique se existem valores duplicados indevidamente no demoiselle.properties. getting-default-datasource-name-from-properties=Obtendo a configura\u00E7\u00E3o de banco de dados padr\u00E3o "{0}" a partir do arquivo de configura\u00E7\u00E3o demoiselle.properties. -- libgit2 0.21.2