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 | 13 | import javax.inject.Inject; |
14 | 14 | import javax.naming.Context; |
15 | 15 | import javax.naming.InitialContext; |
16 | +import javax.naming.NamingException; | |
16 | 17 | import javax.sql.DataSource; |
17 | 18 | |
18 | 19 | import org.slf4j.Logger; |
... | ... | @@ -108,22 +109,33 @@ public class DataSourceProducer implements Serializable { |
108 | 109 | private DataSource initDataSource(String dataSourceName) { |
109 | 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 | 141 | return result; | ... | ... |
impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/transaction/BasicDataSourceProxy.java
... | ... | @@ -8,35 +8,46 @@ import java.util.Collection; |
8 | 8 | |
9 | 9 | import org.apache.commons.dbcp.BasicDataSource; |
10 | 10 | |
11 | +import br.gov.frameworkdemoiselle.DemoiselleException; | |
11 | 12 | import br.gov.frameworkdemoiselle.internal.configuration.JDBCConfig; |
13 | +import br.gov.frameworkdemoiselle.util.ResourceBundle; | |
12 | 14 | |
13 | 15 | public class BasicDataSourceProxy extends BasicDataSource implements Serializable { |
14 | 16 | |
15 | 17 | private static final long serialVersionUID = 1L; |
16 | 18 | |
19 | + private ResourceBundle bundle; | |
20 | + | |
17 | 21 | private String dataSourceName; |
18 | 22 | |
19 | 23 | private JDBCConfig config; |
20 | 24 | |
21 | 25 | private transient BasicDataSource delegate; |
22 | 26 | |
23 | - public BasicDataSourceProxy(String dataSourceName, JDBCConfig config) { | |
27 | + public BasicDataSourceProxy(String dataSourceName, JDBCConfig config, ResourceBundle bundle) { | |
24 | 28 | this.dataSourceName = dataSourceName; |
25 | 29 | this.config = config; |
30 | + this.bundle = bundle; | |
26 | 31 | } |
27 | 32 | |
28 | 33 | private BasicDataSource getDelegate() { |
29 | 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 | 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 | 52 | delegate = dataSource; |
42 | 53 | } | ... | ... |
impl/extension/jdbc/src/main/resources/demoiselle-jdbc-bundle.properties
... | ... | @@ -34,9 +34,10 @@ |
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 | +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 | 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 | 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 | 41 | datasource-not-found-in-cache=DataSource n\u00E3o encontrado para contexto atual, criando um agora. |
41 | 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. | ... | ... |