`
anson_xu
  • 浏览: 513460 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

为什么要使用EJB?如何使用ejb2.0开发

    博客分类:
  • ejb
阅读更多
为什么要使用EJB?
关键字: ejb
  为什么要使用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-----------------------------------

java 代码
1.  public class AccountBean implements EntityBean {   
2.  //三个PUBLIC字段,他们将来对应库表的三个字段   
3.  public String accountID   
4.  public String ownerName;   
5.  public double balance;   
6.    
7.  //----HOME中声明的create方法的影射实现   
8.  //由于是BMP,所以必须自己来负责实例创建时实例到数据库的影射   
9.  public AccountPK ejbCreate(String accountID, String ownerName) throws CreateException, RemoteException {   
10.  PreparedStatement pstmt = null;   
11.  Connection conn = null;   
12.  try {   
13.  this.ownerName = ownerName;   
14.  this.balance = 0;   
15.  conn = getConnection();   
16.  pstmt = conn.prepareStatement("insert into accounts (id, ownerName, balance) values (?, ?, ?)");   
17.  pstmt.setString(1, accountID);   
18.  pstmt.setString(2, ownerName);   
19.  pstmt.setDouble(3, balance);   
20.  //看这里,看这里!插进去了...   
21.  pstmt.executeUpdate();   
22.  return new AccountPK(accountID);   
23.  }catch (Exception e) {   
24.  throw new CreateException(e.toString());   
25.  }finally {   
26.  try {   
27.  pstmt.close();   
28.  conn.close();   
29.  }catch (Exception e) { }   
30.  }   
31.  }   
32.    
33.  //----HOME中声明的findByOwnerName方法的影射实现   
34.  //由于是BMP,所以必须自己来完成按照Name字段查找的工作   
35.  public AccountPK ejbFindByOwnerName(String name) throws FinderException, RemoteException {   
36.  PreparedStatement pstmt = null;   
37.  Connection conn = null;   
38.  try {   
39.  conn = getConnection();   
40.  pstmt = conn.prepareStatement("select id from accounts where ownerName = ?");   
41.  pstmt.setString(1, name);   
42.  //看看看!找上了,根据名称...   
43.  ResultSet rs = pstmt.executeQuery();   
44.  rs.next();   
45.  String id = rs.getString("id");   
46.  pstmt.close();   
47.  conn.close();   
48.  return new AccountPK(id);   
49.  }catch (Exception e) {   
50.  throw new FinderException(e.toString());   
51.  }finally {   
52.  try {   
53.  pstmt.close();   
54.  conn.close();   
55.  }catch (Exception e) { }   
56.  }   
57.  }  
分享到:
评论

相关推荐

    EJB2.0 实例开发

    本实例开发将深入探讨EJB2.0的核心概念,特别是会话bean的实例化与使用。 1. **会话Bean(Session Beans)**:会话bean是EJB的一种类型,主要负责业务逻辑处理。它们可以代表客户端对象在服务器端执行操作,通常...

    ejb2.0与ejb3.0的区别

    ### EJB2.0与EJB3.0的主要区别 #### 一、简介 企业Java Beans(EJB)是Java平台为企业级应用提供的一种组件模型。随着技术的发展,EJB经历了多个版本的迭代,其中EJB 2.0和EJB 3.0是两个重要的里程碑版本。本文将...

    EJB2.0开发.rar_EJB2.0 pdf_ejb_ejb 2_ejb2.0_websphere

    在提供的资源中,《EJB2.0.pdf》是一份详细讲解EJB 2.0的指南,值得深入学习。同时,"www.pudn.com.txt"可能是该资源的来源信息,可能包含了获取更多相关资料的链接。学习EJB 2.0不仅有助于理解早期的企业级Java开发...

    精通EJB2.0 书籍源码

    通过这些文件,我们可以看到一个完整的EJB2.0应用开发环境,包括服务器配置、数据库创建、bean的配置和测试等环节。学习并理解这些知识点,将有助于开发者深入掌握EJB2.0的核心技术和实践应用。

    ejb2.0.rar_EJB2.0特性_ejb2.0

    EJB2.0,全称为Enterprise JavaBeans 2.0,是Java EE(Java Platform, Enterprise Edition)平台上的一个核心组件,主要用于构建可扩展、安全且事务处理能力强的企业级应用程序。在EJB2.0中,引入了一系列新特性和...

    Ejb2.0教程-java教程

    EJB 2.0 为不同类型的Bean定义了特定的接口,例如,实体Bean通常实现Home接口和Remote接口,而会话Bean可以有无接口、Local接口或Remote接口。 **9. 容器管理和组件接口** EJB 2.0 引入了Business Interface(业务...

    ejb2.0开发

    以上就是EJB 2.0开发的基本知识点,它在Java EE体系中扮演着重要的角色,为大型企业级应用提供了稳定、可扩展的框架。然而,随着技术的发展,EJB 3.0及后续版本引入了更多简化开发的特性,比如注解驱动、依赖注入等...

    全面研读EJB2.0规范

    视频教程可能使用了Eclipse IDE演示EJB2.0的开发流程。Eclipse是一个强大的Java开发工具,支持EJB的集成开发,包括Bean的创建、调试和部署。 ### 学习路径 学习EJB2.0规范时,首先要理解基本概念和组件类型,然后...

    EJB2.0

    EJB2.0虽然为开发者提供了一套完整的框架,但也因其复杂的API和繁琐的配置受到批评。后续版本EJB3.0引入了注解和简化API,极大地改善了开发体验。然而,理解EJB2.0对于理解EJB的历史演变和EJB3.0的设计决策至关重要...

    EJB2.0一个完整的Helloworld

    EJB(Enterprise JavaBeans)是Java EE(Java Platform, Enterprise Edition)平台的核心组成部分,它为开发分布式、事务处理、安全和可扩展的企业级应用提供了框架。EJB 2.0版本是EJB规范的一个里程碑,引入了许多...

    使用ejb2.0 ql教程代码

    在这个"使用ejb2.0 ql教程代码"中,我们将会探讨EJB 2.0中的查询语言(QL)及其在实际应用中的使用。 EJB QL(Enterprise JavaBeans Query Language)是EJB 2.0引入的一种面向对象的查询语言,它允许开发者根据对象...

    EJB2.0 Entity bean(PDF) .zip_EJB2 enti_EJB2.0 P_ejb_ejb2 CMP sup

    提供的"www.pudn.com.txt"可能包含了更多关于EJB 2.0的链接或参考资源,可以结合"EJB2.0.pdf"文档深入学习。理解并掌握EJB 2.0的实体Bean对于理解企业级Java应用的架构和设计原则至关重要。随着技术的发展,虽然EJB ...

    ejb2.rar_ejb2_ejb2.0

    这促使了EJB 3.0的出现,后者引入了注解驱动的开发方式,显著简化了EJB的使用。 ### 8. 学习资源 在ejb2.chm文件中,你可以找到有关EJB 2.0的详细教程,涵盖了上述所有主题,包括具体的代码示例和最佳实践。利用这...

    EJB3.0与EJB2.0的区别

    同时,EJB3.0保持了EJB2.0的核心功能,并在许多方面进行了优化,从而提升了开发效率和代码质量。因此,EJB3.0并非仅仅是表象上的简化,而是一次重要的进化,它在保留企业级特性的基础上,提供了更适合现代开发实践的...

    EJB2.0.pdf

    根据提供的文件信息“EJB2.0.pdf”,我们可以推断出这份文档主要涉及的是Enterprise JavaBeans(EJB)2.0版本的相关知识和技术细节。EJB是Java平台的一部分,用于开发分布式网络应用的企业级组件模型。下面将详细...

    weblogic部署EJB2.0 实现本地接口的SessionBean

    要创建一个本地接口,你需要在Bean类中定义一个接口,并标记为`local`注解。客户端通过这个接口直接调用Bean的方法。 2. **Session Bean的生命周期**: - 创建:当客户端第一次调用Session Bean时,容器会创建一个...

    ejb2.0 api文档快速开发

    EJB(Enterprise JavaBeans)2.0 API是Java EE(Enterprise Edition)平台的一个核心部分,主要...通过深入学习和实践EJB 2.0,开发者可以更好地理解分布式系统的设计原则,为使用更现代的Java EE框架打下坚实的基础。

    EJB开发--2.0

    【EJB开发--2.0】是一个关于企业级JavaBean(Enterprise JavaBeans,简称EJB)的开发教程,主要关注EJB 2.0版本。EJB是Java平台上的一个核心组件,用于构建可扩展、安全且事务处理能力强的企业级应用。在EJB 2.0时代...

Global site tag (gtag.js) - Google Analytics