Задача Google App Engine Push - Использование DeferredTasks вместо предупреждения рабочего сервиса - PullRequest
0 голосов
/ 21 января 2019

В документации содержится предупреждение об использовании DeferredTask, которое гласит:

Предупреждение. Хотя API-интерфейс DeferredTask является удобным способом обработки сериализации, необходимотщательно контролируйте совместимость сериализации объектов, передаваемых в методы полезной нагрузки.Необходим тщательный контроль, поскольку необработанные объекты остаются в очереди задач даже после обновления кода приложения.Задачи, основанные на устаревшем коде приложения, не будут десериализованы должным образом, когда задача будет декодирована с новыми версиями приложения.

Я не понимаю этого.Что значит «тщательный контроль»?У кого-нибудь есть пример того, как можно написать плохой DefeferredTask?

1 Ответ

0 голосов
/ 21 января 2019

Сериализация Java следует определенным правилам, о которых вам необходимо знать. По умолчанию любое изменение в классе Java «нарушает» сериализацию; объекты, сериализованные со старым классом, не могут быть десериализованы новым классом.

Если вы объявите serialVersionUID в своем классе (и не измените значение), то десериализация будет разрешена даже при изменении класса. Он будет делать то, что вы обычно ожидаете, если вы привыкли к сериализации в / из JSON и добавлению / удалению полей в / из ваших классов. То есть, поля, удаленные из классов, оставят данные игнорируемыми, а добавленные новые поля будут иметь значения по умолчанию.

Некоторые люди ненавидят сериализацию Java, а некоторые любят ее. Это полезно и очень удобно при работе с очередью задач. Если вы всегда объявляете serialVersionUID, вы, вероятно, будете в порядке ... большинство ошибок вызовут исключения, когда вы попытаетесь сериализовать данные, и вы довольно быстро это выясните.

...