国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Enterprise JavaBeans導論2

2019-11-18 12:36:39
字體:
來源:轉載
供稿:網友

  理解EJB組件
  你現在應該已經熟悉了整個EJB體系結構及其主要的部件。這一節更具體地描述了這些部件,并解釋它們運行時的行為語意。
  
  Home接口
  EJB庫使用enterPRise bean的客戶端通過它的home接口創建它的實例。Home接口包含一個或多個用來創建enterprise bean實例的create()方法。這個home接口不是由bean來實現,而是通過稱為home object的類來實現。一個home object的實例在服務器中實例化,使得客戶端可以訪問它們。
  定位home object 一個home object的引用被放在名字服務中,客戶端能通過JNDI訪問它。EJB服務器一般提供某種名字空間的實現,雖然有時可以使用外部的名字空間。在這兩種情況下客戶端都必須知道名字空間的位置以及JNDI的上下文類。例如,一個客戶端的applet可能接收名字空間和JNDI上下文類作為applet的參數。
  除了提供位置和類名,客戶端也必須知道在名字樹中定位home object.這些必須在客戶端啟動時提供。當部署者把enterprise bean部署進EJB服務器中時,他必須可以以參數形式指定名字樹,如ejb/accounting/AccountsPayable.客戶端必須獲得這個完整的路徑名來定位并獲得AccountsPayable home object的引用。并不是說客戶端通過JNDI獲得容器。客戶端使用JNDI查找home接口的實現。Home接口的實現由某個非凡的container來提供,但這是該容器廠商的細節,enterprise bean開發者和客戶端應該忽略它。
  Home接口中的方法
  Enterprise bean開發者定義ejbCreate()方法的同時必須在home接口中聲明與其相應的create()方法。實體bean可以包含finder方法以使得客戶端能定位已有的實體bean. Home接口是通過繼續javax.ejb.EJBHome來定義的。該接口包含如下的方法:
  
  public interface javax.ejb.EJBHome extends Remote {
  public EJBMetaData getEJBMetaData() throws RemoteException;
  public void remove(Handle handle) throws
  RemoteException,RemoveException;
  public void remove(Object primaryKey) throws
  RemoteException,RemoveException;
  一個bean的home接口可以象下面這樣:
  public interface myHome extends EJBHome {
  public myRem create() throws RemoteException,CreateException;
  public myRem create(String str) throws
  RemoteException,CreateException;
  其中
  public interface myRem extends EJBObject { … }
  
  容器開發商負責提供實現home接口的home對象,因為只有開發商才能實現存貯enterprise bean的庫的編碼。
  
  容器
  定義容器在理解EJB規范時容器這個術語并不應從字面上簡單地理解為類,而是一層代替bean執行相應服務的接口。容器開發商提供運行在EJB服務器中一套完成這些功能的工具和接口。
  這些服務包括:
  
  ·與二級存儲中交換(對會話bean)
  ·持久性治理(對實體bean)
  ·實現創建和查找服務的home object的可用性
  ·在可通過JNDI訪問的名字空間home object的可視性
  ·正確的創建、初始化和刪除bean
  ·保證商業方法正確地運行在事務上下文中
  ·實現某一基本的安全服務
  ·從home object和EJBObject上的RMI上產生stub和skeleton
  
  容器和EJBObject對規范經常引用由容器或EJBObject提供的服務。這些服務只是用來說明而不暗示非凡類的服務需求。支持enterprise bean的EJBObject和容器類都由容器開發商提供。這些類必須完成bean容器的功能。對bean來說容器和EJBObject是不同的入口點,對某個非凡的服務提供支持獨特的能力。例如,容器通過讀部署描述符來知道應用于bean方法的事務屬性。然而,這些商業方法通過EJBObject調用。
  EJBObject必須與容器通訊來確定調用商業方法的事務上下文。確定以后,EJBObject在調用商業方法以前建立事務上下文。重要的是EJBObject 和容器的協同工作來實現容器所需的事務。容器廠商提供二者的實現,但對二者的功能分割卻是自由的。與home接口的關系
  目前廠商提供工具來讀home 接口并產生作為容器的home object.在這種情況下廠商對每個enterprise bean類使用不同的容器類。容器廠商可以使用其它的實現策略,如一個容器類實現多個home接口,甚至一個標準的容器類創建獨立的home object實現。唯一的必要條件是容器廠商必須使客戶端能通過JNDI訪問home object. 客戶端和bean開發者都不需關心容器和home object的實現細節。
  
  Enterprise JavaBean
  
  Enterprise bean是開發者編寫的提供給用程序功能的類。開發者可以選擇創建會話bean或實體bean,通過實現不同的接口聲明其部署描述符來加以區分。
  對于會話bean:
  public class myBean implements javax.ejb.sessionBean …
  對于實體bean:
  public class myBean implements javax.ejb.EntityBean …
  客戶端不會直接訪問enterprise bean中的任何方法。客戶端通過EJBObject 間接調用bean中的方法,EJBObject就象一個代理一樣。在把調用通過EJBObject傳遞時,容器開發商通過包裝編碼插入其自己的功能,這稱為方法插入。方法插入的一個例子是為每個方法調用創建一個新的事務上下文,當方法返回到EJBObject時提交或回滾事務。
  當容器廠商的工具在安裝bean產生stub和skeleton時,它產生bean的EJBObject一個stub和skeleton.實際上它并不創建bean本身的stub和skeleton,因為bean不會通過網絡被訪問。EJBObject是真正的網絡對象。Bean 是包含應用相關的商業編碼的代表。
  容器也可以調用bean中的某個方法。例如,容器保證當一個bean 實例生成后,home object中的create()的任何參數會傳遞bean相應的ejbCreate()方法。 Enterprise bean還有其它的接口和要求。然而,會話bean和實體bean的要求是不同的。這些在隨后詳述會話和實體bean的章節中會cover.
  
  Remote Interface
  
  編寫完enterprise bean后開發者創建了一個客戶端可訪問創建方法的home interface,在home interface中每一個create()方法在相應的bean中都必須有一個ejbcreate()方法。同樣,開發者必須創建描述客戶端能夠訪問的商業方法的remote interface。
  因為所有的客戶端調用都通過EJBObject,因此實現這個接口的是EJBObject而不是home object. Remote interface中列出的方法名和signature必須和實現bean的方法名和signature相同。這不同于home interface--方法signature是一樣的,而名字卻不同。以下是一個remote interface的例子:
  
  public interface Account extends javax.ejb.EJBObject {
  public void deposit(double amount) throws RemoteException;
  public void withdraw(double amount) throws RemoteException;
  public double balance() throws RemoteException;
  }
  
  所有聲明的方法都必須拋出一個RemoteException例外,因為規范要求客戶端stub是RMI兼容的。但這并不意味著排除了用其它的傳輸方式的stub/skeleton實現,如CORBA/IIOP.
  Remote interface繼續javax.ejb.EJBObject接口,增加了額外的方法要求。
  
  EJBObject
  EJBObject是網絡上可視的對象,包含stub和skeleton,作為bean的代理。Bean的remote interface繼續了EJBObject接口,而EJBObject類實現這個remote interface,使得bean類有自己的EJBObject類。對每個bean類有一個定制的EJBObject類。
  如下是EJBObject接口的定義,被bean的remote interface繼續:
  
  public interface javax.ejb.EJBObject extends java.rmi.Remote {
  public EJBHome getEJBHome() throws RemoteException;
  public Object getPrimaryKey() throws RemoteException;
  public Handle getHandle() throws RemoteException;
  public void remove() throws RemoteException,RemoveException;
  public boolean isIdentical(EJBObject other) throws RemoteException;
  }
  
  實現這個接口的EJBObject類是一個RMI服務器對象,因為它是他實現了一個RMI remote interface.注重bean本身不是一個remote object,在網絡上是不可視的。當容器實例化了這個EJBObject類時,容器會初始化bean實例的引用,使得它能正確地delegate商業方法調用。
  廠商的實現是維護EJBObject實例和bean實例的一對一關系。因為remote interface包含EJBObject接口的方法,所以bean不必顯式地實現這個接口,雖然它提供了列出的商業方法的實現。因為EJBObject必須正式地實現bean的remote interface,容器在bean安裝時產生EJBObject的源代碼,這些產生的源代碼實現了bean的remote interface.典型的EJBObject有一個獨特的類名,作為EJBObject類和bean的聯系。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泽普县| 双城市| 柯坪县| 北宁市| 黄石市| 德州市| 新津县| 栖霞市| 岳阳市| 申扎县| 庆阳市| 阿坝| 蛟河市| 武鸣县| 陕西省| 新蔡县| 泌阳县| 双辽市| 广宗县| 莆田市| 彭水| 常宁市| 阿拉善左旗| 绵阳市| 长汀县| 娄底市| 玉溪市| 肇庆市| 赤水市| 长泰县| 金湖县| 新竹市| 太原市| 庆城县| 岳池县| 普定县| 舟曲县| 锡林浩特市| 琼结县| 固原市| 河曲县|