Как говорит Томас в своем ответе единственный способ в текущем GWT иметь общий код на клиенте и сервере — реализовать один и тот же интерфейс на обеих сторонах и использовать его в вашем общем коде.
Поскольку RF копирует атрибуты с сервера на клиент, как вы говорите в своем запросе, теоретически мы могли бы использовать один и тот же интерфейс (прокси) с обеих сторон (более простой код), установив значение @ValueFor, указывающее на себя.
Давайте посмотрим пример:
// Shared interface in client and server sides
@ProxyFor(Foo.class)
interface Foo extends ValueProxy {
String getBar();
}
// Server side implementation
class FooImpl implements Foo {
String getBar(){return "bar";};
}
В качестве информации, мы используем этот подход в нашем продукте, так как мы можем продавать 2 серверных решения (одно основано на GAE, а другое на CouchDB).
Приведенный выше код работает для клиентского кода, который не создает новые значения, но если вы хотите их создать, достаточно определить локатор значений:
// Say RF which locator to use to create classes in server side
@ProxyFor(value = Foo.class, locator ALocator.class)
interface Foo extends ValueProxy {
}
public class ALocator extends Locator<Foo, String> {
public Foo create(Class<? extends Foo> clazz) {
return new FooImpl();
}
...
}
К сожалению, RF не работает с интерфейсами на стороне сервера. См. проблемы: 7509 и 5762 а>.
Но, как вы можете прочитать в комментариях к проблемам, для это (ожидает рассмотрения). Надеюсь, он будет включен в следующий выпуск GWT.
А пока вы можете использовать этот подход, просто скопировав файл ResolverServiceLayer.java
в свою папку src и применив этот исправление для него.
person
Manolo Carrasco Moñino
schedule
06.04.2013
ValueProxy
, хотя я не использую стандартную модель постоянства в своем бэкэнде. - person   schedule 06.04.2013