Wie füge ich eine nicht serialisierbare Klasse (wie java.util.ResourceBundle) mit Weld @ ei

Ich möchte einen Producer erstellen, der es ermöglicht, ein java.util.ResourceBundle in eine beliebige Klasse einzufügen, um leicht lokalisierte Strings zu erhalten. Mein ResourceBundle-Producer sieht so aus:

public class ResourceBundleProducer {
  @Inject       
  public Locale locale;

  @Inject       
  public FacesContext facesContext;

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

The Injection von Locale und FacesContext funktioniert (die entsprechenden Produzenten stammen aus der Seam 3 Alpha Source). Leider ist ResourceBundle nicht serialisierbar und kann daher nicht auf diese Weise erstellt werden. Ich erhalte den folgenden Fehler von Weld, wenn ich versuche, auf eine JSF-Seite zuzugreifen, die eine Bean aufruft, die mein ResourceBundle verwendet:

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

Gibt es irgendwelche Möglichkeiten, um meinen ResourceBundleResolver zum Laufen zu bringen? Oder gibt es andere Mechanismen, um eine ähnliche Funktionalität zu erhalten? Danke im Voraus

BEARBEITEN

Okay, ich werde einige meiner kaum verdienten Punkte ausgeben;) Akzeptiert auch eine gute Umgehung für dieses Problem!

Ich habe ein weiteres Beispiel, in dem das Erstellen eines Produzenten nicht funktioniert: einen FlashProducer. Ein FacesContext-Flash kann auch nicht erstellt werden, da Flash nicht serialisierbar ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage