2009-08-31 142 views
2

我們正在開發基於Java EE的應用程序。我們的應用程序與Java 1.5兼容,並將通過EBJ 3.0和Web Services功能包部署到WAS ND 6.1.0.21。該配置目前是一個包含兩個羣集的單元。每個羣集將有兩個節點。WebSphere Application Server EJB優化

我應該說,我們的應用程序或我們的系統有兩到三個部分。

第1部分:將耳朵部署到一個集羣,其中包含第三方供應商代碼以及自定義代碼。他們的代碼符合EJB 2.0,並且有很多遠程主頁接口。

第2部分:將耳朵部署到與第一隻耳朵相同的羣集。這個耳朵包含EBJ 3,可以調用供應商提供的EJB 2和自定義代碼。這些EJB 3被JSF UI使用,也與EAR一起打包,其中一些也作爲Web服務(符合SOAP 1.2的JAX-WS 2.0)公開給其他客戶端。

第3部分:可能有其他服務不依賴於我們的供應商/自定義代碼應用程序。這些服務將是部署到其他集羣的EJB 3.0和Web服務。

根據現場某些IBM員工的建議,集羣中節點之間的通信可以是EJB RMI。但是,如果我們正在穿越羣集和/或其他單元,那麼通信應該是Web服務。這就是說,我們中的一些人想知道性能和優化通信的速度,我們的應用程序將使用我們的Web服務和EJB。現在大多數EJB都是以遠程方式公開的。 (並且我們的供應商設置他們的方式,而不是也暴露本地家庭接口)。我們想知道WAS是否在同一節點/集羣節點空間中的應用程序之間進行任何優化。如果兩個應用安裝在同一個區域,並通過遠程家庭接口互相呼叫,是否足夠聰明,使其成爲本地家庭接口呼叫?

他們的其他優化技術?我們應該考慮他們嗎?我們不應該?什麼是成本/收益?以下是我們的團隊成員之一通過電子郵件發送的問題:

問題是:假設我們將EJB作爲遠程EJB開發,其中我們的UI控制器代碼正在通過EJB3與我們的EXT Java服務交談。當EJB服務器和客戶端在同一個容器中運行時,我們對性能優化有什麼選擇?

作爲一個參考點,谷歌給了我一些從2000年開始的websphere性能調優文檔,它解釋了一個調優配置,您可以設置這些調優配置,以在EJB通信處於同一個應用服務器JVM時啓用Call By Reference。它規定以下內容:

因爲EJB本身獨立於位置,所以它們使用遠程編程模型 。方法參數和返回值通過RMI-IIOP序列化並按值返回 。這是內在的RMI「Call By Value」模型。

WebSphere爲在同一應用程序服務器JVM中運行EJB 和客戶端(通常爲servlet)提供了「No Local Copies」性能優化。 「本地 副本」選項使用「呼叫參考」,並且當客戶端和遠程對象都處於同一進程中時,不會爲所調用的對象 創建本地代理。根據您的工作量,這取決於 ,這可以節省大量開支。

配置「無本地複製」通過將以下兩個命令行參數 應用服務器JVM:

* -Djavax.rmi.CORBA.UtilClass=com.ibm.CORBA.iiop.Util 
* -Dcom.ibm.CORBA.iiop.noLocalCopies=true 

注意:「無本地複製」配置選項通過 性能改變「調用由值「改爲」通過引用調用「來獲取同一JVM中的客戶端和EJB。 這樣做的一個副作用是Java對象派生(非原始)方法參數 實際上可以被調用的企業bean改變。考慮圖16a:

此外,我們還將在未來使用Process Server 6.2和WESB 6.2。有任何想法嗎?建議?

感謝

+0

我覺得這個設置(啓用呼叫通過引用)僅適用於不爲EJB本地接口EJB遠程接口。 – 2011-12-22 16:12:07

回答

2

唯一的自動優化,可以真正爲遠程EJB做的是,如果他們在同一位置(在同一個JVM中訪問)。在這種情況下,如果請求需要通過線路,ORB會將本來需要的一些工作短路。仍然會有一些必要的ORB開銷,包括對象序列化(除非你打開noLocalCopies,帶來所有注意事項)。另外,如果你知道UI控制器是共位的,你的方法調用不依賴於參數或返回值複製,並且你的接口不依賴於本地和遠程視圖之間的異常差異,那麼你可以創建並公開一個本地子接口,比通過ORB進行遠程訪問要快得多。

相關問題