Нет: http://code.google.com/p/google-web-toolkit/issues/detail?id=6046
До тех пор, пока предложенный API не будет реализован (EntityLocator
, в комментарии № 1, но мне не ясно, как информация о версии может быть восстановлена из ее сериализованной форма), вам придется каким-то образом отправить версию обратно на сервер.
Как я уже говорил в этом выпуске, этого нельзя сделать, просто сделав свойство version доступным в прокси-сервере и установив его;но вы можете добавить другое свойство: его получение всегда будет возвращать null
(или аналогичное несуществующее значение), так что установка его на стороне клиента в значение свойства "true" версии всегда будет производитьизменение, которое гарантирует, что значение будет отправлено на сервер как часть «свойства diff»;и на стороне сервера вы могли бы обрабатывать вещи либо в установщике (когда RequestFactory применяет «свойство diff» и вызывает установщик, если значение отличается от «истинной» версии, тогда генерировать исключение), либо в службеметоды (сравните версию, отправленную с клиента - которую вы получите от получателя, отличного от того, который отображен на клиенте, так как он всегда должен возвращать null
- в «истинную» версию объекта, и поднимитеошибка, если они не совпадают).
Что-то вроде:
@ProxyFor(MyEntity.class)
interface MyEntityProxy extends EntityProxy {
String getServerVersion();
String getClientVersion();
void setClientVersion(String clientVersion);
…
}
@Entity
class MyEntity {
private String clientVersion;
@Version private String serverVersion;
public String getServerVersion() { return serverVersion; }
public String getClientVersion() { return null; }
public void setClientVersion(String clientVersion) {
this.clientVersion = clientVersion;
}
public void checkVersion() {
if (Objects.equal(serverVersion, clientVersion)) {
throw new OptimisticConcurrencyException();
}
}
}
Обратите внимание, что я не проверял это, это чистая теория.