程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 教您如何成為 EJB 專家詳解系列連載之六

教您如何成為 EJB 專家詳解系列連載之六

編輯:關於JAVA

實體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()可以有許多的用法:

1、 不需要給實體beans寫ejbCreate()方法。這個方法對於實體beans時可選擇的。

2、 參數可以是不同的。

3、 必須在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()

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved