EJB初级篇--EJB组件之实体Bean

上文我们对会话Bean的生命周期和两个子类型(有状态会话Bean和无状态会话Bean)进行了详细解说,本篇博文中我们继续说说EJB组件中的实体Bean。

其实实体Bean就是一个加了注释符(@Entity)的简单java对象(POJO),实体关系和O/R映射也是通过注释符来定义的,并且提供了几种不同的数据库操作规范。一旦被EntityManager访问,它就成为了一个持久化对象,我们就可以像以前使用Hibernate一样来使用实体对象了。

下图是实体Bean的内容结构图,方便我们宏观的了解实体Bean。通过实体管理器操作实体Bean,来实现对数据库的更新、JPQL查询和SQL查询。可以说,实体管理器工具实体Bean则是数据

下面主要是通过一个实体Bean实例,来理解其调用过程。其过程主要包括以下各个过程:

(1)配置数据源

(2)指定数据源

(3)开发一个实体Bean

(4)开发会话Bean进行调用

(5)打包并部署到JBoss服务器

(6)开发客户端进行测试

看着上面六个步骤是不是觉得记不住啊,没有关系,这个不需要记,理解了自然就会了。当我们需要新建一个项目时,(1)首先需要确定数据源并且进行配置吧,这就是我们上面的第一个过程--配置数据源;(2)配置完数据源(一个或者多个)后,我们就需要确定当前实体Bean分别需要使用哪个数据源,也就是第二个过程--指定数据源;(3)做好和数据库连接的准备了,我们需要开发实体Bean来对应数据库中的表,就是第三个过程--开发一个实体Bean(4)实体Bean开发完成后,可以被会话Bean调用,也可以被其他类调用,在本实例中我们采用会话Bean调用实体Bean,所以需要第四个过程--开发会话Bean进行调用;(5)到此我们服务器端的代码编写就完成了,但是我们还需要进行打包并部署到JBoss服务器上,以供客户端调用,故第五个过程--打包并部署到JBoss服务器;(6)最后就是我们客户端对服务器端组件的调用了,第六个过程--开发客户端进行测试。

通过上面简单通俗的介绍,不知道你对实体Bean调用过程的几个步骤加深印象了没有,暂时没有也没有关系,以后多用,用着用着就理解深刻了,用着用着就烂记于心了。下面我在对这几个过程进行一个详细的演示和解说。

(1)配置数据源

在实际应用中,我们可能需要使用不同的数据库,如MySQL、Oracle、MSSQL
Server等。各个数据库的数据源配置模板都在%Jboss_Home%\docs\examples\jca目录下,共包括38中数据源的连接。要配置到某一个数据源的连接,需要进行如下步骤:

1.复制模板--复制该数据库类型的配置模板到%Jboss_Home%\server\default\deploy目录,并设置数据源参数(以MSSQL
Server为例);

<span style="font-size:18px;"><datasources>
  <local-tx-datasource>
   <!-- 数据源名称 -->
    <jndi-name>MSSQLDS</jndi-name>
   <!-- 指定连接本地的Demo数据库 -->
   <connection-url>jdbc:microsoft:sqlserver://localhost:8080;DatabaseName=Demo</connection-url>
   <!-- 数据库驱动类 -->
   <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
   <!-- Demo数据库登录用户名-->
   <user-name>sunliduan</user-name>
   <!-- Demo数据库登录密码-->
    <password>sunliduan</password>
      <metadata>
         <type-mapping>MSSQLSERVER2000</type-mapping>
      </metadata>
  </local-tx-datasource>
</datasources></span>

如果JBoss服务器处于启动状态,则此时JBoss会自动监控到该文件,并加载起来,并在控制台输出相应信息。

2.添加驱动--添加该数据库的驱动程序包到%Jboss_Home%\server\default\lib目录,并重启JBoss服务器加载该程序包。

各个数据库的数据源配置都是这两个步骤,基本类似。

(2)指定数据源

以上配置的数据源都是由JBoss服务器加载和管理的,要使用这些数据源,还需要在应用中指定引用哪一个数据源。而这项工作的完成靠persistence.xml即可。

<span style="font-size:18px;"><SPANstyle="FONT-SIZE: 14px; FONT-FAMILY: MicrosoftYaHei"><persistence>
  <!-- Name属性用于定义持久化内容的名称 -->
  <persistence-unitname="demo">

    <!-- Jta-data-source 用于指定实体Bean使用的数据源名称 -->
    <jta-data-source>java:/MSSQLDS</jta-data-source>

    <!-- 厂商专有属性(可选) -->
    <properties>
      <!--自动输出schema创建DDL语句 -->
      <propertyname="hibernate.hbm2ddl.auto" value="create-drop"/>
    </properties>
  </persistence-unit>
</persistence></SPAN></span>

这里需要注意的一点是:"hibernate.hbm2ddl.auto"的值,若为上文中的"create-drop",则在实体Bean发布及卸载时将自动创建及删除相应的数据库表。为了使以后实体Bean的改动能反应到数据库表,建议使用update,这样实体Bean添加一个属性时能同时在数据库表增加相应字段。

(3)开发实体Bean

实体Bean实际上对应了数据库中的,它是数据库中表在Java类中的表现。EJB容器能够根据实体Bean自动在数据库中创建数据表。

开发一个实体Bean很简单,只需要新建一个POJO,添加与数据表字段同名的变量,同时使用一些注释符来表示该实体Bean与数据库表的对应映射关系即可。

<span style="font-size:18px;">/**
* @ClassName: 用户实体Bean
* @Description: 用户实体Bean
* @author 孙丽端
* @date 2014年11月28日20:22:51
*/
package com.tgb.ejb;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user")
public class User implements Serializable {

	private int id;   //用户ID
	private String username;  //用户名
	private String password;  //密码

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}

	@Column(name="userName",length=50)
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}

	@Column(name="password",length=50)
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

}</span>

需要注意:实体Bean需要实现Serializable接口,这样就可以有EJB客户端创建该对象,并将该对象传送到服务器端。

(4)开发会话Bean并调用

实体Bean既可以被会话Bean调用,也可以被任何的Java或者JSP调用,在EJB应用程序中,我们通常会在会话Bean中调用实体Bean,来实现对数据库的操作。

新建一个远程的会话Bean组件后会生成一个远程接口类实现类。代码如下:

<span style="font-size:18px;">/**
* @ClassName: 用户管理的远程接口类
* @Description: 用户管理的远程接口类
* @author 孙丽端
* @date 2014年11月28日20:22:51
*/
package com.tgb.ejb;

import javax.ejb.Remote;

@Remote
public interface UserManager {
	public void addUser(User user);
}</span>
<span style="font-size:18px;">/**
* @ClassName: 用户管理的实现类
* @Description: 用户管理的实现类
* @author 孙丽端
* @date 2014年11月28日20:22:51
*/
package com.tgb.ejb;

import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
@Local
public class UserManagerBean implements UserManager {
	@PersistenceContext
	protected EntityManager em;

	@Override
	public void addUser(User user) {
		em.persist(user);	//保存记录
	}

}</span>

其中我们比较陌生的可能是@PersistenceContextEntityManager。先说EntityManager,它是实体管理器,也就是实体Bean的管理容器。通过该对象,我们能够实现与数据库的各种交互,包括增删改查等。再说@PersistenceContext,EntityManager通过注释@PersistenceContext可以实现动态注入EntityManager对象,如果persistence.xml文件中配置了多个不同的持久化内容,则还需要通过unitName属性来指定持久化名称,如下:

<span style="font-size:18px;">@PersistenceContext(unitName="demo")
protected EntityManager em;</span>

(5)打包并部署到JBoss服务器

完成了以上的开发,我们就可以将当前应用发布到JBoss中,形成JNDI服务以供外部访问了。发布的方法很简单,只需要导出该项目的JAR包到JBoss服务器的部署目录%Jboss_Home%\server\default\deploy即可。然后JBoss服务器就会自动加载该服务,创建数据库表,并且发布JNDI服务UserManagerBean/remote,我们就可以通过客户端访问JNDI服务UserManagerBean/remote了。

(6)开发客户端进行测试

首先我们需要把实体类User.java和接口类UserManager.java导出为Jar添加到客户端项目的类路径下,然后新建测试类UserManagerClient.java,代码如下:

<span style="font-size:18px;">/**
* @ClassName: 用户管理的客户端测试类
* @Description: 用户管理的客户端测试类
* @author 孙丽端
* @date 2014年11月28日20:22:51
*/
package com.tgb.ejb;

import javax.naming.InitialContext;
import javax.naming.NamingException;

public class UserManagerClient {

	public static void main(String[] args) throws NamingException {
		InitialContext context = new InitialContext();
		UserManager usermanager = (UserManager)context.lookup("UserManagerBean/remote");

		User user = new User();
		user.setUsername("孙丽端");
		user.setPassword("sunliduan");

		usermanager.addUser(user);

		System.out.print("用户已经成功保存!");
	}
}</span>

该类就通过访问远程JNDI服务“UserManagerBean/remote”,取得了远程会话Bean实例usermanager。然后创建了一个实体对象,调用addUser方法插入该对象。

这样就是一个完整的利用实体Bean向数据库中添加数据的一个小demo了。最后用一张图来表示一下以上六个过程之间的关系:

时间: 2024-11-05 17:19:41

EJB初级篇--EJB组件之实体Bean的相关文章

EJB初级篇--EJB组件之会话Bean

上篇博文中我们已经详解介绍了什么是EJB.其实最简单的说:EJB就是运行在独立服务器上的组件,客户端是通过网络对EJB对象进行调用的.而我们常说的企业Bean组件可以分为三种类型:会话Bean.消息驱动Bean和实体Bean.依据应用设计的不同,开发者可以选择适合应用的组件类型.下面几篇博文中我会为大家分别详细的介绍这三种企业Bean组件.本篇博文则就先来介绍介绍会话Bean吧. 首先来介绍一下,什么是会话Bean.会话Bean能够完成客户所要求的业务操作,它是含有业务逻辑的可重用组件,并能够用

J2EE的十三个技术——EJB之实体Bean

概述: 实体Bean与会话Bean不同,实体Bean是持久的,即使应用程序结束,它仍然存在.它允许共享访问,具有主键. 组成: 1)本地(Local)接口 本地访问EJB,只有在EJB与客户在同一个应用的情况下才可以使用.使用时,它可以与远程接口同时使用. 它可以优化访问EJB,绕过了RMI. 2)远程(Remote)接口 与本地接口最大的不同在于远程接口可以从任何地方访问. 命名: 如果只使用local或Remote接口之一,可使用正常名称.例如HelloWorld和HelloWorldHom

EJB开发第一个无状态会话bean、开发EJB客户端

开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作. 实体Bean(Entity Bean) 它实际上属于java持久化规范(JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate.TopLink等ORM框架各自为营的局面. 消息驱动Bean(Messag

Ejb in action(五)——会话Bean的生命周期

会话Bean与消息驱动Bean.实体Bean的最重要的区别在于生命周期的差异性.会话Bean实例存活期较短,它和线程类似,包括对象的创建.初始化.运行.钝化.激活.销毁. 生命周期的概念,了解生物学的童鞋一定对这个概念不陌生.这里所谓的生命周期,就是指EjbBean实例存在的各个阶段中,提供的一些注解方法.在运行时,Ejb容器会动态调用这些方法. 关于会话Bean的生命周期,Ejb3.0中一共提供了6个注解方法,这些方法都适合有状态会话Bean,而只有@postConstruct和@PreDes

会话EJB系列(一)EJB概述

EJB(Enterprise Java Bean)是Java EE(以前叫J2EE)的核心规范,不仅仅是一种优秀的组件技术,而且还是Java EE 其它规范(如RMI,JNDI,JMS等)的具体应用. 一.EJB的概念和意义 (1)EJB规范的由来 随着软件规模的快速增大和技术复杂度(分布式软件的开发技术,如CORBA.RMI等)的增加,导致软件开发变得越来越复杂,使普通程序员难于处理各种系统级服务,从而使得大型软件系统的开发变得难以为继. 后来,Sun公司发布了EJB规范,目的是统一各种分布式

会话EJB系列(二)EJB分类

(本文承接上一篇文章<会话EJB系列(一)EJB概述>,继续对EJB内容展开详细解说) EJB规范中定义了三种Bean: 会话Bean(Session Bean) 实体Bean(Entity Bean) 消息驱动Bean(MessageDrive Bean) 一.SessionBean的概念和作用 (1)定义 作用:用于处理业务逻辑的完整组件. 当SessionBea部署在在EJB容器中后,客户端获取该EJB组件,并调用它的方法,至方法结束,称为:客户端与SessionBean之间的一次会话,

持久化API(JPA)系列(三)实体Bean的开发技术-建议与数据库的连接

在EJB 2.x中,EJB有3种类型的Bean,分别是会话Bean(Session Bean).消息驱动Bean(Message-Driven Bean)和实体Bean(Entity Bean). 随着EJB 3的推出,EJB2.x中的实体Bean逐渐被JPA规范所替代,JPA不仅能在EJB环境中使用,而且能在Java SE.Java EE环境中使用,相对于EJB 2.x中的实体Bean,它的使用范围更广. 但这里我们仍然将其称做实体Bean. 与会话Bean和消息驱动Bean类似,新的实体Be

EJB_开发单表映射的实体bean

开发单表映射的实体bean 实体bean 它属于java持久化规范(JPA)里的技术,实体bean通过元数据在Javabean和数据库表之间建立起映射关系,然后Java程序猿就能够随心所欲的使用面向对象的编程思想来操纵数据库. JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,眼下实现的JPA规范的主流产品有Hibernate.TopLink和OpenJPA,在JBoss中採用了Hibernate 作为其持久化实现产品. 加入JPA的配置文件persistence.xml 依据JP

NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者

NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者 作者: raindy 来源:http://bbs.hanzify.org/index.php?showtopic=30029 时间:2005-02-15 点击:70791 raindy NSIS简介: NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System)的缩写,它是一个免费的 Win32 安装.卸载系统,它的特点:脚本简洁高效:系统开销小:当然进行安装.