软件中间件技术UNIT13_第1页
软件中间件技术UNIT13_第2页
软件中间件技术UNIT13_第3页
软件中间件技术UNIT13_第4页
软件中间件技术UNIT13_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Entity Bean 13.2 BMP Entity Bean13.2 BMP Entity Bean13.1 13.1 实体实体BeanBean编程基础编程基础13.3 CMP Entity Bean13.3 CMP Entity Bean13.4 13.4 EJB QLEJB QL语言语言13.1 实体实体Bean编程基础编程基础 1. 什么是Entity Bean2. Entity Bean所包含的文件 3. Entity Bean的一些特点 1. 什么是什么是Entity Bean Entity Bean是表示数据的组件。 Entity Bean用成员变量来存放来自数据库中的数据,数

2、据库中的每一例都对应与Entity Bean对象的一个成员变量,数据库中的一条记录则对应一个Entity Bean对象实例,Entity Bean还提供一些与变量相关的操作方法。 2. Entity Bean所包含的文件Entity Bean类 一个Entity Bean类的定义对应于数据库的一张表或视图,而一个Entity Bean类的实例则对应于表或视图的一条记录。在这个类中,可以定义一些处理数据的方法,也需要一些供 EJB 容器调用的方法,EJB 容器通过这些方法来管理EntityBean。2. Entity Bean所包含的文件Entity Bean的Remote接口 实现Remote

3、接口的对象是EJB对象。客户端通过调用EJB对象来间接访问Entity Bean的实例。Entity Bean的Home接口 客户端利用这个接口来创建、查找、删除Entity Bean的EJB对象,在这个接口里面除了要定义一些创建EJB对象的方法和删除EJB对象的方法,还要定义一些查找EJB对象的方法。实现接口的对象叫Home对象。2. Entity Bean所包含的文件Entity Bean的local 接口和local Home接口 在很多时候Entity Bean的客户端是一些运行在同一个EJB容器中的其他Session Bean或Entity Bean,local接口和local Ho

4、me接口就是Entity Bean的本地接口。 Entity Bean的主键类 主键类包含了能唯一标识数据库中一条记录的字段,这些字段都对应于主键类中的一个成员变量。主键类必须是实现了序列化接口的可序列化Java对象。2. Entity Bean所包含的文件Entity Bean的部署描述文件 这个文件包含了一些在部署时EJB容器要用到的属性列表。 3. Entity Bean的一些特点的一些特点 Entity Bean的寿命很长 3. Entity Bean的一些特点的一些特点 Entity Bean是数据库的视图 EjbStore() 和ejbLoad()方法完成内存中的数据和数据库中的数

5、据同步。ejbLoad()方法负责从数据库中把数据读入到Bean实例的相对应的成员变量中,而EjbStore()方法则把成员变量中的数据保存到相应的数据库字段中去。由EJB容器决定在什么时候调用这两个方法。 3. Entity Bean的一些特点的一些特点 多个Entity Bean可能同时代表同一个数据记录 在EJB中session bean、entity bean 和message_driven bean的实例都是单线程的。因为这一限制使得一个Bean实例在同一时刻只能服务于一个客户端,所以EJB容器允许在需要的时候初始化多个相同的Bean实例,而每一个Bean实例的数据源都是一样的。数据

6、的同步也是有EJB容器自动完成的。 3. Entity Bean的一些特点的一些特点 Entity Bean池 通常EJB容器会根据设置预先初始化几个Bean实例,并把它们放到一个Bean池中,当需要使用它们时,才把相关的数据读入其中,客户端调用完后,并不马上销毁它们,而是继续让它们留在Bean池中,当新的请求到达时,再把实例和相关的EJB对象关联起来,并把数据读入其中。3. Entity Bean的一些特点的一些特点 Entity Bean池 Entity Bean在进出Bean池时也有激活(Activated)和钝化(Passivated)。Entity Bean的激活(Activated

7、)和钝化(Passivated)还需要调用ejbStore() 和ejbLoad()方法来保存Bean的状态。 3. Entity Bean的一些特点的一些特点 有两种方法处理Entity Bean的数据存储方式 BMP(Bean-managed Persistence)是Bean自己管理的存储方式。 CMP (Container- managed Persistence)是由容器来管理的存储方式。 3. Entity Bean的一些特点的一些特点 Entity Bean的创建和删除和Session Bean是不同的 ejbCreare() 方法中要执行数据库的插入操作,而在ejbremove

8、()方法中则执行数据库的删除操作,Home对象的creare()方法必须把相应的字段值传给ejbCreare()方法。creare()方法返回的是remote接口,也就是EJB对象。 3. Entity Bean的一些特点的一些特点 Entity Bean的查找 Entity Bean提供了许多ejbFinder方法,同时在Home接口中也对应着有一系列的Finder方法,客户端获取了对Home对象的引用后,就直接调用Home对象的Finder方法,Finder方法从数据库中找到对应的数据后,就返回一个相对应的EJB对象。 3. Entity Bean的一些特点的一些特点 Entity Bea

9、n上下文对象 对于Entity Bean,context对象实现的接口是javax.ejb.EntityContext,它是从 javax.ejb.EJBContext 继承来的。 13.2 BMP Entity Bean BMP(Bean-managed Persistent Entity Bean)需要Bean自己完成数据的存取操作,也就是说需要编程来实现从Entity Bean到数据库的映射,通常需要使用数据库API(JDBC或SQL/J)进行编程。 13.2 BMP Entity Bean 1. Entity Bean 基础 2. Entity Bean的finder方法 3. BMP

10、实例Account Bean 4. BMP Entity Bean的生命周期 1. Entity Bean 基础基础 一 个 E n t i t y B e a n 类 必 须 实 现javax.ejb.EntityBean接口,这个接口定义了很多Bean类必须实现的方法,EJB容器需要使用这些方法来对Entity Bean进行管理。1. Entity Bean基础基础 javax.ejb.EntityBean:public interface javax.ejb.EntityBean implements javax.ejb.EnterpriseBean public void setEnt

11、ityContext(javax.ejb.EntityContext); public void unsetEntityContext(); public void ejbRemove(); public void ejbActivate(); public void ejbPassivate(); public void ejbLoad(); public void ejbStore();1. Entity Bean基础基础 除了这些方法,还需要实现一些创建Entity Bean和查找Entity Bean的方法。无论是BMP还是CMP,都需要实现这些方法。 1. Entity Bean基础

12、基础 SetEntityContext() EJB容器初始化一个新的Entity Bean实例时,EJB容器会调用这个方法。这个方法把新建的Bean实例和一个Context对象联系起来。EJB容器调用这个方法的时候,这个Bean实例还只存在于Bean池中,实例中还没有任何数据,它也没有与具体的EJB对象相关联。 1. Entity Bean基础基础 EjbFind() 可以使用这个方法找到一个或多个已经存在的Entity Bean数据实例。用户至少需要实现一个finder方法,那就是ejbFindByPrimaryKey(),这个方法把数据实例的主键或主键类返回给EJB容器,EJB容器会根据具

13、体情况初始化一个或多个Bean实例,然后创建EJB对象,并与Bean实例相关联,最后把EJB对象的引用返回给客户端。在容器完成对这个方法的调用以后,Bean实例就不在Bean池中了,它们被绑定到相应的EJB对象上。 1. Entity Bean基础基础 EjbHome() 有时候需要对多个Entity Bean的数据实例进行操作。Home方法是Bean实例的特殊方法,用户可以调用存在于池中的任何一个实例来完成操作。 1. Entity Bean基础基础 EjbCreate() 如果客户端调用home 对象的create方法,相应地会在数据库中插入一条新的记录,然后EJB容器会新建一个EJB对象

14、,并把这个对象和某个Bean实例相关联,在这个Bean实例中保存着新插入的数据。在容器完成对这个方法的调用的时候,Bean实例就不在Bean池中了,它已经包含了新建的数据,并与某个EJB对象相关联。这个方法同时把EJB对象的引用返回个客户端。 1. Entity Bean基础基础 EjbPostCreate() 对应于每一个EjbCreate方法,都需要定义响应的ejbPostCreate方法,EJB容器在完成ejbCreate方法的调用后马上调用ejbPostCreate方法。可以利用这个方法做一些针对EJB对象的初始化工作,还可以使用这个方法重新设定一些与事务处理相关的参数。 1. Ent

15、ity Bean基础基础 EjbActivate() 在这个方法中需要建立Bean需要的资源连接。注意:不能在这个方法中从数据库读数据,这个任务是有ejbLoad()完成的,此外ejbActivate方法在一个事务处理的过程中是不可能会调用的。 1. Entity Bean基础基础 EjbLoad() EJB容器通过这个方法把数据库中的数据读入到Bean实例中。调用Entity Bean的context对象的getPrimaryKey方法可以告诉EJB容器应该读取哪条数据。 1. Entity Bean基础基础 EjbPassivate() 当EJB容器要让Bean实例返回到Bean池中去时,

16、会调用这个方法,这叫做Bean实例的钝化,在这个方法中需要释放所有在ejbActivate中获取的资源。同样也不需要在这个方法中进行数据的保存工作,这个工作是有ejbStore()完成的。这个方法在一个事务处理的过程中也不会被调用。 1. Entity Bean基础基础 EjbRemove() 调用这个方法将删除数据库中相应的数据记录,但是Bean实例却不会被删除。用户需要调用EntityContext对象的getPrimaryKey方法告诉EJB容器应该删除哪条数据记录。 1. Entity Bean基础基础 unsetEntityContext() 这个方法的调用意味着Bean实例即将被删

17、除,这个实例不再和某个context对象相关联,在这个方法里需要释放所有Bean实例用到的资源,然后这个Bean实例就等着进回收站了。 2. Entity Bean的的finder方法方法 编写finder方法必须遵循的规则: 所有的finder方法是以”ejbFind”开头的。 至少应该有一个ejbFindByPrimaryKey方法。 可以定义很多finder方法,不同的finder方法的参数和名称各不相同。 一个finder方法要么返回一个主键或主键类,要么返回主键或主键类的集合。 2. Entity Bean的的finder方法方法 客户端并不会直接调用Bean实例的这些finder方

18、法,而是通过home对象来间接调用,也就是说对应每一个ejbFind方法,在home接口中都需要定义相应的finder方法,参数必须与Bean类中定义的一样,home接口中的finder方法返回对EJB对象的引用。home接口中的finder方法名以”Find”开头,少了“ejb”三个字母。3. BMP实例实例Account Bean 略略4. BMP Entity Bean的生命周期的生命周期 1) 首先并没有任何Bean存在,EJB容器根据需要,通过newInstance()方法调用Bean的构造函数,初始化一个新的Bean实例,然后容器调用setEntityContext()方法把这个B

19、ean实例和一个Context对象关联起来,这个Context对象包含有Bean运行所需要的环境信息。4. BMP Entity Bean的生命周期的生命周期 2) 这个时候Bean实例已经位于Bean池中,但是还没有读入任何数据,也没有获得Bean所需要的资源,当然也没有任何EJB对象和它关联。客户端在这个时候可以调用Bean的创建和查找方法,还可以调用Bean的ejbHome方法,这些方法都是独立于具体的数据实例的。4. BMP Entity Bean的生命周期的生命周期 2) 如果容器需要对Bean池进行调整,它可以在这个时候删除这个Bean实例,容器通过调用unsetEntityCon

20、text()方法告诉Bean实例它将被删除,然后容器会释放所有对该实例的引用,最后 B e a n 实 例 被 彻 底 删 除 。 所 以 在unsetEntityContext()方法中要执行和setEntityContext()方法相反的操作,为删除做准备。4. BMP Entity Bean的生命周期的生命周期 3) 客户端如果调用home对象的create()方法,容器首先从Bean池中取出一个实例,然后调用Bean实例的ejbCreate()方法,这个方法新建了一个数据实例,并向数据库中插入一条新记录,最后容器新建一个EJB对象,并把对EJB对象的引用返回给客户端。从这个时候开始Be

21、an实例处于“ready”状态。4. BMP Entity Bean的生命周期的生命周期 4) Bean实例在处于“ready”状态的时候,它被绑定到一个数据实例和EJB对象上。如果同时还有其他 Bean 实例对应同一个数据实例,容器会负责在适当的时候调用ejbLoad()和ejbStore()方法来保持数据的同步。 4. BMP Entity Bean的生命周期的生命周期 5) 如果客户端调用home对象的remove()方法,容器会调用Bean实例的ejbRemove()方法,这个方法将删除数据库中对应的记录,至此,Bean实例不再和任何EJB对象相关联,并退回到Bean池中,注意这里并没

22、有把Bean实例删除,而是删掉了数据实例。 4. BMP Entity Bean的生命周期的生命周期 6) 如果EJB容器发现分配给某个客户端的时间已经用完,或者容器需要使用这个Bean实例服务于其他客户端,或者容器已经耗尽了资源,那么当前Bean实例将会被钝化(Passivate),在调用钝化方法之前,EJB容器首先调用ejbStore()以保证数据库中的数据是最新的,钝化之后,Bean实例就回到了Bean池中。 4. BMP Entity Bean的生命周期的生命周期 7) 如果容器又决定把这个到Bean实例分配给其他客户端,也就是让它和一个新的EJB对象相关联,那么容器首先需要激活Bea

23、n实例。容器在调用ejbActivate()之后会调用ejbLoad()方法把数据读入到Bean实例中。13.3 CMP Entity Bean CMP(Container-managed Persistent Entity Bean)不需要直接进行数据库API编码,它的数据库存取是由容器来完成的。13.3 CMP Entity Bean 1. CMP Entity Bean的特点 2. 编写CMP Entity Bean的基本规则4. CMP实例User5. CMP Entity Bean的生命周期 3. JBOSS4.0配置1. CMP Entity Bean的特点 1)数据处理逻辑和数据

24、存取逻辑的分离 首先你需要编写一个不包含任何存取逻辑(JDBC代码)的Entity Bean,然后容器自动从你定义的这个Bean类继承,并生成一个子类,容器在这个子类中嵌入了由容器自动生成的JDBC代码,这就是CMP,由容器来完成数据存取逻辑,而数据处理逻辑则由你定义的父类完成。所以CMP Entity Bean实际上包含两个Bean类,一个是用户定义的父类,另一个则是由容器生成的子类,在子类中封装有数据的存取逻辑。1. CMP Entity Bean的特点 2)与数据库字段相对应的成员变量在子类中定义 CMP Entity Bean类是在它的子类中定义这些成员变量的。因为不同的EJB容器对数

25、据的表达方式不一样,另外数据的表达也应该和数据的存取逻辑放在一块,这样进一步体现数据的处理逻辑和数据的存取逻辑的分离。 1. CMP Entity Bean的特点 3)get/set方法也在子类中定义 和代表数据的成员变量一样,这些变量的get/set方法也是在子类中定义的。为了能够在父类中调用子类中的方法,必须要在父类中把相关的方法定义为abstract。 1. CMP Entity Bean的特点 4)部署描述文件在CMP中的作用 在CMP中,EJB容器通过部署描述文件获取相关的信息来产生数据成员变量、get/set方法和JDBC编码。 1. CMP Entity Bean的特点 5)EJ

26、B查询语言 EJB查询语言(EJB-QL)是一种面向对象的查询语言,它的基本语法和SQL很相似。在部署文件中定义EJB-QL语言,EJB容器通过这些语言来生成相应的JDBC代码。 1. CMP Entity Bean的特点 6)ejbSelect()方法 CMP Entity Bean有一个专门的ejbSelect()方法,这个方法并不向客户端开放,它是一个内部方法,这个方法在处理Bean之间的关系是非常有用。 2.编写编写CMP Entity Bean的基本规则的基本规则1)SetEntityContext() 和BMP一样,EJB容器初始化一个新的Entity Bean实例时,EJB容器会

27、调用这个方法。这个方法把新建的Bean实例和一个Context对象联系起来。EJB容器调用这个方法的时候,这个Bean实例还只存在于Bean池中,实例中还没有任何数据,它也没有与具体的EJB对象相关联。2.编写编写CMP Entity Bean的基本规则的基本规则2)ejbFind() 对于CMP,用户不需要实现这些方法,当客户端调用home对象的finder方法时,EJB通过EJB-QL和其他一些工具来告诉容器如何完成查找工作。2.编写编写CMP Entity Bean的基本规则的基本规则3) ejbSelect() 客户端不用调用这些方法, 这些方法是辅助Bean进行内部查询用的,通常需要

28、定义为abstract型。2.编写编写CMP Entity Bean的基本规则的基本规则4)EjbHome() 这些操作对象并不是哪个单独的数据实例,而是很多数据实例,客户端调用这些方法的时候,Bean实例可能还位于Bean池中。2.编写编写CMP Entity Bean的基本规则的基本规则5)EjbCreate() 当客户端调用这些方法的时候,会新生成一个数据实例,也就是说会在数据库中插入一条新记录。对于CMP,用户不需要像BMP那样进行JDBC数据插入操作,而是简单的检查一下传入的参数是否正确,然后把值传给相应的成员变量。2.编写编写CMP Entity Bean的基本规则的基本规则6)E

29、jbPostCreate() 对 应 于 每 一 个 E j b C r e a t e 方 法 , 都 有 一 个EjbPostCreate方法,容器在调用完EjbCreate方法后,马上就调用EjbPostCreate方法,这个时候Bean实例已经和一个EJB对象关联起来了,用户就马上可以在这个方法中做一些跟EJB对象相关的初始化工作。 2.编写编写CMP Entity Bean的基本规则的基本规则7)EjbActivate() 如果客户端调用某个EJB对象的方法,但是这个EJB对象却还没有和Bean实例相关联,容器就会从Bean池中取出一个来,这叫做Bean的激活,在这个方法中需要获取B

30、ean要用到的一些资源。2.编写编写CMP Entity Bean的基本规则的基本规则8)EjbLoad() 用户不需要像BMP那样在这个方法进行数据库的读操作,EJB容器在调用这个方法之前自动从数据库中读入相关字段的值。当然这并不意味着这个方法就没有什么用了,你可以在这个方法中对读入的数据做一些加工。2.编写编写CMP Entity Bean的基本规则的基本规则9)EjbPassivate() 如果容器调用这个方法,Bean实例就返回到Bean池中去了,这叫做Bean实例的钝化,在这个方法中需要释放所有在ejbActivate中获取的资源。 2.编写编写CMP Entity Bean的基本规

31、则的基本规则10)EjbRemove() 如果客户端调用这个方法,容器会删除相应的数据实例,也就是删除数据库中的当前记录,但不会删除Bean实例,Bean实例可以返回到Bean池中供其他客户端使用。和BMP不同,在这个方法中用户不需要编码进行数据库的删除操作,而只需要做一些删除数据之前的准备工作,容器在调用完这个方法后马上自动完成删除操作。2.编写编写CMP Entity Bean的基本规则的基本规则11)unsetEntityContext() 调用这个方法意味着Bean实例要被删除了,这个时候Bean实例不再和context对象相关联,在这个方法中需要释放所有在setEntityConte

32、xt方法中获取的资源。 3. JBOSS4.0JBOSS4.0配置配置(1)(1)创建创建jboss_homeserverdefaultdeploymysql-ds.xmljboss_homeserverdefaultdeploymysql-ds.xml。(2) mysql-connector-java-5.0.8-bin.jar(2) mysql-connector-java-5.0.8-bin.jar复制到复制到 jboss_homeserverdefaultlib jboss_homeserverdefaultlib文件夹下。文件夹下。3. JBOSS4.0JBOSS4.0配置配置(3)

33、 编辑编辑JBoss安装目录安装目录/server/default/deploy/conf/login-config.xml: login-module code = flag = required guest guest guest guest guest guest module-option name = jboss.jca:service=TxCM,name=JmsXAjboss.jca:service=TxCM,name=JmsXAdule-option 3. JBOSS4.0JBOSS4.0配置配置 login-module code = flag = required testt

34、est rootroot zm661068zm661068/module-option module-option name = jboss.jca:service=LocalTxCM,name=managedConnectionFactoryNamejboss.jca:service=LocalTxCM,name=MySqlDSMySqlDS 3. JBOSS4.0JBOSS4.0配置配置(4) 编辑编辑JBoss安装目录安装目录/server/default/deploy/conf/standardjaws.xml: java:/DefaultDS java:/DefaultDS Hype

35、rsonic SQL Hypersonic SQL false false 3. JBOSS4.0JBOSS4.0配置配置 java:/ java:/MySqlDSMySqlDS mySQLmySQL false false3. JBOSS4.0JBOSS4.0配置配置(5) 编辑编辑JBoss安装目录安装目录/server/default/deploy/conf/standardjbosscmp-jdbc.xml: java:/DefaultDS java:/DefaultDS 3. JBOSS4.0JBOSS4.0配置配置 java:/ java:/MySqlDSMySqlDS4. CMP

36、实例实例User Bean 1. User.java2. UserHome.java3. UserBean.java4. CMP实例实例User Bean 新建一个 Lomboz J2EE Project: 项目名:CMP_Sample EJB Modules:cmpEJB Targeted Server: JBoss 4.0.44. CMP实例实例User Bean 继续在继续在 CMP_Sample CMP_Sample 项目中,右击项目中,右击“srcsrc” - -新新建建 -其它其它 - Lomboz EJB Creation Wizard :- Lomboz EJB Creatio

37、n Wizard : 包(包(K K) :ejb.cmpejb.cmp 名称(名称(M M):): UserUser EJB Type EJB Type:选择选择ContainerContainerManaged EntityManaged EntityEJBEJB 点击下一步。点击下一步。4. CMP实例实例User Bean 4. CMP实例实例User Bean 同样,再增加一个密码栏:同样,再增加一个密码栏: Field: password, Field: password, Field Type: java.lang.String, Field Type: java.lang.Str

38、ing, Database Column: Database Column: 密码密码, , SQL Type: varchar SQL Type: varchar 这个不要使它成为主键。这个不要使它成为主键。 最后点击完成。最后点击完成。4. CMP实例实例User Bean 修改生成的修改生成的 UserBean.java UserBean.java 文件,先添加自动创建表的语句文件,先添加自动创建表的语句 4. CMP实例实例User Bean 4. CMP实例实例User Bean 完成完成 ejbCreate ejbCreate 和和 ejbPostCreate ejbPostCre

39、ate 方法:方法:4. CMP实例实例User Bean 在上面的在上面的 ejb.bean ejb.bean 中添加中添加 view-type = view-type = locallocal 4. CMP实例实例User Bean 试验各种配置: 先将 UserBean.java 添加到 cmpEJB 模块中,然后 lomboz -Generate EJB Classes Generate EJB Classes 生成其它ejb类文件。 运行 MySQl 服务,再通过 Lomboz 启动 JBoss 服务器。 通过 Deploy ModuleDeploy Module 部署 cmpEJB

40、 模块,再打开MySql的客户端,会发现在 cmp_sample 数据库中已经自动生成了一个 usertable 的数据表。 4. CMP实例实例UserManagementBean 右击右击 javamxj.ejb.cmp包包-新建新建-其它其它-还是选择还是选择Lomboz EJB Creation Wizard : 包(K) :javamxj.ejb.cmp 名称(M): UserManagement EJB Type: 选择 Stateless 然 后 , 点 击 “ 完 成 ” , 这 时 会 生 成 一 个 UserManagementBean.java 的文件。4. CMP实例实

41、例UserManagementBean 首先,增加一个 UserLocalHome 的变量 userHome, private UserLocalHome userHome = null; 然后右击 UserManagementBean -J2EE -Add Create Method(这是 JBossv-IDE 附带的):4. CMP实例实例UserManagementBean4. CMP实例实例UserManagementBean4. CMP实例实例UserManagementBean在生成的代码框中添加语句:在生成的代码框中添加语句:userHome = UserUtil.getLoca

42、lHome();userHome = UserUtil.getLocalHome(); 如下图:需要手工输入的语句已经标出来了:如下图:需要手工输入的语句已经标出来了:4. CMP实例实例UserManagementBean添加业务方法:添加业务方法: 增 加增 加 a d d U s e r 方 法 , 向 上 面 操 作 一 样 , 右 击方 法 , 向 上 面 操 作 一 样 , 右 击UserManagementBean-J2EE-AddBusinessMethod: 4. CMP实例实例UserManagementBean在生成的代码框中添加语句:在生成的代码框中添加语句:UserL

43、ocal user = userHome.create(email, password);UserLocal user = userHome.create(email, password); 增加增加 removeUser removeUser 方法方法 4. CMP实例实例UserManagementBean在生成的代码框中添加语句:在生成的代码框中添加语句:userHome.remove(email);userHome.remove(email); 增加增加verifyPassword verifyPassword 方法方法 4. CMP实例实例UserManagementBean在生成的

44、代码框中添加语句:在生成的代码框中添加语句:UserLocal user = userHome.findByPrimaryKey(email);UserLocal user = userHome.findByPrimaryKey(email);return user.getPassword().equals(password);return user.getPassword().equals(password); 为了将为了将 UserBean UserBean 与与 UserManagementBean UserManagementBean 联系起来,在上面联系起来,在上面注释中添加:注释中

45、添加:* * view-type = remoteview-type = remote * * ejb.ejb-ref ejb.ejb-ref * * ejb-name = Userejb-name = User“* * view-type = local view-type = local“* * ref-name = ejb/UserLocal ref-name = ejb/UserLocal* * jboss.ejb-local-ref jboss.ejb-local-ref * * ref-name = UserLocalref-name = UserLocal * * jndi-na

46、me = UserLocal jndi-name = UserLocal 4. CMP实例实例UserManagementBean 4. CMP实例实例UserManagementBean 将 UserManagementBean 加入到 cmpEJB 模块中, 然后 lomboz -Generate EJB Classes 运行 MySQl 服务,再通过 Lomboz 启动 JBoss 服务器。 然后通过 Deploy Module 部署 cmpEJB 模块 4. CMP实例实例CMPClient1 右击右击 srcsrc文件夹文件夹 -新建新建 -其它其它- Lomboz EJB - Lo

47、mboz EJB Test ClientTest Client Wizard: Wizard: 4. CMP实例实例CMPClient1 修改生成的修改生成的 CMPClient1.javaCMPClient1.java4. CMP实例实例CMPClient1 运行客户端程序,则客户端控制台会输出:运行客户端程序,则客户端控制台会输出:Login=true 同 时 , 用同 时 , 用 M y S Q L 客 户 端 软 件 查 看客 户 端 软 件 查 看cmp_sample表。表。5. CMP Entity Bean的生命周期的生命周期 CMP Entity Bean的生命周期和BMP E

48、ntity Bean的生命周期基本一样,唯一的不同就是CMP实体Bean的ejbSelect()方法能够从池化状态或就绪状态被调用。13.4 EJB QL语言语言 EJB 查询语言 (EJB QL: Enterprise JavaBean Query Language) 规定了持久性管理器应该如何实现在本地接口中定义的各种查找方法。 EJB QL 以 SQL-92 为基础,可由持久性管理器自动编译,这使得实体 bean 具有更高的可移植性,并且更容易部署。 13.4 EJB QL语言语言EJBQL语法语法Finder方法方法Select方法方法FROM子句子句WHERE子句子句6.SELECT

49、子句子句7.EJBQL和查找方法和查找方法8.EJBQL和选择方法和选择方法1. EJB QL 语法语法 EJB QL定义了使用抽象模式名称和关联进行导航的查询。 EJB QL = select子句 from子句 where子句 其中from子句为引导模式,声明了抽象模式名字的识别变量。通过这些识别变量, select子句定义了查询的返回类型, where子句定义了查询条件。 2. Finder 方法方法 finder方法从持久化存储的关系数据库内获取一个实体Bean个体和集合。这些方法定义在实体Bean的home接口中。因此,它们对客户端是可见的。 3. Select 方法方法 select

50、方法是实体Bean中的特殊的查询方法。它们没有在home接口内声明,因此,它们对客户端是不可见的。Select方法通常有两种形式:ejbSelectejbSelectInEntity 3. Select 方法方法 Select方法通常有两种形式:ejbSelectejbSelectInEntityejbSelect方法不跟特定的实体Bean实例发生联系。ejbSelect InEntity方法是跟特定于实体Bean的执行实例的。 4. FROM 子句子句 from子句通过声明识别变量定义了查询域。识别变量 不能在SELECT子句和WHERE子句内声明。 SELECT子句和WHERE子句只能使用

51、这些定义在FROM子 句内的识别变量。 FROM子句可以定义多个识别变量。识 别变量的名称不应该跟抽象模式的名称或EJB的名称相同 。识别变量也不允许是保留字。识别变量声明由范围变 量声明和集合成员声明。4. FROM 子句子句 4. FROM 子句子句 例:找出所有的软盘驱动器产品的订单: SELECT OBJECT(o) FROM Order o,IN(o.lineItems)li WHERE duct_type=“fFloppy Drive” FROM子句声明了标识符“o”为一个范围变量,“li” 为一个集合成员变量。5. WHERE 子句子句 WHERE子句

52、定义了SELECT表达式的条件。在EJB QL中, WHERE子句所有识别变量必须在FROM子句内声明。也可以为finder和select方法传递输入参数。如:SELECT OBJECT(o) FROM Order o,IN(o.lineItems)li WHERE li.quantity=?1SELECT OBJECT(o) FROM Order o,IN(o.lineItems)li WHERE duct_type= ?1 AND duct.price=?26. SELECT 子句子句 SELECT子句指示了查询的执行结果。 SELECT子句决定查询返回值的类型。如:SELECT OBJECT(o) FROM Order o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论