我的GWT应用程序加载时要做的第一件事是通过RequestFactory从服务器请求当前登录用户。这会阻塞,因为我需要用户的属性才能知道如何进行。这只花费了不到500毫秒的时间,但确实让我感到讨厌的是,这段时间该应用程序被阻止了。生成jsp时,我已经在服务器上拥有了User,那么为什么不将序列化的User添加到jsp中并完全消除此请求呢?
我有两个问题使我无法这样做:
我还没有找到做#1的好方法。这个逻辑似乎埋在ServiceLayerDecorator中,而没有简单的隔离方法?我可能在这里错了。
通过ProxySerializer,第二个似乎更容易,但是当我在服务器上时如何获得请求工厂?您不能在服务器上调用
GWT.create
。我一直在研究AutoBeans,但这不能处理上面的#1。我的UserProxy引用了我要维护的其他EntityProxy的集合。
最佳答案
如果为代理创建AutoBeanFactory,则可以使用AutoBeans:
创建服务器端
RequestFactory
并调用相同的普通请求。响应将包含UserProxy
(但在服务器上)。 AutoBean<UserProxy> bean = AutoBeanUtils.getAutoBean(receivedUserProxy);
String json = AutoBeanCodex.encode(bean).getPayload();
AutoBean<UserProxy> bean = AutoBeanCodex.decode(userAutoBeanFactory, UserProxy.class, json);
在服务器上创建一个进程内的RequestFactory(tutorial):
public static <T extends RequestFactory> T create( Class<T> requestFactoryClass ) {
ServiceLayer serviceLayer = ServiceLayer.create();
SimpleRequestProcessor processor = new SimpleRequestProcessor( serviceLayer );
T factory = RequestFactorySource.create( requestFactoryClass );
factory.initialize( new SimpleEventBus(), new InProcessRequestTransport(processor) );
return factory;
}