實體beans是個永久性的對象
使用Java對象
大多數的情況下
都需要捕捉對象當前工作的狀態
將它保存到永久性的存儲器中
實現這一點的一個辦法是使用object serialization
另一個辦法是使用傳統相關數據庫存儲Java對象
例如sqlserver或oracle
什麼是實體beans 在成熟的多層的面向對象的配置中
可以劃分出兩種不同的組件配置
應用邏輯組件
這些組件是執行普通任務的方法提供者
持久的數據組件
這種對象可以將自己提交給永久性存儲器
Entity beanss實現接口Javax
ejb
Entitybeans
其描述了特定數據源中的數據
能長時間存在於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一樣
也必須將這些文件打包成Ejb
jar文件
實體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必須實現Javax
ejb
Entitybeans
Entitybeans接口繼承了Javax
ejb
Enterprisebeans:
public interface Javax
ejb
Enterprisebeans implements Java
io
Serializable {
}
Javax
ejb
Enterprisebeans interface
public interface Javax
ejb
Entitybeans implements Javax
ejb
Enterprisebeans {
public abstract void setEntityContext(Javax
ejb
EntityContext);
public abstract void unsetEntityContext();
public abstract void ejbRemove();
public abstract void ejbActivate();
public abstract void ejbPassivate();
public abstract void ejbLoad();
public abstract void ejbStore();
}
Javax
ejb
Entitybeans 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 beans
managed persistent entity beans and EJB object
查找的方法都是由ejbFind開始
至少有一個查找方法被ejbFindByPrimaryKey調用
可以有許多不同名字和參數的不同的查找方法
客戶端不直接調用beans實例本身的查找方法
實體beans的破壞
ejbRemove()
這個方法是無參數的
是所有的實體beans所必需的
實體上下文對於會話beans
上下文接口是Javax
ejb
SessionContext
對於實體beans
接口為Javax
ejb
EntityContext
這兩個上下文接口都繼承了Javax
ejb
EJBContext接口
public interface Javax
ejb
EJBContext {
public abstract Javax
ejb
EJBHome getEJBHome();
public abstract Java
util
Properties getEnvironment();
public abstract Java
security
Identity getCallerIdentity();
public abstract boolean isCallerInRole(Java
security
Identity);
public abstract Javax
jts
UserTransaction getUserTransaction();
public abstract void setRollbackOnly();
public abstract boolean getRollbackOnly();
}
Source Javax
ejb
EJBContext
The Javax
ejb
EJBContext Interface
s Methods
public interface Javax
ejb
EntityContext implements Javax
ejb
EJBContext {
public abstract Javax
ejb
EJBObject getEJBObject();
public abstract Java
lang
Object getPrimaryKey();
}
getEJBObject()
getPrimaryKey()
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25696.html