通俗的说:
remote接口用于业务方法,通过她可以实现分布式调用.
home接口用于创建一个业务实例

解决方案 »

  1.   

    ejbBean是存活在ejb容器中的,remote接口和home接口的对象,也就是实现由ejb容器自动生成,客户端通过jndi查找home接口的对象,通过home对象生成remote对象(ejb对象),客户端在调用remote对象的商业方法,remote对象将请求委派给ejb容器里的ejbBean完成商业逻辑.
      

  2.   

    谢谢你们回答,liaojingbin你说remote接口和home接口的对象,也就是实现由ejb容器自动生成。请问这个自动生成是什么时候生成?我能看到自动生成的代码吗?
      

  3.   

    1.Home和Object
       外部程序通过Home接口控制ejb的生命周期,包括创建、删除和定位Bean,而Object是对外的接口,外部程序程序通过Object访问ejb的业务逻辑方法2.LocalHome 和LocalObject
       和Home和Object一样区别在于LocalHome 和LocalObject是在本地调用
    3. Object和LocalObject   
       在EJB2.0规范中定义了两种对外接口:Object(远程接口Remote Interface),LocalObject(本地接口Local Interfacce),其他程序调用ejb必须通过此对外接口完成,如果调用ejb的程序与ejb在同一应用服务器(如weblogic)中,这通过LocalObject(本地接口Local Interfacce)可以提高访问效率,如不在同一应用服务器就只能通过Object(远程接口Remote Interface)4.LocalHome ,Home
      和Object和LocalObject一样判断使用LocalHome 或是Home主要看调用ejb的程序是否和ejb在同一应用服务器例:
    --------------------这是ejb的Bean类,主要用来封装业务逻辑------------------------------
    package sessionbeanexample;import javax.ejb.*;public class Enterprise1Bean implements SessionBean {
      SessionContext sessionContext;
      public void ejbCreate() throws CreateException {
        /**@todo Complete this method*/
      }
      public void ejbRemove() {
        /**@todo Complete this method*/
      }
      public void ejbActivate() {
        /**@todo Complete this method*/
      }
      public void ejbPassivate() {
        /**@todo Complete this method*/
      }
      public void setSessionContext(SessionContext sessionContext) {
        this.sessionContext = sessionContext;
      }
      public String sayHello(String msg) {
        System.out.println("Hello World "+msg);
            return "Hello World "+msg;  }
    }---------这是Home接口,主要用来创建ejb,调用他的程序通过create() 方法创建ejb,该create()对应bean类中的ejbCreate(),只不过方法代码在bean定义,对外接口在Home中定义-----------------------package sessionbeanexample;import javax.ejb.*;
    import java.util.*;
    import java.rmi.*;public interface Enterprise1Home extends javax.ejb.EJBHome {
      public Enterprise1 create() throws CreateException, RemoteException;
    }
    -------这是LocalHome接口,主要用来本地创建ejb,和Home定义的区别在于由于本地(ejb和调用程序在同一应用服务器)调用而不抛出 RemoteException---------------------------package sessionbeanexample;import javax.ejb.*;
    import java.util.*;
    import java.rmi.*;public interface Enterprise1Home extends javax.ejb.EJBHome {
      public Enterprise1Local create() throws CreateException;
    }
    ---------这是Object接口,外部程序通过他来访问ejb的逻辑方法,调用他的程序通过调用Object接口的sayHello方法来调用对应在bean类中的sayHello,只不过方法代码在bean定义,对外接口在Object中定义-----------------------
    package sessionbeanexample;import javax.ejb.*;
    import java.util.*;
    import java.rmi.*;public interface Enterprise1 extends javax.ejb.EJBObject {
      public String sayHello(String msg) throws RemoteException;
    }
    ---------这是LocalObject接口,除了该接口是本地(ejb和调用程序在同一应用服务器)访问和不抛出RemoteException外,其他和Object一样-----------------------
    package sessionbeanexample;import javax.ejb.*;
    import java.util.*;
    import java.rmi.*;public interface Enterprise1 extends javax.ejb.EJBLocalObject {
      public String sayHello(String msg) ;
    }
      

  4.   

    就像我的例子中的:
    public String sayHello(String msg) {
        System.out.println("Hello World "+msg);
            return "Hello World "+msg;  }
    他在SessionBean也就是你说的EJBBean中实现
    在EJBObject中定义
    public interface Enterprise1 extends javax.ejb. {
      public String sayHello(String msg) throws RemoteException;
    }
    另一种像ejbCreate()也是在 SessionBean中实现
    public void ejbCreate() throws CreateException {
        /**@todo Complete this method*/
      }
    在EJBHome中定义只不过去掉了前面的ejb,凡是在SessionBean中带ejb的都在EJBHome中定义:
    public interface Enterprise1Home extends javax.ejb.EJBHome {
      public Enterprise1Local create() throws CreateException;
    }
      

  5.   

    他们之间没有extend或implement关系,请问他们之间是如何关联起来?