0
Context ic = new InitialContext();
Object o = ic.lookup("EJB");
AdviceHome home = (AdviceHome) PortableRemoteObject.narrow(o, AdviceHome.class);

以上是使用 Narrow Cast 的代码。在我的书中,他们解释说使用窄转换来假设服务器正在使用 IIOP(尽管服务器实际上只是使用 RMI)。

这本书仍然说:

客户端代码不会独立于供应商!换句话说,如果你不使用narrow,你将不会有一个可移植的应用程序,因为在使用IIOP 的服务器上重新部署bean 会破坏客户端

我有两点不明白:

1) IIOP 协议比普通的奇数 RMI 协议大:所以,我们已经将一个小对象转换为大对象,对吧?

2)我真的不明白为什么客户端代码会破坏这么多。为什么在这种情况下使用 IIOP 的服务器会破坏客户端的代码?因为客户端只是调用了一些在 EJBObject 接口中定义的方法。而且我无法想象客户端代码将如何依赖于服务器使用的协议。

请用清晰的解释和简单的例子帮助我。

谢谢 :)

4

1 回答 1

0

narrow方法类似于downcast。文档所说的是不要使用向下转换,即使在执行普通 RMI 时这将始终有效。所以这个词的意思narrow是类型理论意义上的——从一般类型缩小到特定类型PortableRemoteObject

于 2012-04-29T08:08:40.177 回答