请教: jboss下 通过rmi调用其他机器上的远程服务

04-03-11 noxel

我的应用部署在jboss之下,他需要通过rmi访问另一台机器上的rmi服务,

现在如果rmi服务器重启,先前的stub自然失效,我们需要通过Naming.lookup 再找一遍,但是这时得到的stub object cast到相应的stub interface时会出现 ClassCastException ,我发现是因为jboss中的应用lookup 服务时,rmi服务器重启前后,是采用不同的classloader (sun.rmi.server.LoaderHandler$Loader)实例,对于jvm是靠class bytecode和class对应的classloader来唯一区别一个类的,

所以对于rmiserver重启之前能顺利cast成功,而rmi server重启之后,由于stub object的classloader换了,jvm认为是不同的类,所以cast 出错。

但是我发现不再jboss下的应用,也就是单独的java application 在rmiserver重启动前后,lookup到的stub object的class loader 是同一个,所以没有这个问题。

不知道jboss在后面做了什么手脚,请各位帮忙解释一下。

猜你喜欢