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

Java 如果JNDI可以序列化到本地JVM,为什么我们需要RMI来调用该方法?,java,rmi,jndi,Java,Rmi,Jndi,当我使用JNDI从远程服务器获取对象时,该对象可以序列化到本地JVM,这样我假设我们可以在本地调用该对象上的方法而无需RMI,那么为什么需要RMI呢?是一种查找和目录服务。它提供了在某些上下文中按名称获取资源的标准化方法。通常,它用于从应用服务器上下文获取共享资源,但根据实现的不同,它还可以提供以标准化方式查找表示远程资源的项的功能 是Java平台内置的远程方法调用技术。它允许通过二进制协议调用远程java对象方法。它使用Java内置的序列化处理使通过网络传递的远程调用和参数看起来是透明的。RM

当我使用JNDI从远程服务器获取对象时,该对象可以序列化到本地JVM,这样我假设我们可以在本地调用该对象上的方法而无需RMI,那么为什么需要RMI呢?

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

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

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

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

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

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

我假设我们可以在本地调用这个对象上的方法,而无需 RMI

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

当客户端调用远程方法时,它从不直接调用对象,而是使用存根对象

因此,您从JNDI服务获得的是存根,而不是远程对象

我假设我们可以在本地调用这个对象上的方法,而无需 RMI

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

当客户端调用远程方法时,它从不直接调用对象,而是使用存根对象

因此,您从JNDI服务获得的是存根,而不是远程对象

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

所以你可以远程调用方法。已反序列化到本地JVM中的对象在JVM中执行。远程对象在远程JVM中执行,即使您从本地JVM调用它

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


所以你可以远程调用方法。已反序列化到本地JVM中的对象在JVM中执行。远程对象在远程JVM中执行,即使您从本地JVM调用它。

RMI并不总是必需的。如果您需要它,那是因为您查找的是RMI服务。大量的JNDI查找返回其他资源。RMI并不总是必要的。如果您需要它,那是因为您查找的是RMI服务。大量JNDI查找会返回其他资源。自1998年以来,您不需要骨架。自1998年以来,您不需要骨架。