国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > EJB初级篇--EJB组件之实体Bean

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

来源:程序员人生   发布时间:2015-01-07 08:29:57 阅读次数:3246次

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

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

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

计算机生成了可选文字:实体管理器执行更新十JP区查询十日朗n~“口饭月/-产困叭尸‘、‘/气J交0门Cle夕~、沂一\SqIServer,~_一尸、~

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

     1)配置数据源

     2)指定数据源

     3)开发1个实体Bean

     4)开发会话Bean进行调用

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

     6)开发客户端进行测试

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

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


1)配置数据源


     在实际利用中,我们可能需要使用不同的数据库,如MySQLOracleMSSQL Server等。各个数据库数据源配置模板都在%Jboss_Home%docsexamplesjca目录下,共包括38中数据源的连接。要配置到某1个数据源的连接,需要进行以下步骤:

     1.复制模板--复制该数据库类型的配置模板到%Jboss_Home%serverdefaultdeploy目录,并设置数据源参数(以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%serverdefaultlib目录,并重启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>

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


3)开发实体Bean


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

     开发1个实体Bean很简单,只需要新建1个POJO,添加与数据表字段同名的变量,同时使用1些注释符来表示该实体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调用,也能够被任何的JavaJSP调用,在EJB利用程序中,我们通常会在会话Bean中调用实体Bean,来实现对数据库的操作。

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


<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的管理容器。通过该对象,我们能够实现与数据库的各种交互,包括增删改查等。再说@PersistenceContextEntityManager通过注释@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%serverdefaultdeploy便可。然后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。然后创建了1个实体对象,调用addUser方法插入该对象。

 

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


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生