如果JNDI可以序列化到本地JVM,为什么我们需要RMI来调用方法?

时间:2013-08-03 02:38:25

标签: java rmi jndi

当我使用JNDI从远程服务器获取对象时,该对象可以序列化到本地JVM,这样我假设我们可以在没有RMI的情况下在本地调用此对象的方法,那么为什么我们需要RMI呢? / p>

3 个答案:

答案 0 :(得分:4)

JNDI是一个查找和目录服务。它提供了在某些上下文中按名称获取资源的标准化方法。通常它用于从应用程序服务器上下文中获取共享资源,但根据实现,它还可以提供以标准化方式查找项目以表示远程资源。

RMI是Java平台内置的远程方法调用技术。它允许通过二进制协议调用远程java对象方法。它使用Java的内置序列化处理来使远程调用和通过网络传递的参数看起来透明。 RMI要求它自己的目录/查找服务,或者可能不与给定的JNDI实现集成。 (通常它们没有集成。)

所以,考虑到所有这些,希望你能明白为什么你的问题不是很明确。您可能通过JNDI查找远程RMI服务。您可能能够将该远程RMI引用保存(序列化)到磁盘,然后重新构建它以便稍后再次使用它(尽管这可能不是一个好主意。)但无论如何,JNDI和RMI是两个不同的事情。

答案 1 :(得分:1)

  

我假设我们可以在本地调用此对象的方法而不用   RMI

不,重要的是要了解在进行远程方法调用时需要两个额外的对象。在客户端运行的Stub和在服务器端运行的de Skeleton。这些对象执行必要的低级操作。

当客户端调用远程方法时,它永远不会直接调用该对象,而是使用Stub对象。

因此,从JNDI服务获得的是Stub而不是远程对象。

答案 2 :(得分:1)

  

当我使用JNDI从远程服务器获取对象时,该对象可以序列化到本地JVM,这样我假设我们可以在没有RMI的情况下在本地调用此对象的方法,那么为什么我们需要RMI呢? / p>

因此,您可以远程调用方法。已经反序列化到本地JVM中的对象在JVM中执行。远程对象在远程JVM中执行,即使您从本地JVM调用它也是如此。