为了更好地理解RMI,我正在用java构建小型电子银行项目。
事实上,我曾想过,在执行客户要求将款项存入银行账户时,可能会出现任何错误。
换句话说,让我们假设有一个客户想把钱存入他的银行帐户,所以客户机程序会向服务器发送一个请求,以便远程执行远程方法deposit()。现在,假设由于某些错误,请求一时无法发送,因此客户端将发送新请求,因为服务器没有接收到第一个请求。第二个请求已正确执行。现在,假设服务器接收到第一个请求并执行它一段时间后,就会出现这样的问题:请求已经执行了两次,但是客户机只想存钱一次。
到目前为止,我尝试的是在客户端表(包含idClient、密码和余额)中添加一个名为idRequest的列,以检查在执行之前是否发送了一个请求。但这似乎是个糟糕的解决方案。
如何更好地解决这个问题(而不需要在数据库中的客户端数据表中添加新列以标识最后发送的请求)?
发布于 2015-04-10 23:49:18
你的问题没道理。你描述的情况是不可能的。RMI客户端在第一个远程方法返回之前不能调用第二个远程方法,除非它是多线程的,在这种情况下,simpe解决方案是删除多线程。当方法返回时,它已经在服务器上完全执行了。
TCP还防止数据偏离顺序,尽管RMI可以使用多个连接,这使得这有点不相关。
您还需要注意,RMI有“最多一次”的传递语义。
你似乎在发明什么都不存在的问题。
但是,出于其他原因,您确实需要查找‘事务性幂等效应’。
https://stackoverflow.com/questions/29572082
复制相似问题