Commit 56acf0b5b52560607c7eedeb109f76da2a09638b
1 parent
b7462d89
Exists in
master
Blindando a extensão contra possíveis falhas na configuração provocadas
pelo usuário
Showing
3 changed files
with
48 additions
and
24 deletions
Show diff stats
impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/DataSourceProducer.java
@@ -13,6 +13,7 @@ import javax.enterprise.context.ApplicationScoped; | @@ -13,6 +13,7 @@ import javax.enterprise.context.ApplicationScoped; | ||
13 | import javax.inject.Inject; | 13 | import javax.inject.Inject; |
14 | import javax.naming.Context; | 14 | import javax.naming.Context; |
15 | import javax.naming.InitialContext; | 15 | import javax.naming.InitialContext; |
16 | +import javax.naming.NamingException; | ||
16 | import javax.sql.DataSource; | 17 | import javax.sql.DataSource; |
17 | 18 | ||
18 | import org.slf4j.Logger; | 19 | import org.slf4j.Logger; |
@@ -108,22 +109,33 @@ public class DataSourceProducer implements Serializable { | @@ -108,22 +109,33 @@ public class DataSourceProducer implements Serializable { | ||
108 | private DataSource initDataSource(String dataSourceName) { | 109 | private DataSource initDataSource(String dataSourceName) { |
109 | DataSource result; | 110 | DataSource result; |
110 | 111 | ||
111 | - try { | ||
112 | - JDBCConfig config = Beans.getReference(JDBCConfig.class); | ||
113 | - Map<String, String> jndiMap = config.getJndiName(); | 112 | + JDBCConfig config = Beans.getReference(JDBCConfig.class); |
113 | + Map<String, String> jndiMap = config.getJndiName(); | ||
114 | 114 | ||
115 | - if (jndiMap != null) { | ||
116 | - Context context = new InitialContext(); | ||
117 | - result = (DataSource) context.lookup(jndiMap.get(dataSourceName)); | 115 | + if (jndiMap != null) { |
116 | + result = initJNDIDataSource(dataSourceName, config); | ||
118 | 117 | ||
119 | - } else { | ||
120 | - result = new BasicDataSourceProxy(dataSourceName, config); | ||
121 | - } | 118 | + } else { |
119 | + result = new BasicDataSourceProxy(dataSourceName, config, bundle); | ||
120 | + } | ||
121 | + | ||
122 | + return result; | ||
123 | + } | ||
124 | + | ||
125 | + private DataSource initJNDIDataSource(String dataSourceName, JDBCConfig config) { | ||
126 | + DataSource result = null; | ||
127 | + | ||
128 | + try { | ||
129 | + Context context = new InitialContext(); | ||
130 | + String jndi = config.getJndiName().get(dataSourceName); | ||
131 | + | ||
132 | + result = (DataSource) context.lookup(jndi); | ||
122 | 133 | ||
123 | - } catch (Exception cause) { | ||
124 | - // TODO Colocar uma mensagem amigável | 134 | + } catch (NamingException cause) { |
135 | + throw new DemoiselleException(bundle.getString("load-jndi-datasource-failed", dataSourceName), cause); | ||
125 | 136 | ||
126 | - throw new DemoiselleException("", cause); | 137 | + } catch (ClassCastException cause) { |
138 | + throw new DemoiselleException(bundle.getString("load-duplicated-configuration-failed"), cause); | ||
127 | } | 139 | } |
128 | 140 | ||
129 | return result; | 141 | return result; |
impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/transaction/BasicDataSourceProxy.java
@@ -8,35 +8,46 @@ import java.util.Collection; | @@ -8,35 +8,46 @@ import java.util.Collection; | ||
8 | 8 | ||
9 | import org.apache.commons.dbcp.BasicDataSource; | 9 | import org.apache.commons.dbcp.BasicDataSource; |
10 | 10 | ||
11 | +import br.gov.frameworkdemoiselle.DemoiselleException; | ||
11 | import br.gov.frameworkdemoiselle.internal.configuration.JDBCConfig; | 12 | import br.gov.frameworkdemoiselle.internal.configuration.JDBCConfig; |
13 | +import br.gov.frameworkdemoiselle.util.ResourceBundle; | ||
12 | 14 | ||
13 | public class BasicDataSourceProxy extends BasicDataSource implements Serializable { | 15 | public class BasicDataSourceProxy extends BasicDataSource implements Serializable { |
14 | 16 | ||
15 | private static final long serialVersionUID = 1L; | 17 | private static final long serialVersionUID = 1L; |
16 | 18 | ||
19 | + private ResourceBundle bundle; | ||
20 | + | ||
17 | private String dataSourceName; | 21 | private String dataSourceName; |
18 | 22 | ||
19 | private JDBCConfig config; | 23 | private JDBCConfig config; |
20 | 24 | ||
21 | private transient BasicDataSource delegate; | 25 | private transient BasicDataSource delegate; |
22 | 26 | ||
23 | - public BasicDataSourceProxy(String dataSourceName, JDBCConfig config) { | 27 | + public BasicDataSourceProxy(String dataSourceName, JDBCConfig config, ResourceBundle bundle) { |
24 | this.dataSourceName = dataSourceName; | 28 | this.dataSourceName = dataSourceName; |
25 | this.config = config; | 29 | this.config = config; |
30 | + this.bundle = bundle; | ||
26 | } | 31 | } |
27 | 32 | ||
28 | private BasicDataSource getDelegate() { | 33 | private BasicDataSource getDelegate() { |
29 | if (this.delegate == null) { | 34 | if (this.delegate == null) { |
30 | - String driver = config.getDriverClass().get(dataSourceName); | ||
31 | - String url = config.getUrl().get(dataSourceName); | ||
32 | - String username = config.getUsername().get(dataSourceName); | ||
33 | - String password = config.getPassword().get(dataSourceName); | ||
34 | - | ||
35 | BasicDataSource dataSource = new BasicDataSource(); | 35 | BasicDataSource dataSource = new BasicDataSource(); |
36 | - dataSource.setDriverClassName(driver); | ||
37 | - dataSource.setUrl(url); | ||
38 | - dataSource.setUsername(username); | ||
39 | - dataSource.setPassword(password); | 36 | + |
37 | + try { | ||
38 | + String driver = config.getDriverClass().get(dataSourceName); | ||
39 | + String url = config.getUrl().get(dataSourceName); | ||
40 | + String username = config.getUsername().get(dataSourceName); | ||
41 | + String password = config.getPassword().get(dataSourceName); | ||
42 | + | ||
43 | + dataSource.setDriverClassName(driver); | ||
44 | + dataSource.setUrl(url); | ||
45 | + dataSource.setUsername(username); | ||
46 | + dataSource.setPassword(password); | ||
47 | + | ||
48 | + } catch (ClassCastException cause) { | ||
49 | + throw new DemoiselleException(bundle.getString("load-duplicated-configuration-failed"), cause); | ||
50 | + } | ||
40 | 51 | ||
41 | delegate = dataSource; | 52 | delegate = dataSource; |
42 | } | 53 | } |
impl/extension/jdbc/src/main/resources/demoiselle-jdbc-bundle.properties
@@ -34,9 +34,10 @@ | @@ -34,9 +34,10 @@ | ||
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 | +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. | ||
37 | 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. | 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. |
38 | datasource-name-found=Configura\u00E7\u00E3o de banco de dados "{0}" encontrada. | 40 | datasource-name-found=Configura\u00E7\u00E3o de banco de dados "{0}" encontrada. |
39 | -persistence-unit-name-found=Configura\u00E7\u00E3o do banco de dados "{0}" encontrada. | ||
40 | datasource-not-found-in-cache=DataSource n\u00E3o encontrado para contexto atual, criando um agora. | 41 | datasource-not-found-in-cache=DataSource n\u00E3o encontrado para contexto atual, criando um agora. |
41 | connection-was-created=Conex\u00E3o criada a partir da configura\u00E7\u00E3o "{0}". | 42 | connection-was-created=Conex\u00E3o criada a partir da configura\u00E7\u00E3o "{0}". |
42 | -datasource-name-not-found=Nenhuma configura\u00E7\u00E3o de banco de dados foi encontrada no "demoiselle.properties" | 43 | +datasource-name-not-found=Nenhuma configura\u00E7\u00E3o de banco de dados foi encontrada no demoiselle.properties. |