程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 靈活使用EJB的本地和遠程接口(四)

靈活使用EJB的本地和遠程接口(四)

編輯:關於JAVA

部署不同的體系結構

服務器項目

創建一個名為“TestServerTomcat”的 Tomcat 服務器項目。在此項目內,選擇 New Server and Server Configuration,輸入“ServerTomcat”作為服務器名(Server name),並且在“Apache Tomcat version 4.1”下選擇 Test Environment 作為服務器類型(Server type)。在下一個面板中,指定 TOMCAT_HOME 作為安裝 Tomcat 的目錄,並且指定適當的 JDK 位置設置。請參見圖 7。

圖 7. 服務器 Tomcat 設置

創建服務器項目“TestServerWAS”。在此項目中,創建服務器“ServerWAS”並接受所有的缺省值。(詳細情況請參見 “Hello World”J2EE 應用程序文章)。

最後,您的工作台看起來應該是這樣的:

圖 8. 具有所有項目的工作台

現在,我們可以將項目添加到服務器並測試 J2EE 應用程序。

部署 All-in-One-All-Local 體系結構

要部署這種體系結構,您需要遵循下列步驟:

a.將 DualEARForAllInOne 添加到 WebSphere Application Server 配置。打開服務器配置編輯器,輸入必要的設置;例如,將類路徑設置為項目文件夾。由於我們稍後將進行性能測試,所以最好同時更改某些環境設置;例如,將 Java VM 參數設置為 -Xms512M -Xmx512M,禁用通用測試客戶端(universal test client)等等。

b.更改某些數據源設置也是有必要的。現在,從提供者列表中刪除“Cloudscape”,並且為“Default DB2”提供者添加版本 5.0 的數據源。接受所有的缺省值,並且指定 dualDB 作為“databaseName”資源特性值。在服務器配置編輯器的 EJB 選項卡上,將缺省數據源設置為 Data source 1。

c.返回到 DualEJBModule01 EJB 部署描述符編輯器。對於 DualEntity Bean,將“CMP Connection Factory JNDI name”的值設置為 jdbc/ds1,並且將“Container authorization type”設置為 Per_Connection_Factory。

d.對於初始測試,確保 DualEJBModule02 的 web.xml 和 ejb-jar.xml 中的“useLocal”設置為 true。

e.發布並啟動 ServerWAS。

f.通過 Web 浏覽器導航到 URL http://localhost:9080/DualWebModule03。您應該看到索引頁面,帶有顯示的表單。

圖 9. 索引和結果頁面

g.現在,您可以測試整個 J2EE 應用程序,並且在 Application Developer 中觀察控制台消息。

部署 All-in-One-All-Remote 體系結構

部署這種體系結構不需要更改項目設置。然而,要在相同的部署(實現 All-in-One-All-Remote)中轉換到遠程接口,您需要將 DualEJBModule02 的 web.xml 和 ejb-jar.xml 中的“useLocal”設置值更改為 false。

部署分離容器(Separate Containers)體系結構

要實現這種體系結構,您需要從“ServerWAS”配置中刪除 DualEARForAllInOne 項目,並且將 DualEARForEJBContainer 添加到它,然後,將 DualWebModule03 項目添加到“ServerTomcat”配置。指示 Servlet 使用特定的 URL 來定位 EJB(通過取消 web.xml 中相關參數設置的注釋)。在 ejb-jar.xml 中將“useLocal”設置為 true,以便實現 WebSphere Application Server 中的 EJB 容器內的最快通信。在啟動服務器之前,我們必須為 Tomcat 設置環境。打開 Tomcat 服務器編輯器,選擇 Environment 選項卡以設置“Class Path”:

添加變量:${WAS_50_PLUGINDIR}/properties。

添加文件夾:DualEJBModule02/ejbModule、DualJavaModule00。

對於 Tomcat 類加載器,我們需要 Enterprise JavaBeans 類和接口(通常包含在 javax.ejb 包內)。對於 Tomcat,將標准的 j2ee.jar 放入類路徑可能會引起已知的不兼容性問題,因為 javax.servlet 包出現在 j2ee.jar 和 servlet.jar 這兩個文件中。避免這個問題的惟一方法是創建一個新的 j2ee-modified.jar,只包含必要的與 EJB 有關的類(通過下載的文件提供)。將此文件添加到“External JAR”選項中。

將“Java VM Arguments”設置為 -Xms256M -Xmx256M。

要啟動該應用程序,您必須首先啟動 ServerWAS,然後啟動 ServerTomcat。將浏覽器指向 http://localhost:8080/DualWebModule03 來查看索引頁面,因為 Tomcat 使用端口 8080 作為 HTTP 的缺省端口。

使用簡單的 Java HTTP 測試客戶端進行測試

現在,我們將通過一個簡單的 Java HTTP 測試客戶端(通過下載的文件提供)來進行某些性能測試。測試客戶端測量測試的持續時間內平均的響應時間和成功的采樣數(即得到了響應的采樣數)。要啟動測試客戶端(一個帶有簡單的自解釋 GUI 的 Java 應用程序),可以運行 start.bat。該 URL 應該對將要測試的體系結構是有效地。選擇 Set,然後選擇 Start。當測試完成時,結果將顯示在帶顏色的文本區中。

圖 10. 簡單的 Java HTTP 測試客戶端

測試客戶端產生指定的線程數,每個線程都通過它自己的 URL 對象提供。該客戶端生成 HTTP GET 和 POST 請求,帶有在 init.properties 文件中定義的參數(在 client.jar 文件中提供)。id 請求參數值是由隨機數生成器計算出來的整數,而 firstName 和 lastName 請求參數是由從預定義的 String 數組挑選的元素創建的。該客戶端使用 GET 請求來在“Set”模式下測試 URL,然後它使用 POST 請求來進行實際的性能或負荷測試。每個請求都發送一個請求,再等待響應,然後發送另一個請求到服務器,如此等等。測試結果將在下一部分進行討論。別忘了在啟動測試之前禁用 web.xml 和 ejb-jar.xml 中的跟蹤!

性能測試結果及分析

測試設置

與開發人員的機器中的典型環境相比,測試設置中並沒有什麼特殊之處。我們用於測試的計算機的配置為 Intel Pentium III 處理器、1 GHz 和 1.5GB 的 RAM、Windows 2000、DB2 V8.1、WebSphere Studio Application Developer Version 5.1、Tomcat 4.1.29 和 IBM JDK 1.3.1(帶有已啟用的 JIT)。因此,為了進行測試設置,所有的服務和應用程序都應該已運行在相同的單處理器計算機中。

我們所進行的測試有兩種類型:單線程和多線程(上述體系結構中的每一個都有 100 個線程)。為了獲取可復驗的結果,每種測試設置在客戶端上都有一系列運行。在這些系列中第一次運行的結果被認為沒有代表性,運行測試以使 JVM 和服務器“預熱”。在每次測試運行之後便刪除數據庫 PERSON 表中的所有記錄。單次測試運行一般持續的時間通常為 10 分鐘。對於分離容器(Separate Containers)體系結構,為了進行多線程測試,Tomcat 的 server.xml 中的設置需要作如下調整:

...
<Connector acceptCount="10"
className="org.apache.coyote.tomcat4.CoyoteConnector"
connectionTimeout="20000"
debug="0" enableLookups="false"
maxProcessors="200" minProcessors="200"
port="8080" redirectPort="8443"
useURIValidationHack="false"/>...

不需要進行重要的數據庫或服務器調整。

結果

實際的測試結果顯示在下表中。重要的是相對數而不是絕對數本身。一般來說,本地和遠程接口的性能結果與預覽有很好的一致性。(同時參見參考資料。)在我們的測試中,多線程吞吐量一般要低一些,因為每個 JVM 都必須在相同的單處理器計算機中分派多線程。對於這個樣本應用程序,請求處理時間比較少,所以線程分派和時間安排相當大程度上是在整個處理時間中共享的,因而增加了響應時間。

圖 11. 單線程客戶端的平均響應時間

圖 12. 多線程客戶端的平均響應時間

圖 13. 單線程客戶端的吞吐量

圖 14. 多線程客戶端的吞吐量

結束語

本文展示了樣本 J2EE 應用程序的設計方法、實現和測試結果,提供了 Enterprise Java Bean 的本地和遠程接口使用的基本比較。公開 EJB 的本地和遠程接口並不會限制 J2EE 應用程序部署中的靈活性。這兩種接口使您可以改變部署場景而不用更改應用程序的源代碼,並且還使您可以利用所選的任何部署體系結構。當本地接口用在相同的 JVM 中時,性能是最優的。使用分離容器(Separate Containers)體系結構性能可能會降低。對於確定的 J2EE 設計模式,我們推薦通過創建處理本地和遠程接口的代碼來將兩種接口同時用於會話 Bean(有時用於實體 Bean),以達到最大的效率,而進行很少的額外工作。

關於作者 Sheldon Wosnick 是 IBM 多倫多實驗室的 WebSphere Studio Application Developer Server Tools 小組中的一名顧問軟件開發人員。他和他的隊員們負責 WebSphere Studio 產品家族的整個服

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved