RMI的一个比较棘手的问题
有一个RMI远程对象,在RMI中注册后,有多用户在同一时段内访问该服务。
要求是RMI服务端需要记录每一个访问用户的一些状态信息,在用户发了一个新的请求时,要求能够把每一个用户的状态信息明确区分出来,并返回一些状态信息给用户,类似于有状态的session bean。
当前采用的实现方法是用一个HashMap对象和一个自定义的数据model来实现,key为用户id,用户相关信息为model实例,可以实现基本要求。但是对于用户状态的管理比较复杂,需要自己实现对长时间无动作的用户状态信息进行清理,还有并发问题可能也是一个瓶颈。
现在的问题是有没有更好的在RMI服务段保持用户状态的解决方法?
先说几种没有折中的情况:
1、必须RMI服务端保存用户的一些信息。
2、已经明白问题的实质在于多用户都是请求的同一个RMI服务端对象实例,这个实例中的属性也为大家共用,所以,一个用户的更改动作就会让其他用户也得到更该后的结果,如果有办法可以对不同的用户创建不同的服务对象实例,但是都是同一个服务注册名称,这样就不用自己维护HashMap中的状态了,每一个用户的状态可以维护在自己的对象实例中,直到用户断开连接该实例不再有引用被回收站回收为止。