Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java EE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 ejb初学者毕读,如果大家反映好的话,请班主给加点分
ccic134302





发贴: 185
积分: 40
于 2003-05-13 09:40 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
EJB,是企业JAVA BEAN的缩写,这里,想跟大家谈谈一些实质的问题,如果大家反映好的话,请班主给加点分!!!!!!!
  为什么要使用EJB?
  EJB最大的诱人之处是她把应用程序和服务器分开了,我们再也不用和那些服务器上的复杂的资源打交道了,什么数据库,什么进程,线程,什么安全权限,什么套接字,都见鬼去吧,我们只需要专著于我们的商业逻辑的实现了.
  EJB的实质?
  EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品.EJB是BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉萨睡,比如BEAN的持续化,安全性,事务管理...
  EJB服务器产品
  各个WEB服务器开发商基本上都在他们WEB服务器中新捆绑了EJB容器,或者叫EJB服务器.其中最简单也是最根本的是J2EE开发环境带的J2EE的EJB容器,它很好的和J2EE的HTTP服务器和Servlet引擎一起构筑了一个很好的运行环境,由于配置简单,功能强大,因此成为我的最爱.另外象BEA的Weblogical是值得推荐的一个产品,它的WEB服务器功能相当强大,是当今很多网站构筑的理想WEB服务器,它也已经加入了EJB的行列,在EJB方面有着不俗的表现.Inprise的IAS更是一个功能强大的WEB服务器,同样,也嵌入了EJB容器,加之与本公司的JBuilder的无接缝结合,更使它人气攀升.还有象IBM的WebSphere也不错,不过Apache是否已经搭载了EJB容器,我不太清楚.另外,推荐一个EJBoss,是一个完全免费的EJB服务器,而且是原代码公开的.
  EJB容器如何包装你的BEAN.
  这年头没有天上掉馅饼的好事情,EJB也不例外,你想让EJB容器替你管理你编写的EJB的吃喝拉萨睡,凭什么?!凭XML描述子,你通过一个XML文件告诉EJB容器BEAN的相关配置信息,比如我的EJB的HOME接口和REMOTE接口是哪一个类,比如我的EJB的别名(实际上是JNDI名称)叫什么,比如我的EJB是否是实体类型的EJB还是对话类型的EJB,比如告诉容器替我管理我的实体EJB中哪些自段,......总之,你得跟咱们的EJB大总管----EJB容器把所有都交代清楚.这样,剩下的,就看EJB容器的了!!!你是不是总共写过3个文件,BEAN定义,HOME接口定义,ROMOTE接口定义,当你DEPLOY他们时,容器会
  (1).首先根据HOME和REMOTE接口生成他们的实现代码,我们不妨叫做HOME_IMPL和REMOTE_IMPL,
  (2).然后,利用RMIC产生HOME_IMPL和REMOTE_IMPL的STUB和SKELETON文件,2X2一共生成4个文件.
  (STUB和SKELETON请参见RMI的相关概念)
  如此这般,最后,在服务器上,一共有
  BEAN
  HOME_IMPL
  REMOTE_IMPL
  HOME_STUB
  HOME_SKELETON
  REMOTE_STUB
  REMOTE_SKELETON
  7文件,才能让EJB工作起来.
  (3).生成实体EJB对应的数据库的库表
  (4).注册你的EJB到JNDI服务
  为什么除了写BEAN,还得写接口文件,而且干嘛要HOME和REMOTE两个接口.
  我搅着吧,这两个接口完全是可以合并成一个接口的,其实他们的作用都只是一个接口,为了让那人家SUN干吗还拆成两个呢?我想,正如SUN所说的,为了将一些容器相关操作和客户商业方法分开,什么意思?说开了吧,HOME用来规范容器相关的操作方法,REMOTE负责专心致志的定制商业方法,而我们的BEAN才是最终的逻辑实现者.还是不明白?没关系,我在说的细些,举例说明:把我想象成一个BEAN,HOME接口就是我们家人的命令,REMOTE接口就是我们单位的领导的命令,我们家人的命令决定了我如何吃喝拉萨睡,领导的命令决定了我如何做一些真正的工作,请注意这里我使用了"决定"这个字眼,我并没有说我们家人,而是说了我们家人的命令,这个命令的含义就是接口,不是类,而我这个BEAN却是个类!还有,BEAN类不实现REMOTE和HOME接口,记住!记住!
  EJB的分类
  EJB分为实体(Entity)EJB和对话(Session)EJB,
  >>>>>>实体EJB:>>>>>>对话EJB<<<<<<<
  对话EJB根本根本不和数据库打交道,为什么,因为他根本不用序列化!他只负责来完成一些逻辑操作,比如算个帐什么的.为了和实体EJB较劲,他也一口气生了两个儿子,
  a.有状态(sessionful)对话EJB
  他就跟servlet中的session对象似的,可以保存用户的session相关信息,而且他仅仅被一个用户的一次session所使用,不和别人共享,我管他叫对话,不过这"对话"翻出来这是够难听的,还不如就叫他session呢!
  b.无状态(sessionless)对话EJB
  这个东东是最简单的EJB,他是可以被多个用户共享,注意!我所说的共享是指实例的共享!
  一个BEAN管理持续化的实体EJB(BMP)小例子
  说了半天了,大家珍贵的脑资源恐怕被我消耗的差不多了,好,让我们来剖析一个BEAN管理持续化的实体EJB(BMP)吧.
  -----------------------看看REMOTE接口------------------------------
  public interface Account extends EJBObject {//必须从EJBObject继承
  //这些都是商业方法,而且这里写了的,必须在BEAN中都实现
  public void deposit(double amt) throws RemoteException;
  public double withdraw(double amt)
  throws AccountException, RemoteException;
  public double getBalance() throws RemoteException;
  public String getOwnerName() throws RemoteException;
  public void setOwnerName(String name)throws RemoteException;
  }
  -------------------------看看HOME接口---------------------------------
  public interface AccountHome extends EJBHome {
  //这声明了create函数,由于是BMP,所以必须在BEAN中实现一个叫ejbCreate的对应函数
  Account create(String accountID, String ownerName)
  throws CreateException, RemoteException;
  //按主键查询
  //由于是BMP,所以必须在BEAN中实现一个叫ejbFindByPrimaryKey的对应函数
  public Account findByPrimaryKey(AccountPK key) throws FinderException,
  RemoteException;
  //按其中的Name字段查询
  //由于是BMP,所以必须在BEAN中实现一个叫ejbFindByOwnerName的对应函数
  public Account findByOwnerName(String name)
  throws FinderException, RemoteException;
  }
  ---------------------------看看BEAN-----------------------------------
  public class AccountBean implements EntityBean {
  //三个PUBLIC字段,他们将来对应库表的三个字段
  public String accountID
  public String ownerName;
  public double balance;
  //----HOME中声明的create方法的影射实现
  //由于是BMP,所以必须自己来负责实例创建时实例到数据库的影射
  public AccountPK ejbCreate(String accountID, String ownerName)
  throws CreateException, RemoteException {
  PreparedStatement pstmt = null;
  Connection conn = null;
  try {
  this.ownerName = ownerName;
  this.balance = 0;
  conn = getConnection();
  pstmt = conn.prepareStatement("insert into accounts (id, ownerName, ba
  lance) values (?, ?, ?)");
  pstmt.setString(1, accountID);
  pstmt.setString(2, ownerName);
  pstmt.setDouble(3, balance);
  //看这里,看这里!插进去了...
  pstmt.executeUpdate();
  return new AccountPK(accountID);
  }catch (Exception e) {
  throw new CreateException(e.toString());
  }finally {
  try {
  pstmt.close();
  conn.close();
  }catch (Exception e) { }
  }
  }
  //----HOME中声明的findByOwnerName方法的影射实现
  //由于是BMP,所以必须自己来完成按照Name字段查找的工作
  public AccountPK ejbFindByOwnerName(String name)
  throws FinderException, RemoteException {
  PreparedStatement pstmt = null;
  Connection conn = null;
  try {
  conn = getConnection();
  pstmt = conn.prepareStatement("select id from accounts where ownerName = ?");
  pstmt.setString(1, name);
  //看看看!找上了,根据名称...
  ResultSet rs = pstmt.executeQuery();
  rs.next();
  String id = rs.getString("id");
  pstmt.close();
  conn.close();
  return new AccountPK(id);
  }catch (Exception e) {
  throw new FinderException(e.toString());
  }finally {
  try {
  pstmt.close();
  conn.close();
  }catch (Exception e) { }
  }
  }
  //----REMOTE中声明的一个方法的实现
  //这是一个商业方法,来完成帐户的存款查询
  public double getBalance() {
  System.out.println("[AccountEJB-getBalance]getBalance() called.");
  return balance;
  }
  .......其他的方法,由于篇幅问题就不一一列出了,请大家参阅原代码!
  }

 




话题树型展开
人气 标题 作者 字数 发贴时间
6991 ejb初学者毕读,如果大家反映好的话,请班主给加点分 ccic134302 5546 2003-05-13 09:40
6102 給ejb初学者 why 590 2003-05-13 10:02
5993 Re:ejb初学者毕读,如果大家反映好的话,请班主给加点分 ccic134302 109 2003-05-13 11:51
6382 Re:ejb初学者毕读,如果大家反映好的话,请班主给加点分 haibo 53 2003-05-15 15:44
5845 Re:ejb初学者毕读,如果大家反映好的话,请班主给加点分 aaron_leo 326 2003-05-16 09:08
5773 Re:ejb初学者毕读,如果大家反映好的话,请班主给加点分 sharinglife 46 2003-05-16 11:00
5788 Re:EJB趣味簡介 lovejava 680 2003-05-19 19:55
6051 Re:ejb初学者毕读,如果大家反映好的话,请班主给加点分 bawanglongqiqi 97 2003-06-08 15:37
5661 Re:ejb初学者毕读,如果大家反映好的话,请班主给加点分 firesnow 29 2003-06-10 10:11
5719 Re:ejb初学者毕读,如果大家反映好的话,请班主给加点分 Hodex 34 2003-06-10 13:49

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923