Возможно ли присоединить EntityProxy к другому RequestContext?А я должен? - PullRequest
4 голосов
/ 22 февраля 2012

У меня есть небольшая форма, которая редактирует мою сущность. Я создаю эту сущность, используя один экземпляр RequestContext, а затем в обработчике кнопки «Сохранить» пытаюсь сохранить его, используя другой экземпляр RequestContext.

Попытка сохранения не удалась с ожидаемым исключением: java.lang.IllegalArgumentException: Attempting to edit an EntityProxy previously edited by another RequestContext

Вопросы:

  • Возможно ли присоединить EntityProxy к другому RequestContext?
  • Это правильно делать? Или я должен использовать один RequestContext, сохраняя его как собственность моего класса?

1 Ответ

3 голосов
/ 22 февраля 2012

Повторное использование существующего.Если вам нужен новый, объедините их.Но на самом деле не имеет смысла делать новый.И вот почему:

Когда вы делаете RF-вызов на сервер, он проходит несколько этапов, поскольку он в основном ориентирован на то, как читать и сохранять сущности, и на различные свойства значений, с которыми они работают.

  • Создание или получение любых экземпляров, с которыми нужно иметь дело
  • Применить сеттеры к этим экземплярам, ​​новым или существующим, и проверить их
  • Запустить вызовы службы в качестве методовВызывается для объектов, статических вызовов или вызовов служб.

Эти три шага выполняются в этом порядке, чтобы гарантировать, что объект, измененный и затем переданный вызову службы, имеет смысл, когда он туда попадает.Будущие вызовы (т. Е. Другие запросы) тогда, вероятно, не должны вносить те же самые изменения в одни и те же объекты, и если они это сделают, то они должны вносить эти изменения сами.

Данный RequestContext состоит из всехиз этих вещей тогда.Если у вас было два запроса, и один представлял вызывающие установщики (изменения из формы), а другой - запрос на обслуживание, запуск одного означает только вызов установщиков, но не вызов службы для его сохранения, а запуск других средств.сохранить только вызов без вызова службы.

После того, как EntityProxy был помечен как отредактированный одним контекстом запроса, попытка использовать его в другом контексте почти наверняка является ошибкой, поэтому вы видите исключение:выброшены.Используйте существующий или, если необходимо, используйте RequestContext.append, чтобы переключиться на новый тип RequestContext для фактического запуска операции сохранения.

RequestFactory - это не RPC - ваши объекты не просто Java Beans, ноявляются прокси-серверами (EntityProxy или ValueProxy) какого-либо серверного объекта, и запросы используются для асинхронной манипуляции с ними.

...