Как работать с сериализованным объектом Java, пакет которого изменился?

У меня есть класс Java, который хранится в объекте HttpSession, который сериализуется и передается между серверами в кластерной среде. Для целей этого объяснения давайте назовем этот класс «Person».

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

Какая стратегия лучше всего следовать в таких случаях? Есть ли способ указать новым серверам сериализовать объект со ссылкой на старый пакет и десериализовать ссылки на старый пакет на новый? Как нам перейти к использованию нового пакета и забыть о старом, когда все серверы запустят новый код?

17
задан Alejandro 14 March 2011 в 22:38
поделиться