日期:2014-05-16  浏览次数:20513 次

第一个实体Bean实例——建立与数据库的连接
核心提示:从EJB的入门知识我们已经了解到,在EJB 2.x中,EJB有3种类型的Bean,分别是会话Bean(Session Bean)、消息驱动Bean(Message-Driven Bean)和实体Bean(Entity Bean)。随着EJB 3的推出,EJB中的实体Bean逐渐被JPA规范所替代,JPA不仅能在EJB环境中使用,而
从EJB的入门知识我们已经了解到,在EJB 2.x中,EJB有3种类型的Bean,分别是会话Bean(Session Bean)、消息驱动Bean(Message-Driven Bean)和实体Bean(Entity Bean)。随着EJB 3的推出,EJB中的实体Bean逐渐被JPA规范所替代,JPA不仅能在EJB环境中使用,而且能在Java SE、Java EE环境中使用,相对于EJB 2.x中的实体Bean,它的使用范围更广。但这里我们仍然将其称做实体Bean。

与会话Bean和消息驱动Bean类似,新的实体Bean也是一个加了注释符(@Entity)的简单 Java对象(POJO),实体关系和O/R映射也是通过注释符来定义的,并提供几种不同的数据库操作规范。一旦被EntityManager访问,它就成为了一个持久化对象,并且成为了持久化上下文的一部分。此时我们就可以像使用Hibernate、iBATIS一样来使用实体对象了。

接下来我们将通过本节课和后面的两节课来详细讲解实体Bean的开发技术。

? 第一个实体Bean实例:通过开发第一个实体Bean,建立与数据库的连接,演示实体Bean的开发与调用过程。

? 实体管理器:执行数据库更新的方法。

? 生命周期:实体Bean的监听和回调。

? 关系实体映射:开发实体的方法。

? JPQL查询语言:执行数据库实体查询。

? 原生SQL查询:执行原生SQL语句。

它们之间的关系如图6-1所示,通过实体管理器操作实体Bean,来实现对数据库的更新、JPQL查询和原生SQL查询。实体管理器是工具,实体Bean是数据。



图6-1  实体Bean内容结构图

本节课将重点讲解前3个部分的内容,即:

? 建立与数据库的连接。

? 实体管理器。

? 实体Bean的生命周期。

通过本节课的学习,你将能够通过实体Bean的开发,实现对数据库的操作。

6.1  第一个实体Bean实例——建立与数据库的连接
下面首先来讲解实体Bean的调用过程,然后通过开发第一个实体Bean,演示该配置与开发的过程,包括以下内容:

? 配置数据源。

? 指定数据源。

? 开发第一个实体Bean——Student.java。

? 开发会话Bean进行调用——StudentDAORemote.java和StudentDAO.java。

? 打包并部署到JBoss服务器。

? 开发客户端进行测试——StudentDAOClient.java。

通过本节的学习,你将能够通过实体Bean的建立与MySQL数据库的连接,往数据表中插入一条记录。

6.1.1  实体Bean的工作原理
我们知道,实体Bean是作为持久化类被EJB容器管理的,要实现对该持久化类的调用,必须经过以下步骤。

(1)配置数据源连接。

(2)在配置文件persistence.xml中指定数据源。

(3)开发实体Bean。

(4)在会话Bean、Java SE或Java EE中调用实体Bean。

如图6-2所示。

实体Bean不仅可以被会话Bean调用,还可以被任何的Java类、JSP和Servlet调用,调用的目的是实现对数据库的操作。它的意义与Hibernate、iBATIS完全相同,就是作为系统的DAO层,实现对数据库的访问。

下面我们就按照从底层到上层的顺序,来演示创建与数据库的连接的过程。

6.1.2  配置数据源
JBoss有一个默认的数据源DefaultDS,它使用JBoss内置的HSQLDB数据库。其数据源对应的配置文件为D:\jboss-5.0.0.GA\server\default\deploy\hsqldb-ds.xml,其中包含如下5个设置:

<jndi-name>DefaultDS</jndi-name>

<connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}localDB</connection-url>

<driver-class>org.hsqldb.jdbcDriver</driver-class>

<user-name>sa</user-name>

<password></password>

其中的意义表示如下。

? jndi-name:指定JNDI命名。

? connection-url:数据库连接URL。

? driver-class:数据库驱动类。

? user-name:数据库登录用户名。

? password:数据库登录密码。

我们只需要通过引用JNDI命令DefaultDS来引用该数据源,引用的方法很简单,只需要在persistence.xml中指定该别名即可(见下一节)。

在实际的应用中,我们可能需要使用不同的数据库,如MySQL、Oracle、MSSQL Server等。各种数据库的数据源配置模版可以在D:\jboss-5.0.0.GA\docs\examples\jca目录中找到,默认名称为数据库名+ -ds.xml,例如下面的例子。

? mysql-ds.xml:MySQL数据源配置模板。

? oracle-ds.xml:Oracle数据源配置模板。

? mssql-ds.xml:MSSQL Server数据源配置模板。

在D:\jboss-5.0.0.GA\docs\examples\jca目录下共包含38种模板,表明它支持对38种数据源的连接。

要配置到某一个数据源的连接,需要进行如下的步骤。

(1)复制添加该数据库类型的配置模板到D:\jboss-5.0.0.GA\server\default\deploy目录,并设置正确的数据源参数。

(2)添加该数据库的驱动程序包到D:\jboss-5.0.0.GA\server\default\lib目录,并重启JBoss服务器加载该程序包。

在准备篇中,我们已经安装并配置了MySQL数据库,下面我们以MySQL数据库为例,来添加到该数据库的数据源,配置步骤如下。

(1)复制D:\jboss-5.0.0.GA\docs\examples\jca\mysql-ds.xml到JBoss部署目录D:\jboss-5.0.0.GA\ server\default\deploy中,并修改配置参数如下:

<jndi-name>MySqlDS</jndi-name>

<connection-url>jdbc:mysql://localhost:3306/demo</connection-url>

<driver-class>com.mysql.jdbc.Driver</driver-class>

<user-name>root</user-name>

<password>123</password>

其中的意义表示如下。

? jndi-name:指定JNDI命名为MySqlDS。

? connection-url:指定连接本地的demo数据库。

? driver-class:数据库驱动类com.mysql.j