Java Bean Wrapper (Access Bean)

Java™ Bean Wrapper Access Bean 可讓 Session Bean 或 Entity Bean 能夠當作標準 Java Bean 來使用。

Java Bean Wrapper 如同所有 Access Bean 一般, 繼承 Super 類別 com.ibm.ivj.ejb.runtime.AbstractAccessBean。

如果要瞭解 Java Bean Wrapper 的基礎組織架構, 您必須熟悉下列各節中說明的組織架構性質:

這幾節所說明的性質不僅構成了 Java Bean Wrapper 的基本組織架構, 同時也構成更複雜的 Copy Helper Access Bean 的基礎組織架構。附註:不支援只包含本端用戶端視圖的 EJB 2.x 模組中的 Bean 使用 Java Bean Wrapper。

Home 介面對映

傳回單一 EJBObject 實例的 Home 介面方法,會對映至 Java Bean 建構子。 傳回 Enterprise Bean 實例集合的 Home 介面方法會對映至傳回對應實例之 Access Bean 類型的方法。 所有方法都會呼叫適當的遠端介面方法。

Java Bean Wrapper 有一個無引數建構子,它只是一個沒有引數的建構子。 當使用無引數建構子時,Java Bean Wrapper 會執行智慧型起始設定。 當建立 Access Bean 的實例,它不會建立 Enterprise Bean 的實例。 當發出遠端方法呼叫時,如果還沒有建立遠端 Enterprise Bean 的實例,Access Bean 就會建立這個實例。

當「建立 Access Bean」精靈提示您將 Home 介面中所定義的某個 create 或 finder 方法對映至 Access Bean 的無引數建構子時, 後來,對映至無引數建構子的 create 或 finder 方法,其每個參數在 Access Bean 中都會有一個 init_xx 內容。 當在儲存器管理持續性 (CMP) Enterprise Bean 的 create 或 finder 方法中使用索引鍵類別時,都會以索引鍵欄位為 init_xx 內容來取代索引鍵類別。索引鍵欄位通常會宣告為簡式類型,使視覺化建構工具較容易使用 Access Bean。當使用無引數建構子時,必須在 Access Bean 的任何其他呼叫之前,先設定好 init_xx 內容。Access Bean 可含有若干多引數建構子,每個建構子都會對應到 Enterprise Bean Home 介面中所定義的其中一個 create 或 finder 方法。

每個傳回 Enterprise Bean 實例集合的起始介面 finder 方法都會對映於 Access Bean 中的 finder 方法。 您必須先建立 Access Bean 的實例,再呼叫適當的 finder 方法來傳回 Access Bean 實例集合。 為了建立 Enterprise Bean 的實例,Access Bean 會呼叫 Enterprise Bean Home 介面所定義的 create 或 finder 方法。 如果使用無引數建構子,當呼叫第一個商業方法時,Access Bean 只會建立實際 Enterprise Bean 的實例。

Access Bean 執行時期含有處理 EJBObject 之列舉的類別。對於會傳回 EJBObjects 之 java.util.Enumeration 的任何 Home finder 方法而言, 對應的 Access Bean 方法會傳回特殊的 Enumeration 類別,其 nextElement() 方法會在伺服器端建立 Enterprise Bean 的實例, 且會傳回利用對應的 EJBObject 參照來建立實例的 Access Bean。Enterprise Bean 只有在呼叫 nextElement() 時才會建立實例,而不是在呼叫 Access Bean 的 finder 方法時建立實例。 另外,您也不需要手動建立 Access Bean 的實例(根據 EJBObject 參照)。系統支援傳回集合的 finder,但會有持續性的問題,因為整個集合是利用已實例化的所有 Access Bean 來建立的。

遠端介面對映

遠端介面方法會對映至 Java Bean 方法。Enterprise Bean 遠端方法也可以傳回 EJBObject。當在 Access Bean 類別中產生這類方法時,傳回類型會改成對應的 Access Bean 類型。這可讓您的用戶端程式只處理 Access Bean 類型,並承襲 Access Bean 所提供的好處。

JNDI 對映

預設的 JNDI 名稱會產生在每個 Access Bean 類別中。程式碼產生器會使用延伸編輯器中所指定的 JNDI 名稱,依預設,它是 Home 介面名稱。如果是 Java Bean Wrapper(和 Copy Helper), 您可以利用 setInit_JNDIName() 來變更 JNDI 名稱。

通常,您不需要變更 JNDI 名稱。不過,如果 Enterprise Bean 部署到不同的 Home 中,管理者就可以新增字首到 JNDI 名稱中來表現其差異。如果要查閱 Home,Access Bean 會取得稱為 rootContext 的命名服務環境定義,如果您知道命名服務 URL 和命名服務類型,就可以對它進行若干限制。 Access Bean 提供兩個用來設定 rootContext 內容的 API。

setInit_NameServiceTypeName()  setInit_NameServiceURLName()

不過,如果用戶端程式正在 WebSphere® 執行時期環境中執行,就不需要這兩個 API,因為 rootContext 會自動設定。

有兩對 API 是專為了設定 Java Bean Wrapper(及 Copy Helper)的廣域 JNDI URL 名稱和類型而提供的。第一對 API 是:

public void setInit_NameServiceTypeName(string_name)  public void setInit_NameServiceURLName(string_name)

這些是實例方法,它們會修改呼叫時所在之 Access Bean 的命名服務內容。 只有在使用 Access Bean 的無引數建構子時,才會使用它們。

第二對 API 是:

public static final setGlobal_NameServiceTypeName(string_name)  public static final setGlobal_NameServiceURLName(string_name)

這些是用戶端程式中所用的 Java Bean Wrapper(和 Copy Helper)所適用的 Static 方法。 在建立新 Access Bean 實例之前,請先呼叫這些方法,使特定 Access Bean 在伺服器端建立 Enterprise Bean 的實例時,會使用新的命名服務類型或 URL。

當 Access Bean 的多個實例使用相同的 Home(相同的 JNDI 名稱和 rootContext)時,Access Bean 類別只會查閱對應的 Enterprise Bean Home 一次。 每個 Access Bean 類別都會保留類別層次的快取,以在建立 Enterprise Bean 實例時改進效能。 在用戶端 VM 的生命期限中,Access Bean 執行時期會依 JNDI 名稱、命名服務 URL 及命名服務類型來建立索引的所有 Home 參照之靜態快取。用戶端可以呼叫 resetHomeCache() 來重設快取記憶體,如果特定 Home 參照已不再有效,這就非常有用。

Access Bean 序列化

當 Access Bean 序列化時,有些 Access Bean 內容不會序列化,如遠端介面參照(EJBObject 參照)、Home 介面參照及廣域 JNDI 資訊(名稱、命名服務 URL 和命名服務類型)。不過,如果是 Copy Helper Access Bean,就會序列化屬性的快取記憶體。

範例

下列範例顯示建立員工的使用者程式:

   EmployeeAccessBean aEmployee = new EmployeeAccessBean ()
   aEmployee.setInit_employeeNo ("100");
   aEmployee.setName ("IBM");
      aEmployee.setAddress ("1150 Eglinton Ave, Toronto");
使用條款 | 讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.