实体beans是个永久性的对象使用Java对象大多数的情况下都需要捕捉对象当前工作的状态将它保存到永久性的存储器中实现这一点的一个办法是使用object serialization另一个办法是使用传统相关数据库存储Java对象例如sqlserver或oracle
什么是实体beans
在成熟的多层的面向对象的配置中可以划分出两种不同的组件配置
应用逻辑组件这些组件是执行普通任务的方法提供者
持久的数据组件这种对象可以将自己提交给永久性存储器
Entity beanss实现接口JavaxejbEntitybeans其描述了特定数据源中的数据能长时间存在于EJB Container中不会随系统的意外中止而消失并且可以让多个客户同时访问
实体beans包含的文件
实体beans类是模拟持久数据的Java类一个实体beans类映射到在数据库中的实体定义
实体beans的远程接口客户端调用的beans的接口其中包含实体beans的每一个业务方法的描述EJB容器商提供了用来实现远程接口的工具它的具体实现是实体beans的EJB对象EJB对象代表了客户端和beans之间间接的一层客户端直接调用EJB对象用以达到调用实体beans的目的因为EJB对象是容器的一部分它包含截取方法调用的逻辑管理在beans实例上所需的任务这和会话beans是相同的
实体beans的home接口客户端使用它来建立查找破坏实体beans的EJB对象EJB容器商提供了产生home接口的工具它的具体实现是home对象Home对象是EJB对象的工厂客户端必须执行JNDL定位找到home对象这和会话beans也是相同的
实体beans的主键类这是实体beans的特殊标识主键使得实体beans各不相同主键也是个对象它可以包含大量的属性主键也可以是实体对象 实体beans的配置描述符是容器配置使用到的属性列表
实体beans的环境属性允许使用者在配置上定制实体beans
同会话beans一样也必须将这些文件打包成Ejbjar文件
实体beans的特征
生命期长
恢复性
实体beans的实例是数据库的视图
不同的实体beans实例可以代表相同的数据
实体beans的实例间可以共享
EJB容器聚集了实体beans的实例实体beans必须实现以下两种调用方法
ejbActivate()
ejbPassivate()
当实体beans被钝化时不仅仅要释放资源还要保存状态ejbStore()相反还有ejbLoad()实体beans和状态beans在这方面是相同的都有钝化/激活过程所不同之处在ejbStore调用保存在钝化时的状态ejbLoad()在激活期间装载状态实体beans钝化时保存状态和激活时装载状态保持实体beans永久状态的两种方法一种方法是在beans中实现一套数据库调用例如可以通过JDBC执行sql语句第二种方法是使用EJB容器通过配置描述符通知容器beans的那些区域是持久性区域实体beans可被建立删除和查找实体beans可以不通过EJB而进行修改
开发和使用实体beans实体beans必须实现JavaxejbEntitybeansEntitybeans接口继承了JavaxejbEnterprisebeans:
public interface JavaxejbEnterprisebeans implements JavaioSerializable {
}
JavaxejbEnterprisebeans interface
public interface JavaxejbEntitybeans implements JavaxejbEnterprisebeans {
public abstract void setEntityContext(JavaxejbEntityContext);
public abstract void unsetEntityContext();
public abstract void ejbRemove();
public abstract void ejbActivate();
public abstract void ejbPassivate();
public abstract void ejbLoad();
public abstract void ejbStore();
}
JavaxejbEntitybeans interface
实体beans的建立ejbCreate()ejbCreate()可以有许多的用法
不需要给实体beans写ejbCreate()方法这个方法对于实体beans时可选择的
参数可以是不同的
必须在home接口中复制ejbCreate()方法客户端不直接调用beans它们通过调用EJB对象代理
已存在实体beans的查找ejbFind()有不同的查找方法
/**
* Finds the unique bank account indexed by primary key key
*/
public AccountPK ejbFindByPrimaryKey(AccountPK key)
/**
* Finds all the product entity beanss Returns an Enumeration
* of primary keys
*/
public Enumeration ejbFindAllProducts()
/**
* Finds all Bank Accounts that have at least a minimum balance
* Returns an Enumeration of primary keys
*/
public Enumeration ejbFindBigAccounts(int minimum)
/**
* Finds the most recently placed order
*/
public OrderPK ejbFindMostRecentOrder()
Creating a beansmanaged persistent entity beans and EJB object
查找的方法都是由ejbFind开始至少有一个查找方法被ejbFindByPrimaryKey调用可以有许多不同名字和参数的不同的查找方法客户端不直接调用beans实例本身的查找方法实体beans的破坏ejbRemove()这个方法是无参数的是所有的实体beans所必需的实体上下文对于会话beans上下文接口是JavaxejbSessionContext对于实体beans接口为JavaxejbEntityContext这两个上下文接口都继承了JavaxejbEJBContext接口
public interface JavaxejbEJBContext {
public abstract JavaxejbEJBHome getEJBHome();
public abstract JavautilProperties getEnvironment();
public abstract JavasecurityIdentity getCallerIdentity();
public abstract boolean isCallerInRole(JavasecurityIdentity);
public abstract JavaxjtsUserTransaction getUserTransaction();
public abstract void setRollbackOnly();
public abstract boolean getRollbackOnly();
}
Source JavaxejbEJBContext
The JavaxejbEJBContext Interfaces Methods
public interface JavaxejbEntityContext implements JavaxejbEJBContext {
public abstract JavaxejbEJBObject getEJBObject();
public abstract JavalangObject getPrimaryKey();
}
getEJBObject()
getPrimaryKey()