Commit 26aeb858c520ab44a3c018745414d5275148d18d
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
Showing
3 changed files
with
22 additions
and
54 deletions
Show diff stats
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 | } |