Commit 26aeb858c520ab44a3c018745414d5275148d18d

Authored by Cleverson Sacramento
1 parent 1d5ee70b
Exists in master

Injeção de ResourceBundle utilizando o ClassLoader correto. Não é

necessário fazer cache do ResourceBundle, pois a implementação padrão já
se encarrega disto.

Bug relatado no
tracker: http://sourceforge.net/apps/mantisbt/demoiselle/view.php?id=782
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrap.java
@@ -36,6 +36,8 @@ @@ -36,6 +36,8 @@
36 */ 36 */
37 package br.gov.frameworkdemoiselle.internal.bootstrap; 37 package br.gov.frameworkdemoiselle.internal.bootstrap;
38 38
  39 +import java.util.Locale;
  40 +
39 import javax.enterprise.inject.spi.AfterBeanDiscovery; 41 import javax.enterprise.inject.spi.AfterBeanDiscovery;
40 import javax.enterprise.inject.spi.Extension; 42 import javax.enterprise.inject.spi.Extension;
41 43
@@ -56,7 +58,7 @@ public class AbstractBootstrap implements Extension { @@ -56,7 +58,7 @@ public class AbstractBootstrap implements Extension {
56 } 58 }
57 59
58 protected static ResourceBundle getBundle(String baseName) { 60 protected static ResourceBundle getBundle(String baseName) {
59 - return bundleFactory.create(baseName); 61 + return bundleFactory.create(baseName, Locale.getDefault());
60 } 62 }
61 63
62 protected static Logger getLogger() { 64 protected static Logger getLogger() {
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/processor/AbstractProcessor.java
@@ -36,6 +36,8 @@ @@ -36,6 +36,8 @@
36 */ 36 */
37 package br.gov.frameworkdemoiselle.internal.processor; 37 package br.gov.frameworkdemoiselle.internal.processor;
38 38
  39 +import java.util.Locale;
  40 +
39 import javax.enterprise.inject.spi.AnnotatedCallable; 41 import javax.enterprise.inject.spi.AnnotatedCallable;
40 import javax.enterprise.inject.spi.Bean; 42 import javax.enterprise.inject.spi.Bean;
41 import javax.enterprise.inject.spi.BeanManager; 43 import javax.enterprise.inject.spi.BeanManager;
@@ -106,8 +108,10 @@ public abstract class AbstractProcessor<DC> implements Processor { @@ -106,8 +108,10 @@ public abstract class AbstractProcessor<DC> implements Processor {
106 } 108 }
107 109
108 protected ResourceBundle getBundle(String baseName) { 110 protected ResourceBundle getBundle(String baseName) {
109 - if (bundle == null)  
110 - bundle = bundleFactory.create(baseName); 111 + if (bundle == null) {
  112 + bundle = bundleFactory.create(baseName, Locale.getDefault());
  113 + }
  114 +
111 return bundle; 115 return bundle;
112 } 116 }
113 117
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ResourceBundleProducer.java
@@ -37,16 +37,12 @@ @@ -37,16 +37,12 @@
37 package br.gov.frameworkdemoiselle.internal.producer; 37 package br.gov.frameworkdemoiselle.internal.producer;
38 38
39 import java.io.Serializable; 39 import java.io.Serializable;
40 -import java.util.HashMap;  
41 import java.util.Locale; 40 import java.util.Locale;
42 -import java.util.Map;  
43 import java.util.MissingResourceException; 41 import java.util.MissingResourceException;
44 42
45 -import javax.enterprise.context.ApplicationScoped;  
46 import javax.enterprise.inject.Default; 43 import javax.enterprise.inject.Default;
47 import javax.enterprise.inject.Produces; 44 import javax.enterprise.inject.Produces;
48 import javax.enterprise.inject.spi.InjectionPoint; 45 import javax.enterprise.inject.spi.InjectionPoint;
49 -import javax.inject.Inject;  
50 46
51 import br.gov.frameworkdemoiselle.DemoiselleException; 47 import br.gov.frameworkdemoiselle.DemoiselleException;
52 import br.gov.frameworkdemoiselle.annotation.Name; 48 import br.gov.frameworkdemoiselle.annotation.Name;
@@ -57,38 +53,28 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle; @@ -57,38 +53,28 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle;
57 * 53 *
58 * @author SERPRO 54 * @author SERPRO
59 */ 55 */
60 -@ApplicationScoped  
61 public class ResourceBundleProducer implements Serializable { 56 public class ResourceBundleProducer implements Serializable {
62 57
63 private static final long serialVersionUID = 1L; 58 private static final long serialVersionUID = 1L;
64 59
65 - @Inject  
66 - protected Locale locale;  
67 -  
68 - private final Map<String, ResourceBundle> map = new HashMap<String, ResourceBundle>();  
69 -  
70 - public ResourceBundleProducer() {  
71 - this.locale = Locale.getDefault();  
72 - }  
73 -  
74 - /**  
75 - * This constructor should be used by classes that can not inject ResourceBundle.  
76 - *  
77 - * @param Locale  
78 - * locale  
79 - */  
80 - public ResourceBundleProducer(Locale locale) {  
81 - this.locale = locale;  
82 - }  
83 -  
84 /** 60 /**
85 * This method should be used by classes that can not inject ResourceBundle, to create the ResourceBundle. 61 * This method should be used by classes that can not inject ResourceBundle, to create the ResourceBundle.
86 * 62 *
87 * @param String 63 * @param String
88 * baseName 64 * baseName
89 */ 65 */
90 - public ResourceBundle create(String baseName) {  
91 - return getResourceBundle(baseName); 66 + public ResourceBundle create(String baseName, Locale locale) {
  67 + ResourceBundle bundle = null;
  68 +
  69 + try {
  70 + ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  71 + bundle = new ResourceBundle(ResourceBundle.getBundle(baseName, locale, classLoader));
  72 +
  73 + } catch (MissingResourceException e) {
  74 + throw new DemoiselleException("File " + baseName + " not found!");
  75 + }
  76 +
  77 + return bundle;
92 } 78 }
93 79
94 /** 80 /**
@@ -98,7 +84,6 @@ public class ResourceBundleProducer implements Serializable { @@ -98,7 +84,6 @@ public class ResourceBundleProducer implements Serializable {
98 @Produces 84 @Produces
99 @Default 85 @Default
100 public ResourceBundle create(InjectionPoint ip, Locale locale) { 86 public ResourceBundle create(InjectionPoint ip, Locale locale) {
101 - this.locale = locale;  
102 String baseName; 87 String baseName;
103 88
104 if (ip != null && ip.getAnnotated().isAnnotationPresent(Name.class)) { 89 if (ip != null && ip.getAnnotated().isAnnotationPresent(Name.class)) {
@@ -107,29 +92,6 @@ public class ResourceBundleProducer implements Serializable { @@ -107,29 +92,6 @@ public class ResourceBundleProducer implements Serializable {
107 baseName = "messages"; 92 baseName = "messages";
108 } 93 }
109 94
110 - return create(baseName); 95 + return create(baseName, locale);
111 } 96 }
112 -  
113 - /**  
114 - * This method checks if the bundle was created already. If the bundle has not been created, it creates and saves  
115 - * the bundle on a Map.  
116 - */  
117 - private ResourceBundle getResourceBundle(String baseName) {  
118 - ResourceBundle bundle = null;  
119 -  
120 - if (map.containsKey(baseName + "-" + this.locale)) {  
121 - bundle = map.get(baseName + "-" + this.locale);  
122 -  
123 - } else {  
124 - try {  
125 - bundle = new ResourceBundle(ResourceBundle.getBundle(baseName, this.locale));  
126 - } catch (MissingResourceException e) {  
127 - throw new DemoiselleException("File " + baseName + " not found!");  
128 - }  
129 - map.put(baseName + "-" + this.locale, bundle);  
130 - }  
131 -  
132 - return bundle;  
133 - }  
134 -  
135 } 97 }