Commit 51cafbf3e54a16bc912aeeaaf7aae3f1ab317a1e
1 parent
56acf0b5
Exists in
master
Correção da falha ao tentar definir o autocommit false em transações
gerenciadas.
Showing
2 changed files
with
19 additions
and
10 deletions
Show diff stats
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. |