У меня есть класс Java, который хранится в объекте HttpSession, который сериализуется и передается между серверами в кластерной среде.Для целей этого объяснения давайте назовем этот класс «Person».
В процессе улучшения кода этот класс был перемещен из «com.acme.Person» в «com.acme.entity».Человек".Внутри класс остается точно таким же (те же поля, те же методы, все то же самое).
Проблема в том, что у нас есть два набора серверов, на которых одновременно работает старый код и новый код.Серверы со старым кодом сериализовали объект HttpSession, и когда новый код десериализует его, он генерирует исключение ClassNotFoundException, поскольку не может найти старую ссылку на com.acme.Person.На данный момент с этим легко справиться, потому что мы можем просто воссоздать объект, используя новый пакет.Тогда возникает проблема, что HttpSession на новых серверах будет сериализовать объект с новой ссылкой на com.acme.entity.Person, и когда это не будет сериализовано на серверах, выполняющих старый код, будет выдано другое исключение.На данный момент мы больше не можем иметь дело с этим исключением.
Какова наилучшая стратегия для таких случаев?Есть ли способ указать новым серверам сериализовать объект со ссылкой на старый пакет и отменить сериализацию ссылок на старый пакет на новый?Как бы нам перейти на использование нового пакета и забыть о старом, когда все серверы запустят новый код?