WEB开发网
开发学院WEB开发Jsp EJB 技术的数据库应用(2) 阅读

EJB 技术的数据库应用(2)

 2008-01-05 09:01:16 来源:WEB开发网   
核心提示:EJB 技术的数据库应用(2) 三、建立数据库连接 EJB 容器维护数据库的连接池,这个连接池对 EJB 组件来说是透明的,EJB 技术的数据库应用(2),当EJB 组件申请一个连接时,EJB 容器从连接池中

  EJB 技术的数据库应用(2)

三、建立数据库连接

   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 组件可以连接到不同的数据库系统。四、EJB 数据库应用的例子

   下面以一个简单的例子 "银行帐户"应用系统来介绍 EJB 组件的Entity bean类型的组件存取数据库。

   Entity bean 的状态存储在关系数据库的 ACCOUNT 表中,表ACCOUNT 由下面的SQL 语句创建:

  CREATE TABLE ACCOUNT 
    (id VARCHAR(3) CONSTRAINT pk_account PRIMARY KEY,
     firstname VARCHAR(24),
     lastname VARCHAR(24),
     balance DECIMAL(10.2));
   和其他EJB 组件一样,开发人员必须编写 Entity bean 的 Entity Bean Class 代码(AccountEJB.java)、Home Interface 代码(AccountHome.java)及Remote Interface 代码(Account.java)。

   Entity Bean Class 代码( AccountEJB.java)

EntityBean 接口方法

   EjbCreate 方法:当客户端调用 create 方法时,EJB 容器调用相应的ejbCreate 方法。一个Entity组件的ejbCreate 方法要实现下列工作:

   · 插入Entity Bean 的状态到数据库中
   · 初始化实例变量
   · 返回主键。

   AccountEJB的ejbCreate 方法调用insertRow 方法,而insertRow 方法发出一个 insert SQL 语句插入Entity Bean 的状态到数据库中,下面是 Account 类中ejbCreate 方法的源代码:

  sublic String ejbCreate (String id,String firstName,String lastName,double balance)throw CreateException{ 
    if (balance < 0.00)
{
    throw new CreateException("A negative initial balance is not allowed.");    }    
try { 
      insertRow(id,firstName,lastName,balance); 
    } catch (Exception ex) {
       throw new EJBException("ejbCreate:"+ex.getMessage());    }     this.id = id; 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.balance = balance; 
    return id;  }

Tags:EJB 技术 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接