为什么 ejb 不直接 implements bean 的 interface

chl 2002-08-14 10:01:03
只实现 interface 里面的方法,为什么不直接 implements 接口?
真让人费解,如果我 implement 会怎样?
...全文
27 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiiiiix 2002-08-14
  • 打赏
  • 举报
回复
你还不了解ejb组件容器的思想啊,看看书就知道了,分清是谁调用谁。
walkcamel 2002-08-14
  • 打赏
  • 举报
回复
因为这中间EJB Container要做很多的 事情,比如事务和安全管理,这种架构就是让开发者能够专心于业务逻辑的处理,而将事务等处理交给配置人员和系统集成人员来完成。
事实上容器在部署EJB的时候,都会生成这个home和remote/local interface的实现类,通过这些实现类来调用bean的对应的方法。
wugng 2002-08-14
  • 打赏
  • 举报
回复
实际上, 你的远程接口是javax.ejb.EJBObject 接口的一种扩展, 这理面定义了一些EJB容器在进行Bean配置时使用的方法(你可以看一下ejb.的API就知道), 是不可能在你的Bean 程序中实现的. 如果你的Bean 程序实现了你的远程接口,请问你如何实现这些方法?

其实只要你研究一下你的EJB服务器为你的EJB程序E编译后的Jar文件,就知道JB服务器在编译运行你的EJB程序的时侯, 会分别为你的home 接口, remote 接口,和你的abstract class 生成不同的实现类, 在不同的实现类中实现了不同的EJB的API, 如果你随意继承就会错误!
tingtinglee 2002-08-14
  • 打赏
  • 举报
回复
其实你的TryEntityRemote接口在这里可以说没有什么意义,你的接口提供了一个
方法集合模板,无非是在做一些设置和获取字段的工作。而这些方法是被CMP严格规定的!并且只能是Abstract,你在这里只是做的一些重复性的工作。
其实写一个接口来强迫BEAN类实现这个接口里面的方法,这种做法很常见,但是一般接口里面规定的都是一些业务逻辑方法,举个例子:
你还可以在你的TryEntityRemote 接口里添加如下方法:
public abstract String getAddress_Email();
然后在BEAN里面做如下实现:
public String getAddress_Email()
{
return ""+getAddress()+getEmail();
}
因为getAddress_Email这个方法并取得数据库的一个字段,换句话说,CMP并没有对它做出什么规定,可看做一个简单的业务逻辑方法。
我不知道我说清楚没有
tingtinglee 2002-08-14
  • 打赏
  • 举报
回复
其实你的TryEntityRemote接口在这里可以说没有什么意义,你的接口提供了一个
方法集合模板,无非是在做一些设置和获取字段的工作。而这些方法是被CMP严格规定的!并且只能是Abstract,你在这里只是做的一些重复性的工作。
其实写一个接口来强迫BEAN类实现这个接口里面的方法,这种做法很常见,但是一般接口里面规定的都是一些业务逻辑方法,举个例子:
你还可以在你的TryEntityRemote 接口里添加如下方法:
public abstract String getAddress_Email();
然后在BEAN里面做如下实现:
public String getAddress_Email()
{
return ""+getAddress()+getEmail();
}
因为getAddress_Email这个方法并取得数据库的一个字段,换句话说,CMP并没有对它做出什么规定,可看做一个简单的业务逻辑方法。
我不知道我说清楚没有
tingtinglee 2002-08-14
  • 打赏
  • 举报
回复
呵呵,你的语气象是在质问。
我不懂,行了吧,也许这是你最希望听到的
chl 2002-08-14
  • 打赏
  • 举报
回复
不知是你不懂还是我不懂,

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?
tingtinglee 2002-08-14
  • 打赏
  • 举报
回复
那我 implement 了接口同样可以为 abstract 类,同样可以全都是 abstract 方法啊!
容器也不同样也可以照样实现吗?
___________________________________________
不懂你在说什么?
容器也不同样也可以照样实现吗
读都读不通顺
chl 2002-08-14
  • 打赏
  • 举报
回复
怎样?问题变得不简单了吧?
chl 2002-08-14
  • 打赏
  • 举报
回复
那我 implement 了接口同样可以为 abstract 类,同样可以全都是 abstract 方法啊!
容器也不同样也可以照样实现吗?
chl 2002-08-14
  • 打赏
  • 举报
回复
那我 implement 了接口同样可以为 abstract 类,同样可以全都是 abstract 方法啊!
tingtinglee 2002-08-14
  • 打赏
  • 举报
回复
你以为你写的EJB就是最终的实现类了?错!
最终的实现类是EJB容器帮你完成的!Abstract方法是因为你只是给容器一个指示,容器来实现这个Abstract方法
chl 2002-08-14
  • 打赏
  • 举报
回复
为什么不implement interface?而所有事务的方法都声明为abstract?
给用户调用的interface则一定是该interface的实现类了。
我就是一时没找到解决的书,想起来怪怪的,今天就结贴,请大家多发言。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧