top
Loading...
開發EJB(上)

現在,從如下幾個方面來介紹Enterprise bean的開發:

    開發EJB的主要關鍵的步驟。

    如何使用使用Jbuilder。

    使用Jbuilder之外的其它的開發工具。

    如何開發Eneterprise Beans的詳細的細節。

    目前開發程序的限制。

    開發EJB的主要步驟:

一般來說,整個的開發步驟(開發,配置,組裝)包括如下幾個方面:

    開發:首先要定義三個類:Bean類本身,Bean的本地(Home)和遠程(Remote)接口類。

    配置:配置包括產生配置描述器--這是一個XML文件、聲明了Enterprise Bean的屬性、綁定了bean的class文件(包括stub文件和skeleton文件)。最后將這些配置都放到一個jar文件中。還需要在配置器中定義環境屬性。

    組裝應用程序:包括將Enterprise beans安裝到Server服務器中,測試各層的連接情況。程序組裝器將若干個Enterprise Beans與其它的組件(Servlet,Applet,Script等等)結合起來。組合成一個完整的應用程序。或者將若干個Enterprise beans組合成一個復雜的Enterprise Bean。

    管理Enterprise Bean。

二、使用Jbuilder:

Jbuilder與EJB Container能夠進行無縫連接。Jbuilder和Inprise的應用服務器包括了所有的開發和配置Enterprise Beans的工具以及所需要的庫:

    運行和管理Enterprise Bean的容器。

    命名服務。

    事務服務。

    Java數據庫。

    開發Enterprise Beans所需要的API。

    一個增強的java-to-iiop編譯器,支持值類型和RMI信號。

Jbuilder還提供了一個快速開發應用程序Enterprise Beans的工具和向導。通過簡單而且直觀的步驟,向導幫助你建立一個Enterprise Bean。自己設定某些缺省值,產生了bean的模板,在上面,我們可以增加我們自己的應用邏輯。

Jbuilder也提供了一個EJB的接口生成向導。向導在Enterprise Bean的公共方法基礎上生成了Remote接口和Home接口。Jbuilder還提供一個配置器的向導幫助我們逐步的建立XML描述器文件。并將生成的Stubs集中到一個jar文件中。

三、使用Jbuilder之外的集成環境:

如果你使用其它的除了別的集成環境(IDE)。要確定使用了集成環境IDE所帶的容器工具。也要驗證IDE是否支持EJB規范的? 的版本,還要確定它是否正確的支持EJB的API。

要確定JD到所支持的EJB容器的版本。可以通過檢查Inprise的安裝說明來確定EJB容器所支持的支持JDK的版本。

在配置Enterprise Bean的時候,你必須使用Inprise的應用服務器所提供的工具。這些工具能夠編輯和修改第三方的代理商提供的Inprise配置描述器。還能夠驗證配置描述器,能夠驗證bean的源代碼。

四、Enterprise Beans的開發:

這一節我們主要討論Enterprise bean的提供者要開發enterprise bean必須完成的任務上面。這些任務包括:

    定義和編寫Enterprise bean類:這是Enterprise bean內部應用邏輯的實現。

    編寫Enterprise bean的遠程remote接口類。

    編寫Enterprise bean的本地home 接口類。

    說明主鍵類,主鍵類只是對于Entity bean才需要的。在Enterprise bean的配置描述器中指定主鍵的名字。

Enterprise beans提供者定義了遠程(Remote)接口和本地(home)接口,實現了Enterprise bean類本身。Remote接口中提供了客戶調用Enterprise bean實現的應用邏輯函數的接口。而home接口提供了產生和定位remote接口實例的方法。

在Enterprise bean本身類的實現,本地home接口,遠程remote接口之間并沒有正式的聯系(例如繼承關系)。但是,在三個類里面聲明的方法卻必須遵守EJB里面定義的規范。例如: 你在Enterprise bean里面聲明了一個應用程序的方法或者說應用邏輯。也在beans的remote接口中聲明了這個方法,那么,這兩個地方必須要同樣的名字。Bean的實現里面必須至少有一個Create()方法:ejbCreate()。但是可以有多個帶有不同參數的create()方法。在home接口中,也必須有相同的方法定義(參數的個數相同)。EjbCreate()方法返回的一個容器管理的持久對象。它們都返回一個容器管理持久性的主鍵值。但是,在home的相應的Create()方法中返回值的類型是remote接口。

注意:實體bean的實現的ejbCreate()方法有點不同。實體bean可以不定義ejbCreate()方法。如果實體只是通過應用程序或通過數據庫管理程序的的途徑被加到數據庫中,實體bean就省略了ejbCreate()方法。ejbCreate()返回的值是主鍵類型的。如果ejbCreate()方法是容器管理持久性的實體bean的方法,它的返回值就是NULL類型。如果實體bean實現了Bean管理的持久性,ejbCreate()方法就返回值類型就是主鍵類型。在以后,我們會詳細討論它們的不同。

Entereprise Bean提供者定義了Enterprise bean的語義。容器的任務是把home接口,remote接口和Enterprise bean的實現類結合起來。保證在編譯時和運行時,remote接口和bean的實現類是相對應的。

Enterprise bean的繼承關系:

Enterprise bean的實現類,remote接口,home接口都要從不同的基類中繼承下來。Home接口是從javax.ejb.EJBHome中繼承過來的。Remote接口從javax.ejb.EJBObject中繼承而來。Remote和home接口的基類都是javax.rmi.Remote。

一個會話bean必須實現基類javax.ejb.SessionBean。而實體bean必須實現基類javax.ejb.EntiyBean。這些EJB的基類都是從javax.ejb.EnterpriseBean繼承而來。而javax.ejb.EnterpriseBean又是從java.io.Serializable繼承而來。

下圖顯示了它們之間的關系。在這里,CartBean,既可以是一實體bean,也可以是一個會話bean。它的Home接口是CartHome,remote接口是Cart。

Remote 接口:

每一個Enterprise Bean都必須有一個remote接口。Remote接口定義了應用程序規定客戶可以調用的邏輯操作。這些是一些可以由客戶調用的公共的方法,通常由Enterprise beans類來實現。注意,Enterprise bean的客戶并不直接訪問Bean。而是通過remote接口來訪問。

EJBObject基類:

Enterprise bean類的remote接口擴展了javax.ejb.EJBObject類的公共java接口。而Javax.ejb.EJBObject是所有remote接口的基類。其代碼如下:

package javax.ejb;

public interface EJBObject extends java.rmi.Remote{

public EJBHome getEJBHome() throws java.rmi.RemoteException;

public Object getPrimaryKey() throws java.rmi.RemoteException;

public void Remove() throws java.rmi.RemtoeException, java.rmi.RemoveException

public Handle getHandle() throws java.rmi.RemoteException;

boolean isIdentical (EJBObject p0) throws java.rmi.RemoteException;

}

getEJBHome()方法允許你取得一個相關的Home接口。對于 實體Bean,用getPrimaryKey()方法獲得實體Bean的主鍵值。Remove()可以刪除一個Enterprise bean。具體的語義在各種不同類型的enterprise beans的生命周期中,由上下文中解釋的。方法getHandle()返回了一個Enterprise bean實例的持久的句柄。IsIndentical()方法允許你去比較Enterprise beans是否相同。

方法的要求:

所有的remote接口中的方法必須聲明為公共(public)的,并必須拋出java.rmi.RemotException異常。另外,所有的remote接口中的方法定義的參數和都必須是在RMI-IIOP中有效的。對每一個在remote接口中定義的方法,在Enterprise bean 類里面都要有相應的方法。相應的方法必須要有同樣的名字,同樣類型和數量的參數,同樣的返回值,而且還要拋出同樣的例外。

如下代碼顯示了一個ATM例子的會話bean的remote接口Atm,。里面聲明了一個應用方法transfer()。黑體部分表示EJB規范中必須要有的內容。Remote接口必須擴展javax.ejb.EJBObject類。從客戶端調用的Enterprise bean的每一個方法都必須在remote接口中聲明。Transfer()方法拋出了兩個意外。其中InSufficientFundsException例外是應用程序定義的意外。

Public interface Atm extends javax.ejb.EJBObject{

Public void transfer(String Source, String Target, float amount)

Throws java.rmi.RemoteException, InSufficientFundsException;

}

對于remote接口的定義規則,會話bean和實體bean是一樣的。

Home接口:

Enterprise bean的Home接口控制著bean的生命周期。提供了Enterprise bean對象(也就是對Enterprise bean的實例)的Create(),find(),remove()操作。會話bean和實體bean有不同的生命周期。所以,它們的home接口必須定義不同的方法。

Enterprise bean的提供者必須定義home接口,而由EJB容器來實現home接口。

與Remote接口相似,Home接口中方法中的參數,返回值也必須是RMI-IIOP有效的。所有的方法必須拋出java.rmi.RemoteException例外。

Home接口必須定義一個或多個的Create()方法。每一個這樣的Create()方法都必須命名為Create。并且,它的參數,不管是類型還是數量都必須與bean類里面的ejbCreate()方法對應。注意,home接口中的Create()方法和bean類中ejbCreate()方法的返回值類型是不同的。

實體bean的home接口還包含find()方法。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗