Como injetar uma classe não serializável (como java.util.ResourceBundle) com o Weld
Eu quero criar um Producer que torne possível injetar um java.util.ResourceBundle em qualquer classe para obter Strings localizadas facilmente. Meu ResourceBundle-Producer aparece assim:
public class ResourceBundleProducer {
@Inject
public Locale locale;
@Inject
public FacesContext facesContext;
@Produces
public ResourceBundle getResourceBundle() {
return ResourceBundle.getBundle("/messages", locale )
}
}
Os trabalhos Injection of Locale e FacesContext (tiraram os produtores correspondentes da Fonte Alpha Seam 3). Infelizmente, porém, o ResourceBundle não é serializável e, portanto, não pode ser produzido dessa maneira. Estou recebendo o seguinte erro do Weld ao tentar acessar uma página JSF que chama um bean que usa meu ResourceBundle:
Caused by: org.jboss.weld.IllegalProductException: WELD-000054 Producers cannot produce non-serializable instances for injection into non-transient fields of passivating beans\\n\\nProducer\: org.jboss.weld.bean-/D:/Program Files (x86)/GlassFish-Tools-Bundle-For-Eclipse-1.2/glassfishv3/glassfish/domains/teachernews/applications/teachernews/-ProducerMethod-services.producers.ResourceBundleProducer.getResourceBundle()\\nInjection Point\: field web.PersonHome.bundle
Existem maneiras de fazer meu ResourceBundleResolver funcionar? Ou existem outros mecanismos para obter uma funcionalidade semelhante? Desde já, obrigado!
EDITAR:
Ok, gastarei alguns dos meus pontos pouco ganhos;) Também aceitarei uma boa solução alternativa para esse problema!
Eu tenho outro exemplo em que a criação de um produtor não funciona: um FlashProducer. Um FacesContext-Flash também não pode ser produzido porque o Flash não é serializável.