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 2  
3 3 import java.io.Serializable;
4 4 import java.sql.Connection;
  5 +import java.sql.SQLException;
5 6 import java.util.Collections;
6 7 import java.util.HashMap;
7 8 import java.util.Map;
... ... @@ -55,18 +56,18 @@ public class ConnectionProducer implements Serializable {
55 56 }
56 57  
57 58 public Connection getConnection(String name) {
58   - Connection result = null;
  59 + Connection connection = null;
59 60  
60 61 if (cache.containsKey(name)) {
61   - result = cache.get(name);
  62 + connection = cache.get(name);
62 63  
63 64 } else {
64 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 72 } catch (Exception cause) {
72 73 // TODO Colocar uma mensagem amigável
... ... @@ -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 91 private String getName(InjectionPoint ip, JDBCConfig config) {
82 92 String result;
83 93  
84 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 95 result = ip.getAnnotated().getAnnotation(Name.class).value();
88 96  
89 97 } else {
... ... @@ -101,7 +109,7 @@ public class ConnectionProducer implements Serializable {
101 109 String result = config.getDefaultDataDourceName();
102 110  
103 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 115 return result;
... ...
impl/extension/jdbc/src/main/resources/demoiselle-jdbc-bundle.properties
... ... @@ -34,6 +34,7 @@
34 34 # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
35 35  
36 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 38 load-jndi-datasource-failed=Falha ao tentar obter a conex\u00E3o "{0}" via JNDI.
38 39 load-duplicated-configuration-failed=Falha no carregamento das configura\u00E7\u00F5es JDBC. Verifique se existem valores duplicados indevidamente no demoiselle.properties.
39 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.
... ...