Рефакторинг пакетов, содержащих классы JDO @PersistenceCapable в Google App Engine - PullRequest
4 голосов
/ 20 июля 2010

У меня есть набор классов устойчивости JDO в пакетах, которые необходимо реорганизовать.

Я знаю, что если вы измените имя класса, вам нужно обновить объекты "BigTables". Однако, если я изменю пакет, к которому принадлежат объекты Java, будет ли это означать, что объекты данных в «BigTables» необходимо каким-то образом обновить?

т.е. com.example.test.Person -> com.example.blah.Person

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Я предполагаю, что ситуация такова:

У меня есть класс "com.peter.Foo", который я сохранял с помощью JDO, и я хочу изменить его на "com.nick.Foo", нужно ли будет обновлять все существующие сущности Foo? Другими словами, использует ли JDO имена пакетов при сопоставлении класса Java с типом хранилища данных?

AFAIK, инструменты JDO в appengine используют только имя класса. Говорят так, потому что, когда я смотрю в консоли администратора, статистика как dataviewer, так и хранилища данных ссылается на мои сущности только по имени класса. Следовательно, если вы сохраняете имена классов одинаковыми и изменяете только имена пакетов, ваши сущности должны быть в порядке.

1 голос
/ 21 июля 2010

Небольшое количество этого задокументировано в официальных документах под Поля объектов и свойства сущностей . Вот результат с точки зрения правил рефакторинга:

  • Добавление нового обнуляемого поля в ваш класс приведет к тому, что все существующие сущности будут иметь значение NULL для этого поля.
  • Добавление нового поля коллекции или массива приведет к тому, что все существующие сущности будут иметь пустую коллекцию или массив для этого поля.
  • Добавление нового необнуляемого поля приведет к возникновению исключения при попытке загрузить существующие объекты.
  • Удаление поля не приведет к ошибке; существующие объекты будут сохранять старое поле, пока они не будут загружены и сохранены снова.
  • Изменение типа поля приведет к тому, что App Engine попытается преобразовать старые значения в новый тип данных; исключение будет выдано, если приведение недействительно. Исключение составляют числовые типы; в этом случае значение преобразуется, а не приводится, и переполнения не вызывают исключение.

Если вам нужно выполнить рефакторинг, который не может быть достигнут с помощью простых модификаций, как описано выше, вы, вероятно, захотите использовать библиотеку App Engine mapreduce .

...