EJB 概念问题:
      
由于我对Rmi的工作方式不是很清楚,因此在理解EJB Home 接口的时候有点不清楚,请热心的朋友指点:一般来说,EJB 组件有组件本身、Home接口、Remote接口几部分组成。客户端的调用方式类似如下代码     1. InitialContext ic = new InitialContext();
     2. Object objRef = ic.lookup("java:comp/env/ejb/TheConverter");
     3. ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(objRef, ConverterHome.class);
     4. converter = home.create();我不太明白的是第三句,ConverterHome这个接口的class文件位于客户端吗?与客户端位于同一个jvm中吗?或者说必须在客户端的class中?
如果是,那么我想知道,把ConverterHome.class 文件放置于客户端机器上的这一步骤,是在什么时候做的。是所谓“部署”的时候吗?我能理解,ejb 使用jndi的方式使得组件的位置透明,当组件位置变化的时候,ejb组件的代码并不需要重写。可是如果我有N台Application server.是不是每一台上我都需要部署ConverterHome ? 这样,所谓位置的透明是不是有些折扣?

解决方案 »

  1.   

    我的理解是客户端远程接口的代码存根,内部包装了rmi调用的一些细节,应该说位于客户和客户端位于同一个jvm的是这个代码存根对象,“部署”的时候实际上是生成了这个代码存根类,在客户端调用的时候,只要将这个类以及一些支持类放到客户端就可以了
      

  2.   

    lookup的时候实际上是在本地(客户端)生成了一个对象
    第3句只是一个类似类型转换的一步
    ConverterHome.class是在客户端的,这样代码里才能使用啊,客户通过她来生成了一个ejb实例,
    如果n台协同工作的话,实际上在客户端看来是一台,ejb只需部署一次,当然多台协同工作是要配制的
      

  3.   

    好像可以用urlclassload来远程load一个class的,得翻翻书了