Enterprise JavaBeans (EJB) 遠端介面不支援交易傳送

對於 EJB 遠端介面,Liberty 不支援出埠或入埠交易傳送。依預設,EJB Bean 是由儲存器管理,且會使用 Required 交易屬性。因此,未指定任何 container-transaction 內容的現有 EJB 定義將會依預設要使用這些交易,儘管它們不受支援。

此規則會標示參照下列 EJB 註釋(指出使用遠端商業還是 Home 介面)的 Java 程式碼:

此規則還會在 ejb-jar.xml 檔中標示下列參照:

EJB 規格要求支援出埠交易傳送的產品,仍然傳送空值交易環境定義。使用 Required(預設值)、MandatorySupports 交易屬性的 EJB 元件,必定會拒絕此環境定義。如果具有作用中廣域交易的用戶端或是伺服器位於 Liberty 中,此用戶端將無法啟動具有預設交易屬性的 EJB Bean。

若要允許用戶端啟動此 EJB Bean,請將此 EJB Bean 變更為使用 RequiresNewNotSupported 交易屬性。雖然這些屬性容許 EJB Bean 啟動,但不會將其完成的交易工作確定為用戶端交易的一部分。

請注意,在相同 JVM 中執行的 EJB 遠端介面支援交易傳送,但這只有透過進一步調查應用程式行為才能判定。

確定是否需要遠端 EJB 介面

EJB 2.x Bean 通常會在 ejb-jar.xml 中配置遠端介面,即使未使用它們亦如此。只有在跨越兩個不同的 JVM 執行程式碼時才需要遠端介面。從 WebSphere 角度而言,這是在兩部不同的應用程式伺服器之間,或是在用戶端應用程式與不同 JVM 中執行的應用程式伺服器之間。EJB 查閱中的 CORBA 資訊(如 iiop:// 提供者 URL)也是正在使用遠端 EJB Bean 的指示器。

如果您正在參照的 EJB Bean 使用在相同 JVM 中執行的遠端介面,則可使用本端介面,且效能會更佳。在可能的情況下,請將註釋從 @Remote 變更為 @Local,從 @RemoteHome 變更為 @LocalHome,並測試所有程式碼實務。同樣地,對於 ejb-jar.xml 配置,請移除 <remote/><business-remote/> 定義,並測試所有實務。雖然此實務支援交易傳送,但最佳作法是轉換為使用本端介面來改進效能,並消除可在相同 JVM 中從外部呼叫方法的觀念。

如果確實需要遠端介面

將 EJB Bean 包裝在 Web 服務 (JAX-WS) 中

對於需要遠端存取的 EJB Bean,最佳作法是將它們包裝在 Web 服務中。如需使用 WebSphere Application Server Developer Tools for Eclipse 進行這些程式碼變更的相關指示,請參閱標註 EJB Bean 以建立 Web 服務。將 EJB Bean 包裝在 Web 服務中之後,請使用 Web 服務用戶端來呼叫 EJB Web 服務。在測試之後,您可以移除 EJB 遠端註釋或配置。

處理交易傳送
Liberty 提供 Web Services Atomic Transaction (WS-AT) 支援,從而允許執行分散式廣域交易。將 EJB 部署為 Web 服務時,即可使用 WS-AT 來管理交易。如需相關資訊,請參閱 Web Services Atomic Transaction 概觀

如需相關主題的相關資訊,請參閱