Naming.lookup()做什么?

时间:2017-02-27 21:47:08

标签: java casting rmi

我一直在通过一个非常简单的示例来设置远程方法调用应用程序,并且在浏览客户端代码时,我无法理解一个代码,如下所示。当然,我的知识存在差距,因为我虽然界面不能有对象unless you use Anonymous Inner Class。所以在下面的代码中我们是如何创建远程接口的对象的。如果我不得不猜测,那对我来说似乎是某种类型的铸造。

import java.rmi.*; 
public class HelloClient { 
  public static void main(String args[]) { 
  try { 
    if (args.length < 0) { 
      System.err.println("usage: java HelloClient string …\n"); 
      System.exit(1); 
    } 
HelloInterface hello = (HelloInterface)Naming.lookup("//localhost/Hello");          

最后一行是我无法理解(HelloInterface)部分究竟发生了什么?

2 个答案:

答案 0 :(得分:5)

HelloInterface hello = (HelloInterface)Naming.lookup("//localhost/Hello");
  • Naming.lookup()调用检查在localhost中运行的RMI注册表,以获取名称为&#34; Hello&#34;的绑定。
  • 它返回一个必须转换为您期望的任何远程接口的Object。
  • 然后,您可以使用该对象调用接口中定义的远程方法。
  

我认为除非你使用匿名内部类,否则接口不能有对象。

我不知道你在这里谈论什么。任何类都可以实现接口。这是相当基本的。

  

所以在下面的代码中我们如何创建远程接口的对象

我们没有。我们将它作为注册表的返回值,由服务器放置。

  

如果我不得不猜测,对我来说似乎是某种类型的投射。

无需猜测。这就是它的确切含义。只有一种&#39;排序&#39;类型转换,这就是你写它的方式。这也很基本。

答案 1 :(得分:-1)

HelloInterface hello =(HelloInterface)Naming.lookup(&#34; // localhost / Hello&#34;);

这是什么意思?

它基本上是在服务器对象池中查找名为// localhost / Hello的对象。这称为JNDI名称

根据服务器的类型,可以在服务器配置文件中对其进行配置。