在RMI中一次执行一个且仅一个请求

时间:2015-04-10 23:15:51

标签: java database client server rmi

我正在用Java构建小型电子银行项目,以便更好地理解RMI。

实际上,我已经考虑过在执行客户要求将钱存入银行账户时出现任何错误的可能性。

换句话说,让我们考虑有一个客户想要将钱存入他的银行账户,因此客户端程序会向服务器发送请求,以便远程执行远程方法deposit()。现在让我们假设由于某些错误而无法立即发送请求,因此客户端将发送新请求,因为服务器没有收到第一个请求。第二个请求已正确执行。现在假设一段时间后服务器收到第一个请求并执行它,问题就出现了:请求已经执行了两次但是客户端只想存钱一次。

到目前为止,我尝试过在Client表中添加一个名为idRequest的列(包含idClient和密码和余额),以检查在执行之前是否发送了先前的请求。但这似乎是不好的解决方案。

如何以更好的方式解决此问题(不在数据库中的客户端数据表中添加新列以识别最后发送的请求)?

1 个答案:

答案 0 :(得分:0)

你的问题没有意义。你描述的情况是不可能的。 RMI客户端无法调用第二个远程方法,直到第一个远程方法返回,除非它是多线程的,在这种情况下,simpe解决方案是删除多线程。当方法返回时,它已在服务器上完全执行。

TCP还可以防止数据不按顺序到达,尽管RMI可以使用多个连接,这使得它有点无关紧要。

您还需要注意RMI最多只有一次'交付语义。

你似乎在发明不存在的问题。

然而,出于其他原因,您需要查找“交易幂等”。