在没有来自越界消息的请求的情况下解码GWT RequestFactory负载

在没有来自越界消息的请求的情况下解码GWT RequestFactory负载,gwt,comet,requestfactory,atmosphere,Gwt,Comet,Requestfactory,Atmosphere,我们使用GWT Atmosphere将字符串从服务器发送到客户机,它工作得非常好 但是,我们希望将整个实体从服务器发送到客户端,由GWT RequestFactory序列化。不需要客户的请求 因此,我尝试使用SimpleRequestProcessor#createOobMessage(domainObject)并将有效负载发送到客户端。计算有效载荷是可行的 然后,我将使用AutoBeanCodex#decode对该消息进行解码,并将domainObject作为响应消息的调用列表中正确的Enti

我们使用GWT Atmosphere将字符串从服务器发送到客户机,它工作得非常好

但是,我们希望将整个实体从服务器发送到客户端,由GWT RequestFactory序列化。不需要客户的请求

因此,我尝试使用
SimpleRequestProcessor#createOobMessage(domainObject)
并将有效负载发送到客户端。计算有效载荷是可行的

然后,我将使用
AutoBeanCodex#decode
对该消息进行解码,并将
domainObject
作为
响应消息的调用列表中正确的
EntityProxy
进行读取-但是当我这样做时,它需要设置某种类型的
serverId
以在
AbstractRequestFactory#getId
中继续(第260行附近:
assert serverId!=null:“serverId”

关于如何在没有客户端发送请求的情况下解码代理负载,有什么建议吗

更新
这个问题的用例是类似聊天的交流。客户端不会从服务器请求消息,而是会收到新消息的通知。我们希望在通知负载中包含消息和关于谁发送了消息的信息。由于我们在项目中使用RequestFactory,我们希望利用已设置所有代理连接的优势,现在只需将相关对象图推送到客户端。

为什么要尝试序列化RF消息并将其作为实体发送?RequestFactory不仅仅是一种通过网络发送数据的方式,它至少有三种不同类型的消息可以从客户端发送到服务器:创建实例、调用设置器和调用服务方法。根据服务器上发生的情况,不仅可以将数据返回到客户端,还可以返回有关所做更改的消息,以及根据JSR303规则,这些设置程序是否进行了无效更改的消息

您是否正在尝试一种更简单的接口方式来描述、发送和接收实体?或者您真的希望在客户端和服务器上都使用RF连接,以便可以批处理请求、引用EntityProxyId实例并让客户端只发送差异

如果您只是想要更简单的对象声明,请尝试使用您已经看过的
AutoBean
s和
AutoBeadCodex
——您将能够轻松地在客户端和服务器上创建和封送实例,并且您可以将它们作为字符串通过atmosphere的传输传递

如果您确实想要RequestFactory,但运行的不是AJAX,那么还有其他选项。不是通过大气发送/接收字符串(我相信这是为了提供对RPC调用的支持支持),而是考虑使用底层的推送层来请求请求工厂中的一个新的请求传输。
com.google.web.bindery.requestfactory.shared.RequestTransport
可以实现(对于默认的AJAX版本,请参见
com.google.web.bindery.requestfactory.gwt.client.DefaultRequestTransport
),以使用您想要的任何通信机制-并构建服务器,查看
com.google.web.bindery.requestfactory.server.RequestFactoryServlet
,了解通过定位器、服务定位器等推送消息的实际操作


如果你真的想使用大气层和RF,那么考虑建立一个<代码> RequestTransport <代码>,它封装了一个简单的气氛接口,用字符串调用服务器。(再次,请参阅RequestFactoryServlet是如何实现的)。

感谢您的回答和对实现RF的各种方式的深入解释。但是,在这个特定的用例中,我们不想利用RF智能,而是将其用作序列化机制(仅查看服务器)这似乎不是个问题。但客户端出于某种原因似乎要求您准备请求。我正在寻找API位,该位将仅解码服务器发送的消息,因为我们不想请求数据,但只会在事先不知情的情况下通过comet获取数据。如果您只是在寻找序列化机制,那么use
AutoBean
s,而不是RF。IMO,带有服务器推送功能的RF实际上仅用于将实体差异从服务器发送到客户端(与“传统”RF中的客户端到服务器相反).Hi Thomas,这正是我想要的:一个AutoBean实现来解码由服务器编码的AutoBean。无论RF是否是正确的选择。AutoBeanCodex#decode只是希望代码中有某种类型的服务器ID,我无法找到一种方法来规避。有什么建议吗?AutoBeanCodex#decode只需要一个因素y(获取可能通过网络发送的类)、返回的类(获取根类)和有效负载本身。我经常使用AutoBeans直接映射到json(和xml,但这需要更多的工作)由不传递任何服务器id的现有服务创建。AutoBeans需要的唯一属性是接口中的属性,因此请确保您没有扩展其他接口,如EntityProxy。谢谢,我想我可以重新使用已定义的EntityProxy,并以某种方式让工厂复制这些属性-有什么方法可以做到这一点吗?我会很感激的,因为这会让事情变得很容易。