Ошибка сериализации Spring Webflow для объекта, содержащего ссылку на репозиторий данных JPA (интеграция JSF)

Spring Webflow: 2.3.1
Spring Data: 1.0.2
JSF: 2.1.9
Primefaces: < сильный>3.3.1

Я пытаюсь объединить репозитории Spring Data JPA с JSF DataModel, в данном случае Primefaces с LazyDataModel. Это происходит в веб-приложении, интегрирующем Spring с JSF, с использованием Spring Webflow.

Проблема в том, что я использую JpaRepository внутри LazyDataModel, который находится в ViewScope Spring Webflow:


Не удалось сериализовать выполнение потока; убедитесь, что все объекты, хранящиеся в области потока или флэш-памяти, являются сериализуемыми org.springframework.webflow.execution.repository.snapshot.SerializedFlowExecutionSnapshot.(SerializedFlowExecutionSnapshot.java:75)"


Без JpaRepository внутри LazyDataModel я не могу получить правильную страницу и использовать модель разбиения на страницы данных Spring. Я уже нашел кого-то с такой же проблемой, но, к сожалению, никто не ответил:

http://forum.springsource.org/showthread.php?116022-Webflow-Serialization-error-on-object-holding-ref-to-JPA-Data-Repository

Спасибо за помощь заранее

С наилучшими пожеланиями

ДжейСимас


person João Simas    schedule 29.06.2012    source источник


Ответы (2)


Уже нашел решение этой проблемы!

Всякий раз, когда вам нужно добавить ссылку на репозиторий Spring Data JPA в объект, который будет жить в вашем контексте весеннего веб-потока, просто объявите репозиторий JPA временным! Затем вам нужно добавить следующие аннотации в объект, содержащий временную ссылку:

  • @Configurable — чтобы пометить класс для настройки на лету (это добавит некоторые накладные расходы вашему приложению, будьте осторожны и используйте эту аннотацию только тогда, когда вам это нужно)
  • @Autowired — добавьте это во временный репозиторий JPA.

Итак, если вы расширяете базовый класс DataModel JSF и хотите добавить репозиторий JPA, вот пример:

@Configurable
public class XptoLazyDataModel extends LazyDataModel<Xpto> {

    @Autowired
    private transient JpaRepository<Xpto> repository;

 (...)
}

Вот и все. Надеюсь, что это может помочь кому-то.

С наилучшими пожеланиями

person João Simas    schedule 11.07.2012

Мне также пришло в голову, что я должен применить ключевое слово transient к моему полю репозитория JPA, как и вы. Это решило проблему, однако мне не нужно было использовать @Configurable или @Autowired.

person J Slick    schedule 09.12.2012