你的问题问得很好,说明你真的去思考了。
首先我建议你做两件事,第一找一个RMI的例子,保证能运行同过,然后再回头研究代码;
第二,用J2EE RI服务器发布一个EJB的例子,然后包C:\j2sdkee1.3.1\repository\YourcomputerName\applications\*Server.jar打开,然后看里面和EJB名字相关的类。
下面我说我的理解。事实你写的Remote接口和Home接口,都有自己的实现类,这两个类是由容器生成的。他们真正代理着你的EJB的全部功能调用。

解决方案 »

  1.   

    一般情况下是实现一个接口就要去实现这接口的一些方法,但对于Serializable接口来说,只起一个标识作用,就相当于如果你实现了它就会在你的类中作一个标记,而在程序运行的时候JVM会去检查你是否有这个标记,没有的话就会抛出异常~,不知明白没有?
      

  2.   

    我们看到的ejb类并不是最终的执行的类!
    最终执行的类是ejb容器自动生成包装后的类,对吧?
      

  3.   

    由容器生成EJB对象,Home对象。
    部署时向JNDI注册Home对象。
    客户端查找JNDI产生Home对象,Home对象生成EJB对象,EJB对象才是真正同客户端打交道的类,他是由容器根据Remote接口生成的。容器管理者组件类(Bean),EJB对象充当其代理。
    客户端调用EJB对象的业务方法,EJB对象生成或找到组件实例,调用其对应的方法,返回结果。
      

  4.   

    accp(accp)
    ----------------------------------------------------
    一般情况下是实现一个接口就要去实现这接口的一些方法,但对于Serializable接口来说,只起一个标识作用,就相当于如果你实现了它就会在你的类中作一个标记,而在程序运行的时候JVM会去检查你是否有这个标记,没有的话就会抛出异常~,不知明白没有?==============================================
    事实上也确实如此,就像Serializable仅仅是标识对象的可序列化,更准确的说是它所引用的对象是否可以转化为流来传输。但是对象包括其内容是否真的可序列化需要用户来保证,
    这一点就像throws RemoteException()仅仅是为了表示这是一个远程方法的调用。
      

  5.   

    首先需要明白一个问题:一个接口或类,他不一定必须要有方法或者属性。其次是继承:要求实现Serializable接口,实际上是要求你的远程对象也是Serializable的一个对象实例,这样RMI就知道这样传输这个对象了。(RMI体系只需要知道如何传输Serializable对象实例就行了,而不需要RMI必须知道每一个需要传输的具体对象,这就是继承的特点)