Как ввести несериализуемый класс (как java.util. ResourceBundle) со Сваркой

Я хочу создать Производителя, который позволяет ввести java.util. ResourceBundle в любой класс для получения локализованных строк легко. Мой ResourceBundle-производитель похож на это:

public class ResourceBundleProducer {
  @Inject       
  public Locale locale;

  @Inject       
  public FacesContext facesContext;

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

Инжекция работ Локали и FacesContext (взял соответствующих производителей от Шва 3 Альфа-Источника). Но к сожалению, ResourceBundle не является сериализуемым и поэтому не может быть произведен таким образом. Я получаю следующую Ошибку от Сварки при попытке получить доступ к JSF-странице, которая называет боб, который использует мой 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

Там какие-либо пути состоят в том, чтобы заставить мой ResourceBundleResolver работать? Или там какие-либо другие механизмы должны получить схожую функциональность?Заранее спасибо!

Править:

Хорошо, я буду, потратил некоторые мои едва заработанные очки ;) Также примет хорошее обходное решение для этой проблемы!

Я получил другой пример, где создание Производителя не работает: FlashProducer. FacesContext-Flash также не может быть произведен, потому что Flash не сериализуемый.

20
задан skaffman 19 August 2010 в 08:47
поделиться

1 ответ

Ну, во-первых, ResourceBundle не сериализуемый . См. здесь . И сообщение ясно, что

не может создавать несериализуемых экземпляров для инъекции в непереходные поля пассивирующих bean-компонентов

пассивирующих bean-компонентов ??? Я думаю, что web.PersonHome является либо сеансовым компонентом с отслеживанием состояния, либо компонентом @ConversationScoped. Я прав ??? В таком случае следует пометить свойство пакета как временное

private transient @Inject ResourceBundle bundle;
25
ответ дан 30 November 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: