Java Kryo - проблемы обратной совместимости и строгий процесс сериализации / десериализации - PullRequest
0 голосов
/ 13 января 2020

Мы используем Kryo для сериализации больших java объектов при передаче их в HTTP-запросе между несколькими клиентами и одним общим сервером.

Допустим, например, мы сериализуем объект следующим образом:

class Person {

    private long id;
    private String name;

    public Person() {
    }
}

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

  1. , когда нам нужно изменить объект Person (например, добавить новое поле) ) - для обеспечения обратной совместимости со старыми клиентами, которые все еще используют старый Person объект - мы создаем еще один Person класс (v2.Person).

    Затем мы десериализуем данные от старых клиентов, использующих старый Person, и от новых клиентов, использующих v2.Person. Это создает много дублирования кода.

  2. Если, например, я перемещаю объект v2.Person в другой пакет, это вызывает следующие проблемы:

    say Я переместил класс с old_pacakge.v2.Person на new_package.v2.Person. Когда я пытаюсь десериализовать объект v2.Person, исходящий от клиента, - я получаю ClassNotFoundException: old_pacakge.v2.Person.

    Чтобы уточнить - клиент использует объект Person из jar зависимостей, созданный кодом сервера .

    Я знаю, что это потому, что при сериализации , крио пишет имя класса, а при десериализации он пытается найти этот класс в пути к классам. и терпит неудачу (потому что v2.Person перемещено).

    В идеале - я хотел бы иметь возможность сериализовать класс с определенной структурой - и десериализовать его с другим классом, который имеет такую ​​же структуру , но не в зависимости от местоположения класса .

Мы не смогли решить эти две проблемы. Мы много читали о Kryo и о том, как люди решают проблемы обратной совместимости, но обнаружили, что у многих людей есть такие же проблемы, и они не могут найти простые / стандартные решения.

Существуют ли стандартные / лучшие практики для решения этих проблем?

...