快速业务通道

实体 Bean 和 CMP - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25

实体 Bean 和 CMP

时间:2008-05-07

什么是一个实体(Entity) Bean

一个持久对象

通常它是被当成一样"东西",或者会长期存在的

BankAccount

Employee

Order

不仅仅只是数据--状态和行为,与常规对象一样

在数据库中的实体 Bean

一个实体 bean 直接映射到数据库中的一行数据

ID LASTNM MGR DEPT SALARY

... ... ... ... ...

42 "Joe" Smith 0 55000.0

97 "Bob" Jones 42 40000.0

102 "Mary" Chen 987 63000.0

... ... ... ... ...

Employee

id: int

first: string

last: string

Salary: double

Managerld: int

Dpartmentld: int

Entity Bean 和 Persistence

根据规范定义,实体 Bean 一旦被创建后就存在

它们被直接写到数据库中

可以不受任何服务器的宕机影响

Create 方法必需提供足够的信息将 Bean 保存到数据库中

实体 Bean 与 会话 Bean 的区别

实体 Bean

持久对象; 不受服务器宕机影响

有一个主键; 可以被搜索到

可以被共享

必需被显式删除

会话 Bean

不是持久的; 受服务器宕机影响

不可以被搜索

通常一个用户使用一个 bean

过一段非活动期后将被自动回收

Aside: 什么是一个主键?

(一个或多个)域可以唯一地区别一行数据/一个 bean--用来查找和更新数据/对象

在数据/对象的生命周期中是不变的--主键是基于不变的数据

主键通常是生成的而不是基于"活跃"的数据

SSN 显然适合于作为一个主键

就算错误选择的主键不能再被修改

Aside: 什么是一个关系型数据库?

数据库: 一组数据集合可以被检索和查找--一个关系型数据库维持不同行数据间的关系

数据被组织成表格--外键(Foreign Key)用来映射关系、Structured Query Language (SQL) 用来操作数据库

读 (select), 写 (insert, update), 删除 (delete)

同步访问的控制

容器管理同步访问--线程获得对 Bean 的独有访问、即 Bean 的每个方法是 synchronized

警告: 当心死锁!

Bean 本身也是客户!

Client 1 有对 Bean 1 的独有锁

Client 2 有对 Bean 2 的独有锁

Bean 1 必需等待 Client 2 的结束

Bean 2 必需等待 Client 1 的结束

没有任何一方得到锁!

实体 Bean 有主键

主键用来唯一地区别 bean--类似于数据库主键的概念

主键类:必需反映 bean 类的"关键"状态、必需提供 equals(...) 和 hashCode() 方法

主键可能由多个域组成

... Employee employee = employeeHome.findByPrimaryKey(new EmployeeKey(42)); ... Create 方法 Home 定义了一个或多个 "create" 方法--在创建后,Bean 必需马上被写到数据库 EmployeeHome method Employee create(int arg1, String arg2, String arg3) throws CreateException, RemoteException EmployeeBean method public void ejbCreate(int argId, String first, String last) throws CreateException, RemoteException { id = argId; setFirst(first); setLast(last); setManagerId(0); setDepartmentId(0); }

实体 Bean 和 CMP(2)

时间:2008-05-07

Post-Create

对每个 ejbCreate 方法必需有一个 ejbPostCreate--有相同的参数

容器将:

调用 ejbCreate(...) 方法, 它将返回所创建实体的一个主键

创建对应该主键的一个 EJB 对象引用

调用 ejbPostCreate(...) 方法通知实例来完全初始化它本身

public void ejbPostCreate(int argId, String first, String last) throws CreateException, RemoteException { }

Finder 方法

Bean home 接口定义了 "ejbFind" 方法---通过 VAJ 的 Persistence Lay, 容器提供一个实现

方法将返回:---单个结果的 Remote 接口、多个结果的 Enumeration

Must be provided Employee findByPr

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号