技术开发 频道

JAVA领域中EJB技术的数据库应用

【IT168 技术文档】

一、J2EE 技术简介
 
  J2EE是 SUN 公司提出的在分布式环境中的一种体系结构,它提供了一种基于组件的设计、开发、集成、部署企业应用系统的方法,J2EE平台提供了多层分布式的应用系统模型、重用组件的能力、统一的安全模型和灵活的事务控制。基于组件的J2EE企业应用系统具有平台独立性,所以不受任何软件产品和任何软件厂家API的约束。
 
J2EE定义了下面的组件:
 
·application client 和 applets 是客户层组件;
 
·Java Servlet 和 JSP 组件是WEB 层组件;
 
·Enterprise JavaBean(EJB) 组件是业务处理层组件。
 
  EJB 技术是J2EE 体系一部分,EJB 组件是用 Java 语言编写的,是可以被客户端程序存取的可重用的服务器端组件,它运行在J2EE 服务器上,在客户/服务器系统中,EJB 提供类似于中间件的服务。
 
  J2EE 服务器提供应用系统系统级的服务,像事务管理、安全管理、数据库存取等,开发人员不必自己开发系统级服务,所以可以集中精力开发应用系统中的业务逻辑处理;用EJB 组件处理业务逻辑。
 
二、EJB 组件简介
 
EJB 组件分为两类:Sesson bean 和 Entity bean
 
  Sesson bean 代表 J2EE 服务器的客户端,客户端通过调用 Sesson bean 的功能和J2EE 服务器通信,Sesson bean 和客户会话,可以认为是客户端的扩展,例如:网上帐务系统的客户可以调用 Sesson bean 的"输入存款单"的功能来存入现金等。每一个Sesson bean 只能有一个客户,当客户终止时,与之相应的Sesson bean 也终止。因此Sesson bean 是暂时的,不可持久的。
 
  Entity bean 代表业务处理对象,它存储在持久的存贮机制如数据库中,例如,一个Entity bean 代表一个帐户存单,它是存储在关系数据库中存单表的一行。Entity bean 的信息不一定存储在关系数据库中,它也可以存储在对象数据库中、文件中或其他别的存储机制中(本例子中用关系数据库)。
 
  Entity bean 可以被多个客户端共享。由于多个客户端可能改变相同的数据,所以Entity bean 在事务管理下工作是很重要的。通常情况下,EJB 容器提供事务管理。开发人员可以在组件的部署描述文件中指定事务的属性。每一个Entity bean 都有一个唯一的对象标识符,也叫主键,这个主键可以让客户端定位一个Entity bean。
 
  Entity bean 的持久性可以被 Entity bean 自己管理,也可以让 EJB 容器管理,Entity bean自己管理要求开发人员在Entity bean中提供数据存取代码。例如客户的Entity bean要调用 SQL 语句来通过 JDBC 存取关系数据库。EJB 容器管理Entity bean持久性意味着 EJB容器自动处理数据存取的调用。
 
  两种类型的EJB 组件(Session bean 和 Entity beans)都可以存取数据库。选择哪一类 EJB 组件来存取数据库依赖于具体的应用系统。
 
下面的情况可以在 Session bean 组件中调用 SQL 语句来存取数据库:
 
· 应用系统相对简单。
 
· SQL 语句返回的数据不能被多个客户端共享使用。
 
· 数据不代表一个业务实体。
 
下面的情况要用Entity beans 组件:
 
· 超过一个客户端使用数据库调用返回的数据。
 
· 数据代表一个业务实体。
 
· 开发者想从 Sesson bean 中隐藏关系模型。
 
EJB 结构的这种灵活性可以让开发人员用不同的方法来开发应用系统。
 
三、建立数据库连接
 
  EJB 容器维护数据库的连接池,这个连接池对 EJB 组件来说是透明的。当EJB 组件申请一个连接时,EJB 容器从连接池中提取一个连接并分配给组件。由于EJB 容器只是分配一个连接给 EJB 组件,所以组件很快就获得这个连接并连接数据库。数据库调用之后,组件就可以释放连接,这样它又可以快速申请到另一个连接。又因为一个组件只占用这个连接很短的时间,从而同一个连接可以被多个组件使用。
 
  组件不是通过数据库的绝对名来连接数据库,而是用逻辑名连接到数据库, 即用 JNDI lookup 来获得数据库连接,例如:在下面例子中的AccountEJB 类中,连接数据库有以下几个步骤:
 
1、指定数据库的逻辑名:
 
private String dbName = "java:comp/env/jdbc/AccountDB";
 
2、获得数据源:
 
InitialContext ic = new InitialContext();
 
DataSource ds = (DataSource) ic.lookup(dbName);
 
3、从数据源得到数据库连接:
 
Connection con = ds.getConnection();
 
这种间接的连接数据库有以下几个优点:
 
· 可以在具有不同的数据库名的不同环境中部署相同的 EJB 组件。
 
· 可以在多个应用中重用EJB 组件。
 
· 可以集成 EJB 组件到运行在分布环境的应用系统中。
 

另外,EJB规范没有要求J2EE的实现支持某一个特别类型的数据库系统,因此EJB 组件可以连接到不同的数据库系统。

0
相关文章