Бины JSF и проблема сериализации

У меня проблема с компонентами JSF, использующими сервисы, управляемые Spring. Я получил сообщение о том, что bean-компонент Spring, используемый в JSF-компоненте, не сериализуем.

@ManagedProperty("#{customerService}")
private CustomerService customerService;

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

Я работал с проектом JSF с использованием сервисов Spring, и таких проблем не было, поэтому такое сотрудничество должно быть возможным. Но этот проект сделан с нуля на основе примеров проектов, поэтому, должно быть, что-то не так с конфигурацией сотрудничества Spring-JSF, но я не знаю, где искать.

Конфигурация Spring для JSF:

<!-- JSF and Spring are integrated -->
<application>
    <el-resolver>
        org.springframework.web.jsf.el.SpringBeanFacesELResolver
    </el-resolver>
</application>

Как решить эту проблему?

1 ответ

Решение

Нет способа избежать тумана сериализации JSF. Даже бины ApplicationScoped сериализуются (когда они вводятся в другие бины).

Но решение было принято на стороне весны. Вы должны использовать прокси с областью действия.

Чтобы обернуть компонент в сериализуемый прокси, вы должны добавить его в тело компонента:

<aop:scoped-proxy proxy-target-class="true"/>

Весеннее пространство имен AOP и spring-aop зависимость должна быть добавлена.

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

И это все! В bean-компоненте будет сериализуемый элемент, прокси, который будет перезагружать bean-компонент из контекста Spring при десериализации.

Единственный туман здесь заключается в том, что я должен создать прокси-сервер уровня класса cglib. JRE-прокси не работал, потому что интерфейс не был доступен во время десериализации... Я не совсем понимаю, почему, но у меня есть рабочее решение, по крайней мере.

Другие вопросы по тегам