Comment injecter un non-classe sérialisable (comme java.util.ResourceBundle) avec Soudure

Je veux créer un Producteur qui le rend possible d'injecter un java.util.ResourceBundle dans l'une des classes afin d'obtenir les Chaînes localisées facilement. Mon ResourceBundle-Producteur ressemble à ceci:

public class ResourceBundleProducer {
  @Inject       
  public Locale locale;

  @Inject       
  public FacesContext facesContext;

  @Produces
  public ResourceBundle getResourceBundle() {
    return ResourceBundle.getBundle("/messages", locale )
  }
}

L'Injection de paramètres Régionaux et FacesContext fonctionne (j'ai pris le correspondant pour les producteurs de la Couture 3 Source Alpha). Mais malheureusement, ResourceBundle n'est pas Sérialisable et, par conséquent, ne peuvent pas être produites de cette façon. J'obtiens l'Erreur suivante à partir de Soudure lorsque vous essayez d'accéder à un JSF-page qui appelle un haricot qui utilise mon 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

Est-il possible d'obtenir mon ResourceBundleResolver de travail? Ou existe-il d'autres mécanismes pour obtenir une fonctionnalité similaire?
Merci à l'avance!

EDIT:

Bon, je vais passé une partie de ma peine le nombre de points gagnés 😉
Acceptera également une bonne solution de contournement pour ce problème!

J'ai reçu un autre exemple où la création d'un Producteur ne fonctionne pas: un FlashProducer. Un FacesContext-Flash ne peut pas être produit parce que Flash n'est pas sérialisable.

InformationsquelleAutor ifischer | 2010-06-08