Предположим, я пытаюсь использовать RequestFactory GWT для передачи неизменяемого типа между клиентом и сервером, двунаправленно.Допустим, базовым типом является TimeOfDay, который предназначен для неизменности:
public class TimeOfDay {
private final int hours;
private final int minutes;
public TimeOfDay(final int hours, final int minutes) {...}
public int getHours() {...}
public int getMinutes() {...}
}
Я могу прокси этого класса с помощью ValueProxy:
@ProxyFor(TimeOfDay.class)
public interface TimeOfDayProxy extends ValueProxy {
public int getHours();
public int getMinutes();
}
Теперь я могу довольно легко создать TimeOfDayэкземпляры на стороне сервера и возвращают их клиенту, через это на стороне сервера:
public class TimeOfDayService {
public static TimeOfDay fetchCurrentTofD() {
return new TimeOfDay(16, 20);
}
}
... и это на стороне клиента:
@Service(TimeOfDayService.class)
public interface TimeOfDayRequestContext extends RequestContext {
Request<TimeOfDayProxy> fetchCurrentTofD();
}
...
final Receiver<TimeOfDayProxy> receiver = new Receiver<TimeOfDayProxy>() {...};
final TimeOfDayRequestContext context = myFactory.timeOfDayRequestContext();
final Request<TimeOfDayProxy> fetcher = context.fetchCurrentTofD();
fetcher.fire(receiver);
...
Это прекрасно работает.Но, если я попробую это в обратном направлении, я столкнусь с препятствиями.То есть на стороне сервера:
public class TimeOfDayService {
public static void setCurrentTofD(final TimeOfDay tofd) {...}
}
... и на стороне клиента:
@Service(TimeOfDayService.class)
public interface TimeOfDayRequestContext extends RequestContext {
Request<Void> setCurrentTofD(TimeOfDayProxy tofd);
}
...
final Receiver<Void> receiver = new Receiver<Void>() {...};
final TimeOfDayRequestContext context = myFactory.timeOfDayRequestContext();
final TimeOfDayProxy tofdProxy = GWT.create(TimeOfDayProxy.class);
<???>
final Request<Void> setter = context.setCurrentTofD(tofdProxy);
setter.fire(receiver);
...
Замедление № 1 в том, что у меня нет способа установить (неизменяемое) содержимое tofdProxy, поскольку GWT.create () просто создает встроенный прокси по умолчанию (т. е. что идет вместо «???»?).Замедление № 2 - это ошибка «Нет установщика» на стороне сервера.
Есть ли какое-то волшебство, чтобы обойти эти препятствия?AutoBeanFactory.create () имеет вариант с двумя аргументами, который принимает объект, обертываемый autobean - что-то вроде этого позаботится о Snag # 1 (если бы такая вещь существовала для create () ValueProxys).Что касается Snag # 2, я уверен, что есть много умных подходов для решения этой проблемы;вопрос в том, были ли еще реализованы в GWT?