是java RMI远程对象(服务器)单例吗?
我一直在使用
java RMI一段时间,但我无法弄清楚RMI Remote Stubs(在服务器端)是否是单例?我问的原因是:
假设调用链中较低的RMI实现方法之一具有synchronized方法.如果出于某种原因,同步方法中的逻辑混乱(或挂起),则在尝试访问该同步方法时,未来的RMI调用(来自客户端)也会挂起.只有当RMI存根将成为单例时,这才会成立.如果在客户端的每次远程调用时在服务器端创建一个新对象,这将不会成为问题,因为从另一个对象调用方法并且同步方法将不再是问题. 长话短说.我试图了解JVM如何在服务器端内部维护rmi远程对象以及它们是否是单例.我尝试了许多不同的javadoc,但他们没有在任何地方明确提到它. 任何和所有的帮助表示赞赏! 编辑 解决方法
首先,“存根”是一个客户端概念,服务器上没有存根.
对于远程对象本身,RMI系统不会为您实例化对象,您可以创建实例并导出它们.您创建对象的一个??实例,导出该对象,并在特定名称下将其绑定在注册表中.在注册表中从同一名称获取的客户端存根上的所有调用最终都将终止于服务器上的同一对象.
不,您只能在给定名称下绑定注册表中的一个对象.但是绑定的对象本身可以是您自己的对象池的代理,例如使用Spring AOP CommonsPoolTargetSource机制. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |