2

我目前正在做一个项目,在客户端使用 GWT,RequestFactory 作为传输层,在服务器端使用 Apache Tomcat 和 Hibernate。

我遇到的麻烦涉及导致数据库实体发生更改的服务调用,而这并不是同一服务返回的对象。由于客户端在先前的请求中已经获得了相同的实体,因此它的客户端版本已过时。

这实际上应该不是问题,因为客户端不再需要已更改的实体字段。

问题是,当客户端引用这个相同的实体作为后续服务调用的参数时,没有对其执行任何客户端显式更改,负责在服务器端重建实体的 requestfactory 内部装饰器过程似乎正在持久化过时的数据(通过执行对实体的 Set 方法的调用,这些方法由休眠会话检测并在事务提交时安排更新)。

这个问题只是一个设计缺陷吗?服务调用导致的实体(客户端仍在使用)的任何更改都应该以某种方式显式刷新?我不认为这适用于所有情况,因为同一实体可能仍会因服务器站点自动过程甚至另一个客户端调用执行的更改而过时。

在我看来,requestfactory 应该能够检测到传入服务参数的实体何时过时(通过将其客户端版本与实体的 getVersion() 方法返回的版本进行比较),并以以下形式发出警告一个例外或其他东西,或者至少忽略过时的数据(在我的情况下这已经足够了)。

4

0 回答 0