因为这中间EJB Container要做很多的 事情,比如事务和安全管理,这种架构就是让开发者能够专心于业务逻辑的处理,而将事务等处理交给配置人员和系统集成人员来完成。
事实上容器在部署EJB的时候,都会生成这个home和remote/local interface的实现类,通过这些实现类来调用bean的对应的方法。

解决方案 »

  1.   

    你还不了解ejb组件容器的思想啊,看看书就知道了,分清是谁调用谁。
      

  2.   

    为什么不implement interface?而所有事务的方法都声明为abstract?
    给用户调用的interface则一定是该interface的实现类了。
    我就是一时没找到解决的书,想起来怪怪的,今天就结贴,请大家多发言。
      

  3.   

    你以为你写的EJB就是最终的实现类了?错!
    最终的实现类是EJB容器帮你完成的!Abstract方法是因为你只是给容器一个指示,容器来实现这个Abstract方法
      

  4.   

    那我 implement 了接口同样可以为 abstract 类,同样可以全都是 abstract 方法啊!
      

  5.   

    那我 implement 了接口同样可以为 abstract 类,同样可以全都是 abstract 方法啊!
    容器也不同样也可以照样实现吗?
      

  6.   

    那我 implement 了接口同样可以为 abstract 类,同样可以全都是 abstract 方法啊!
    容器也不同样也可以照样实现吗?
    ___________________________________________
    不懂你在说什么?
    容器也不同样也可以照样实现吗
    读都读不通顺
      

  7.   

    不知是你不懂还是我不懂,public interface Interface{
      public abstract method1();
    }public abstract IntImpl implements Interface{
      public abstract method1();
    }这样不可以吗?
    我是问你:public interface TryEntityRemote extends javax.ejb.EJBObject {
      public Integer getId() throws RemoteException;
      public void setName(java.lang.String name) throws RemoteException;
      public java.lang.String getName() throws RemoteException;
      public void setId_code(java.lang.String id_code) throws RemoteException;
      public java.lang.String getId_code() throws RemoteException;
      public void setAddress(java.lang.String address) throws RemoteException;
      public java.lang.String getAddress() throws RemoteException;
      public void setEmail(java.lang.String email) throws RemoteException;
      public java.lang.String getEmail() throws RemoteException;
    }public abstract class TryEntityBean implements EntityBean,TryEntityRemote {  EntityContext entityContext;  public Integer ejbCreate(Integer id, java.lang.String name, java.lang.String id_code) throws CreateException {
        setId(id);
        setName(name);
        setId_code(id_code);
        setId(id);
        return null;
      }  public void ejbPostCreate(Integer id, java.lang.String name, java.lang.String id_code) throws CreateException {
      }  public void ejbRemove() throws RemoveException {
      }  public abstract void setId(Integer id);
      public abstract void setName(java.lang.String name);
      public abstract void setId_code(java.lang.String id_code);
      public abstract void setAddress(java.lang.String address);
      public abstract void setEmail(java.lang.String email);
      public abstract java.lang.String getEmail();
      public abstract java.lang.String getAddress();
      public abstract java.lang.String getId_code();
      public abstract java.lang.String getName();
      public abstract Integer getId();  public void ejbLoad() {
      }  public void ejbStore() {
      }  public void ejbActivate() {
      }  public void ejbPassivate() {
      }  public void unsetEntityContext() {
        this.entityContext = null;
      }
      public void setEntityContext(EntityContext entityContext) {
        this.entityContext = entityContext;
      }
    }
    看到了没有?implement 了 TryEntityRemote,但真正编码的时候并不需要,现在的问题是为什么不能 implement 这个remote interface?
      

  8.   

    其实你的TryEntityRemote接口在这里可以说没有什么意义,你的接口提供了一个
    方法集合模板,无非是在做一些设置和获取字段的工作。而这些方法是被CMP严格规定的!并且只能是Abstract,你在这里只是做的一些重复性的工作。
    其实写一个接口来强迫BEAN类实现这个接口里面的方法,这种做法很常见,但是一般接口里面规定的都是一些业务逻辑方法,举个例子:
    你还可以在你的TryEntityRemote 接口里添加如下方法:
    public abstract String getAddress_Email();
    然后在BEAN里面做如下实现:
    public String getAddress_Email()
    {
       return ""+getAddress()+getEmail();
    }
    因为getAddress_Email这个方法并取得数据库的一个字段,换句话说,CMP并没有对它做出什么规定,可看做一个简单的业务逻辑方法。
    我不知道我说清楚没有
      

  9.   

    其实你的TryEntityRemote接口在这里可以说没有什么意义,你的接口提供了一个
    方法集合模板,无非是在做一些设置和获取字段的工作。而这些方法是被CMP严格规定的!并且只能是Abstract,你在这里只是做的一些重复性的工作。
    其实写一个接口来强迫BEAN类实现这个接口里面的方法,这种做法很常见,但是一般接口里面规定的都是一些业务逻辑方法,举个例子:
    你还可以在你的TryEntityRemote 接口里添加如下方法:
    public abstract String getAddress_Email();
    然后在BEAN里面做如下实现:
    public String getAddress_Email()
    {
       return ""+getAddress()+getEmail();
    }
    因为getAddress_Email这个方法并取得数据库的一个字段,换句话说,CMP并没有对它做出什么规定,可看做一个简单的业务逻辑方法。
    我不知道我说清楚没有
      

  10.   

    实际上, 你的远程接口是javax.ejb.EJBObject 接口的一种扩展, 这理面定义了一些EJB容器在进行Bean配置时使用的方法(你可以看一下ejb.的API就知道), 是不可能在你的Bean 程序中实现的. 如果你的Bean 程序实现了你的远程接口,请问你如何实现这些方法? 其实只要你研究一下你的EJB服务器为你的EJB程序E编译后的Jar文件,就知道JB服务器在编译运行你的EJB程序的时侯, 会分别为你的home 接口, remote 接口,和你的abstract class 生成不同的实现类, 在不同的实现类中实现了不同的EJB的API, 如果你随意继承就会错误!