Вторая компиляция из одних и тех же источников приводит к разному набору файлов gwt.rpc. - PullRequest
1 голос
/ 25 ноября 2011

Я хотел бы продолжить этот вопрос gwt-serialization-policy-hosted-mode-out-of-sync . Короче говоря, когда я выполняю RPC из размещенного браузера, этот вызов не выполняется на сервере, за исключением.

    INFO: GwtRpcEventSrvc: ERROR: The serialization policy file '/84EC7BA65AF8175BAA99B47877FDE163.gwt.rpc' was not found; did you forget to include it in this deployment?
    SEVERE: GwtRpcEventSrvc: WARNING: Failed to get the SerializationPolicy '84EC7BA65AF8175BAA99B47877FDE163' for module 'http://host:19980/MYAPP/'; a legacy, 1.3.3 compatible, serialization policy will be used.  Youmay experience SerializationExceptions as a result.
    SEVERE: Exception while dispatching incoming RPC call

Когда я выполняю тот же RPC из браузера, то запрос успешно выполняется на сервере.

Кроме того, я наблюдал странное поведение компилятора GWT, которое могло привести к проблеме с режимом размещенного браузера.

Я предполагаю, что когда я делаю две последующие компиляции одного и того же кода, результат отдельных компиляций должен быть одинаковым. Я имею в виду, что по крайней мере файлы xxxxx.html и yyyyy.gwt.rpc должны быть одинаковыми. (Где xxxxx и yyyyy - длинные числа, такие как 84EC7BA65AF8175BAA99B47877FDE163.)

В настоящее время у меня есть две версии моего проекта.

  • Старый проект, скомпилированный GWT 1.7, который не страдает от проблемы с размещенным браузером, описанной в gwt-serialization-policy-hosted-mode-out-of-sync
  • Новый проект, скомпилированный GWT 2.0.4. Этот новый проект основан на старом проекте. Этот проект страдает от проблемы размещенного браузера.

Случай 1: Старый проект с GWT 1.7

Я взял свой старый проект, который был скомпилирован GWT 1.7. Я сделал две компиляции и сравнил артефакты компиляции. Файлы gwt.rpc были одинаковыми , в то время как html-файлы имели различное содержимое и имя . Поскольку файлы gwt.rpc были всегда одинаковыми, у меня не было проблем с размещенным браузером.

Случай 2: Новый проект с GWT 2.0.4

Я скомпилировал его дважды, и оба gwt.rpc и html-файлы отличались . Поэтому вызов RPC в размещенном браузере не выполнен на сервере из-за отсутствия файла gwt.rpc.

Случай 3: Старый проект с GWT 2.0.4

Я скомпилировал его дважды, и оба файла gwt.rpc и html отличались . Поэтому вызов RPC в размещенном браузере не выполнен на сервере из-за отсутствия файла gwt.rpc.

Я провел некоторое исследование и обнаружил, что , когда я закомментирую элемент данных в классе Data, который передается с сервера на клиент, затем скомпилированные файлы начинают становиться одинаковыми.

    class Data implements IsSerializable {
           List<IsSerializable> data;
           ...
    }
  1. Я хотел сделать то же самое в новом проекте, но, похоже, нужно изменить много классов. Таким образом, проблема растет с ростом проекта.
  2. Я не знаю, что использовать вместо

    List<IsSerializable> data;
    

    для передачи данных.

1 Ответ

0 голосов
/ 26 ноября 2011

Вам нужно прочитать больше о политиках сериализации GWT:

Сериализуемые типы

Обычно вы не смешиваете файлы .rpc, если только вы не выполняете расширенные вызовы RPC непосредственно на ваш сервер.

Ваш сериализуемый объект:

class Data implements IsSerializable {
      List<IsSerializable> data;
       ...
}

Пользовательский класс является сериализуемым, если применимо все следующее: Он присваивается IsSerializable или Serializable, потому что он непосредственно реализует один из этих интерфейсов или потому что он происходит от суперкласса, который делает Все неокончательные, непереходные поля экземпляров сами по себе сериализуемы, и Начиная с GWT 1.5 он должен иметь конструктор по умолчанию (без аргумента) (с любым модификатором доступа) или вообще не иметь конструктора.

Так что вы, вероятно, должны иметь что-то вроде:

class Data implements IsSerializable {
      List<YOUR_TYPE> data;
       ...
}

Шаблон вашего списка является типом, вы не устанавливаете 'IsSerializable' ... это должно быть что-то вроде:

List<int> data;
...