我是否需要一台用于机器加载Java RMI的Web服务器?

时间:2016-02-09 17:22:50

标签: java rmi

我试图让两个Java进程通过RMI一起交谈。在2016年。在Java 8上。

我感觉事情已经发生了变化,但我是一个老式的家伙,并希望坚持普通的RMI。大多数在线文档都过时了。其余部分介于RMI框架的各种变化之间。我们目前在线: -

  • 通过rmic的原始存根/骨架方法

  • 动态生成的存根文件发布在Java 4

  • 之后
  • 对JDK 7 Update 21中的codebase参数的更改

  • 提及此tutorial

  • 中的HTTP / FTP服务器

我有一个client.class和一个server.class,每个都在不同的物理机器上。我不确定是否需要运行独立的HTTP服务器(例如Apache httpd)来提供存根文件供客户端下载。这似乎是codebase参数的重点。这对我来说似乎也是多余的,但并不是因为动态生成的存根文件归因于RMI注册表程序。如果我必须运行httpd,这是否也嘲弄拥有全Java解决方案?您将从Web主目录提供哪些文件?它是server.class的第二个副本,而不是导出到RMI注册表的副本吗?这一切似乎都是一个混乱的文档 - 盟友。

机器加载RMI所需的Web服务器是什么?

2 个答案:

答案 0 :(得分:1)

  

机器加载RMI所需的Web服务器是什么?

NO。 特别需要网络服务器。只是服务器机器(具有远程对象帮助实现远程接口的机器)应该从客户端机器可见(可被发现)(机器调用方法)。

我已经构建了多个客户端 - 服务器应用程序和分布式计算应用程序,其中唯一的事情是使调用者基本上可以发现被调用者。就像应用程序在本地网络中运行一样,只需配置/etc/hosts文件就能为我完成工作。

  

我有一个client.class和一个server.class,每个都在不同的物理上   机器。我不确定是否需要运行独立的HTTP   服务器(如Apache httpd)提供存根文件供下载   由客户。

NO。上面已经说明了。

  

如果我这样做,这也不会嘲弄拥有全Java解决方案   必须运行httpd?您将从Web主页提供哪些文件   目录?它是server.class的第二个副本,而不是那个副本   导出到RMI注册表?

对于在网络中运行的简单客户端 - 服务器应用程序(简单的非Web应用程序),您不需要任何Web目录。

远程对象的存根充当客户端的本地代表或远程对象的代理。调用者在本地存根上调用一个方法,该方法负责对远程对象执行方法调用。在远程JVM中,每个远程对象可能具有相应的骨架(在Java 2平台环境中,不需要骨架)。骨架负责将调用分派给实际的远程对象实现。有关Java RMI体系结构的详细信息,请阅读this链接。

无需下载额外文件即可实现此目的。

答案 1 :(得分:1)

您可以在没有代码库功能的情况下使用RMI。这不是强制性的。

它不仅可以访问存根,还可以访问客户端可能不知道的任何其他服务器端类:例如,如果指定远程方法返回接口或抽象类,代码库功能可用于部署返回值的实际实现。这允许更新实现类,而不会导致大量客户端部署问题。它应该被视为部署解决方案,而不是RMI的组成部分。

  

我是一个老式的家伙,我想坚持使用普通的RMI。大多数在线文档都过时了。

没有太大变化。 1.5中的动态存根,1.7中的代码库调整,1.2以后没有其他主要内容。

  

我不确定是否需要运行独立的HTTP服务器(例如Apache httpd)来提供存根文件供客户端下载。

你不是。见上文。

  

这似乎是codebase参数的重点。这对我来说似乎也是多余的,但并不是动态生成的存根文件归因于RMI注册表程序。

只有您认为代码库功能仅适用于存根,但它不是:见上文。您甚至可以在反向使用它,从客户端到服务器,用于接口的实现类或用作远程方法参数的抽象类。

  

如果我必须运行httpd,这还会嘲弄拥有全Java解决方案吗?

没人说你必须运行HTTPD,甚至是HTTP服务器。例如,它可以是FTP。它可以是用Java实现的HTTP服务器。很多可能性。或者您根本无法使用该功能。

  

您将从Web主目录中提供哪些文件?它是server.class的第二个副本吗?

没有。为什么?客户端不需要server.class。

  

不是导出到RMI注册表的那个?

那也不是server.class,它是存根。

  

这一切似乎都是一个混乱的文档 - 盟友。

我不同意。以上没有任何猜测出现在文档中。

  

机器加载RMI所需的Web服务器是什么?

没有