Commit 51cafbf3e54a16bc912aeeaaf7aae3f1ab317a1e

Authored by Cleverson Sacramento
1 parent 56acf0b5
Exists in master

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
@@ -2,6 +2,7 @@ package br.gov.frameworkdemoiselle.internal.producer; @@ -2,6 +2,7 @@ package br.gov.frameworkdemoiselle.internal.producer;
2 2
3 import java.io.Serializable; 3 import java.io.Serializable;
4 import java.sql.Connection; 4 import java.sql.Connection;
  5 +import java.sql.SQLException;
5 import java.util.Collections; 6 import java.util.Collections;
6 import java.util.HashMap; 7 import java.util.HashMap;
7 import java.util.Map; 8 import java.util.Map;
@@ -55,18 +56,18 @@ public class ConnectionProducer implements Serializable { @@ -55,18 +56,18 @@ public class ConnectionProducer implements Serializable {
55 } 56 }
56 57
57 public Connection getConnection(String name) { 58 public Connection getConnection(String name) {
58 - Connection result = null; 59 + Connection connection = null;
59 60
60 if (cache.containsKey(name)) { 61 if (cache.containsKey(name)) {
61 - result = cache.get(name); 62 + connection = cache.get(name);
62 63
63 } else { 64 } else {
64 try { 65 try {
65 - result = producer.create(name).getConnection();  
66 - result.setAutoCommit(false); 66 + connection = producer.create(name).getConnection();
  67 + disableAutoCommit(connection);
67 68
68 - cache.put(name, result);  
69 - this.logger.info(bundle.getString("connection-was-created", name)); 69 + cache.put(name, connection);
  70 + logger.info(bundle.getString("connection-was-created", name));
70 71
71 } catch (Exception cause) { 72 } catch (Exception cause) {
72 // TODO Colocar uma mensagem amigável 73 // TODO Colocar uma mensagem amigável
@@ -75,15 +76,22 @@ public class ConnectionProducer implements Serializable { @@ -75,15 +76,22 @@ public class ConnectionProducer implements Serializable {
75 } 76 }
76 } 77 }
77 78
78 - return result; 79 + return connection;
  80 + }
  81 +
  82 + private void disableAutoCommit(Connection connection) {
  83 + try {
  84 + connection.setAutoCommit(false);
  85 +
  86 + } catch (SQLException cause) {
  87 + logger.debug(bundle.getString("set-autocommit-failed"));
  88 + }
79 } 89 }
80 90
81 private String getName(InjectionPoint ip, JDBCConfig config) { 91 private String getName(InjectionPoint ip, JDBCConfig config) {
82 String result; 92 String result;
83 93
84 if (ip != null && ip.getAnnotated() != null && ip.getAnnotated().isAnnotationPresent(Name.class)) { 94 if (ip != null && ip.getAnnotated() != null && ip.getAnnotated().isAnnotationPresent(Name.class)) {
85 - // TODO Quando o comando Beans.getReference é usado para simular injeção, não existe  
86 - // anotação @Inject então precisamos testar se #getAnnotated() retorna nulo aqui.  
87 result = ip.getAnnotated().getAnnotation(Name.class).value(); 95 result = ip.getAnnotated().getAnnotation(Name.class).value();
88 96
89 } else { 97 } else {
@@ -101,7 +109,7 @@ public class ConnectionProducer implements Serializable { @@ -101,7 +109,7 @@ public class ConnectionProducer implements Serializable {
101 String result = config.getDefaultDataDourceName(); 109 String result = config.getDefaultDataDourceName();
102 110
103 if (result != null) { 111 if (result != null) {
104 - this.logger.debug(bundle.getString("getting-default-datasource-name-from-properties", result)); 112 + logger.debug(bundle.getString("getting-default-datasource-name-from-properties", result));
105 } 113 }
106 114
107 return result; 115 return result;
impl/extension/jdbc/src/main/resources/demoiselle-jdbc-bundle.properties
@@ -34,6 +34,7 @@ @@ -34,6 +34,7 @@
34 # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. 34 # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
35 35
36 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. 36 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.
  37 +set-autocommit-failed=Falha ao tentar executar connection.setAutoCommit(false) numa transa\u00E7\u00E3o gerenciada. N\u00E3o se preocupe, este comportamento \u00E9 esperado.
37 load-jndi-datasource-failed=Falha ao tentar obter a conex\u00E3o "{0}" via JNDI. 38 load-jndi-datasource-failed=Falha ao tentar obter a conex\u00E3o "{0}" via JNDI.
38 load-duplicated-configuration-failed=Falha no carregamento das configura\u00E7\u00F5es JDBC. Verifique se existem valores duplicados indevidamente no demoiselle.properties. 39 load-duplicated-configuration-failed=Falha no carregamento das configura\u00E7\u00F5es JDBC. Verifique se existem valores duplicados indevidamente no demoiselle.properties.
39 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. 40 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.