Infinispan: класс изменился и десериализация не работает

У меня есть приложение Spring Boot, использующее Infinispan 6.0.1.Final. У меня есть два класса A и B. B расширяет A. И у меня есть кэш, хранящий объекты типа B. Теперь я сделал небольшое изменение, я переместил 2 поля класса и его получатель / установщик из B в A, и я обновил серийный идентификатор в обоих классах. Когда я снова запускаю свое приложение и извлекаю объекты типа B из кэша, перемещенные поля отображаются как пустые.

У меня вопрос: кеш содержит объекты типа B (старая версия B). Я изменил класс B, но с семантической точки зрения класс остается с теми же полями и методами, потому что поля, которые я переместил, теперь находятся в родительском классе. Возможно ли, чтобы десериализация работала так же, как и до смены классов?

1 ответ

Вы должны полагаться на сериализацию Java только тогда, когда знаете, что можете удалить все данные из Infinispan, когда вносите изменения в определения классов своих объектов.

Для представления переносимых объектов используйте закодированные объекты Protobuf:

С protobuf вы лучше контролируете, как ваши данные будут развиваться при обновлении схемы. Кстати, Infinispan поддерживает его очень хорошо, так как это базовое требование для поддержки удаленных запросов и некоторых других расширенных функций.

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