WEBLOGIC的安裝、配置和啓動

WEBLOGIC的安裝、配置和啓動html

1、軟件安裝
1. 安裝前的準備工做java

1.1 首先請確認您要安裝的WebLogic版本所在的平臺已經過了BEA的認證,
完整的認證平臺列表請參考 http://e-docs.bea.com/platform/suppconfigs/index.htmlweb

1.2 肯定一個安裝目錄,建議該目錄下至少有1個G的空間,可單首創建個邏輯卷和文件系統數據庫

1.3 建立一個BEA用戶組賬號apache

1.4 建立一個weblogic用戶賬號瀏覽器

2. 安裝步驟服務器

WebLogic在AIX平臺下的安裝方法通常有三種:圖形窗口模式,控制檯模式,無人守護安裝模式。cookie

因爲控制檯模式的使用最爲普遍且不受任何其它硬件條件的限制(因此咱們這裏只介紹控制檯安裝模式。網絡


2.1 安裝JRE環境
WebLogic安裝程序須要JRE的支持,根據安裝平臺的不一樣,
WebLogic的安裝介質也分爲兩類,
一種自帶了JRE(後綴名爲.bin),
一種須要下載平臺廠商所提供的JRE環境(後綴名爲.jar),
以WebLogic Server 8.1 with SP2爲例,目前所支持的UNIX/LINUX平臺以下所示(截止2004.2.23)
WebLogic Server 8.1 with SP2session

支持平臺 是否自帶JDK

HP-UX (11.0,11.i, PA-RISC) YES
Sun Solaris (8, 9, SPARC) YES
Red Hat Enterprise Linux (2.1, Pentium) YES
Red Hat Enterprise Linux (2.1, Itanium) YES
SuSE SLES (8, Pentium) YES
United Linux (1.0, Pentium) YES
IBM AIX (5.1, 5.2) NO

首先要下載和操做系統以及WEBLOGIC相匹配JDK版本,
最好是通過BEA認證的版本。
可查詢如下連接http://e-docs.bea.com/platform/suppconfigs/index.html

在AIX上安裝JDK要注意如下步驟:

安裝後要修改環境變量/etc/environment文件,

將PATH中Java部分更改成新安裝的Java版本(Java131或Java14),

並從新Login後生效!
不然系統會使用原有的Java130環境,在安裝weblogic7.0以上版本時會自動退回到提示符下。

2.2 獲取並上傳weblogic安裝介質到一個臨時目錄
若是手頭沒有安裝介質,咱們能夠到http://commerce.bea.com上下載一個WebLogic試用版,
而後經過FTP上傳到主機上的一個臨時目錄,該臨時目錄建議至少有1個G的剩餘空間

2.3 開始安裝

2.3.1 .bin的安裝方法

首先賦予.bin可執行權限
chmod a+x filename.bin

而後執行

./filename.bin -mode=console

2.3.2 .jar的安裝方法

而後執行
java -jar filename.jar -mode=console(字符)
java -jar filename.jar -mode=graphics(圖形)

2.4 控制檯安裝

2.4.1 完成2.3的步驟後,進入控制檯安裝的歡迎界面,鍵入[Next]繼續

2.4.2 此時出現受權許可協議,讀完後鍵入[Yes]繼續

2.4.3 提示選擇一個BEA主目錄,以下所示

Choose BEA Home Directory:"BEA Home" = [/home/weblogic/bea]

Input new BEA Home OR [Exit][Previous][Next]>

若是想更改默認的BEA主目錄,從新輸入完整的目錄路徑便可,不然鍵入[Next]繼續

2.4.4 確認BEA主目錄

Choose BEA Home Directory:  
->1| Yes, Use this BEA home directory [/home/bea]  

2| No, return to BEA home directory selectionEnter index number to select OR [Exit][Previous][Next]>
鍵入[1]繼續

2.4.5 選擇安裝類型

Choose Install Type: 

->1|Complete Installation   |Install the complete BEA WebLogic Platform. 
2|Custom Installation  |Choose software components to install and optionally create custom 
 |application domains. Recommended for advanced users.
鍵入[1]繼續

2.4.6 選擇安裝路徑

Choose Product Directory:Product Installation Directory = [/home/bea/weblogicXX]

Input new Product Installation Directory OR [Exit][Previous][Next]>

若是想更改默認的安裝目錄,從新輸入完整的目錄路徑便可,不然鍵入[Next]繼續

2.4.7 確認安裝路徑
Choose Product Directory:  
->1| Yes, use this product directory [/home3/weblogicXX]  
2| No, select another product directoryEnter index numbers to select OR [Exit][Previous][Next]>
鍵入[1]繼續

2.4.8 如今開始安裝,此時會出現一個模擬的進度條,耐心等待,直到100%安裝順利結束。

2、配置Configuration Wizard
軟件安裝完畢後,下一步配置Domain域,進入weblogic安裝目錄

(例如:/wls/weblogic700/common/bin),找到文件dmwiz.sh,執行它

#./dmwiz.sh;選擇WLS Domain,NEXT下一步;

此界面有四個選項,
單一服務選擇第一項Single server;

第二項管理服務,

第三項集羣管理服務;

第四項管理服務設置;

咱們選擇第一項,NEXT下一步;

確認Domain域路徑,咱們選擇默認路徑;NEXT下一步;
該界面要輸入

Server Name(服務名稱)-------myserver
Server Listen Adress一欄爲服務器地址,此項爲默認,可不填!
Server Listen Por交互端口---7001
Server Listen SSL Por監聽端口------7002

NEXT下一步

建立Administrative User用戶名和密碼(密碼很多於8位),NEXT下一步;

該界面是全部配置信息的彙總確認,若是沒問題,點擊Create,開始建立DOMAIN域.

3、啓動Weblogic
在啓動Weblogic以前,可將服務用戶名和密碼寫入啓動腳本。
進入剛剛配置完成的域目錄
(例如:/wls/user_projects/mydomain),
編輯startWebLogic.sh啓動腳本,

執行$ vi startWebLogic.sh

在「WLS_USER= WLS_PW=」輸入用戶名和密碼,保存退出;

最後執行$ ./startWebLogic.sh,啓動Weblogic..

4、中止Weblogic服務
中止Weblogic服務有多種:
一、 KILL掉進程
二、 經過」http://服務地址:7001/console」,shutdownserver

三、 利用腳本中止服務:
在#/wls/weblogic700/samples/workshop路徑下,
有一個stopWebLogic.sh文件,對他進行稍微編輯,
COPY到/wls/user_projects/mydomain目錄下,執行便可。


來自http://blog.163.com/sun-_-rain/blog/static/55604374200710304131823/
......(準備工做略)
一.具體安裝過程
啓動控制檯安裝嚮導:
(1)進入Welcome界面,鍵入[Next]繼續
(2)在BEA Systems License Agreement界面,鍵入[1]繼續
(3)在Choose BEA Home Directory界面,鍵入[1]選擇建立新的BEA Home目錄,輸入新的BEA Home Directory:/opt/weblogic,繼續
(4)在BEA Home Directory設置的確認界面,鍵入[1],肯定(3)中輸入的目錄
(5)在Choose Install Type界面,鍵入[1],採用Complete安裝模式
(6)在Choose Product Directory界面,鍵入[Next],用默認的目錄便可
(7)在Choose Product Directory的確認界面,鍵入[1],肯定(6)中的選擇
(8)如今開始安裝,此處出現一個模擬的進度條,當到達100%安裝就結束了。

2、配置
一、新建一個weblogic用戶,用來管理weblogic服務器。
二、把/opt/weblogic的全部權賦給weblogic用戶
#chown -R weblogic:weblogic /opt/weblogic

三、轉到weblogic用戶
# su - weblogic

四、設置與java相關的內容
$ cd /opt/weblogic
$ rm -r jdk142_05 # 刪除這個目錄,由於安裝時未帶jdk,因此這個目錄空的
$ ln -s /opt/java1.4 jdk142_05

五、執行Domain的配置
$ cd /opt/weblogic/weblogic81/common/bin
$ ./config.sh -mode=console
啓動BEA Weblogic Configuration Wizard
(1)在Create or Extend a Configuration界面,鍵入[1],繼續
(2)在Select a Domain Template界面,鍵入[1],繼續
(3)在Choose Configuration Option界面,鍵入[1],繼續
(4)在Configure Administrative Username and Password界面,鍵入[2],進入密碼修改界面,輸入新密碼爲weblogic後,返回前一個界面,鍵入[3],進入確認密碼修改界面,輸入新的確認密碼爲weblogic後,返回前一個界面,鍵入[Next],繼續
(5)在Domain Mode Configuration界面,鍵入[1],繼續
(6)在Java SDK Selection界面,鍵入[1],繼續
(7)在Select the target domain directory for this configuration界面 ,鍵入[Next],繼續
(8)在Select the applications directory for this configuration界面,鍵入[/opt/weblogic/user_projects/domains/applications],繼續
(9)在Edit Domain Information界面,鍵入[flashdragon]以後,在後續界面中,鍵入[Next],繼續
(10)進入配置執行界面,當提示Domain Create Successfully時,配置成功完成。

3、啓動
$ cd /opt/weblogic/user_projects/domains/flashdragon
$ ./startWebLogic.sh


來自:
http://blog.csdn.net/nilxin/archive/2006/05/09/713961.aspx
12、配置WebLogic數據源
(1)、建立部署連接池
一、 在控制檯左邊的樹形目錄中打開Services->JDBC->Connection Pools節點.
二、 在右邊的主界面中點擊"Configure a new JDBC Connection Pool... "鏈接,
在打開的頁面中選擇數據庫的類型和數據庫驅動的類型(數據庫JDBC驅動要在classpath指定的路徑中),點擊"continue"按鈕.

三、根據提示輸入所需的信息,最後建立和部署數據鏈接池.

(2)、建立部署數據源
一、在控制檯左邊的樹形目錄中打開Services->JDBC->Data Sources節點.
二、 在右邊的主界面中輸入數據源名稱和jndi名,而後點擊"continue"按鈕
三、 選擇數據源所使用的數據鏈接池.
四、勾選數據源要部署到的服務器,而後點擊"create"按鈕建立數據源.

可能存在的問題:更改連接池的大小,緩衝內存佔用的大小。

來自;
http://blog.163.com/ceip2183/blog/static/293636120069172731689/

對WebLogic Workshop 8.1應用程序進行單元測試--BEA WebLogic Workshop的示例擴展
對WebLogic Workshop 8.1應用程序進行單元測試--BEA WebLogic Workshop的示例擴展
做者: Joshua Eckels,BEA軟件工程師∣來源:BEA dev2dev∣原文地址∣2005-1-7
在本文中,我將描述如何使用JUnit對在WebLogic Platform 8.1上開發的應用程序進行單元測試。
我將說明如何在應用程序開發期間爲通常WebLogic Platform應用程序的全部組件編寫和運行單元測試。
本文面向那些計劃把JUnit集成到WebLogic Platform中去的開發人員和架構師精英。

簡介
  單元測試是迭代開發過程當中的關鍵實踐。
.軟件工程師經過單元測試在代碼級別上測試代碼。
單元測試的運行頻率一般很高,所以特別適合於自動化運行。

在本文中,我將討論如何使用WebLogic Platform 8.1編寫和運行單元測試。

我將說明如何使用JUnit測試全部的WebLogic Platform組件,

不論這些組件是位於服務器容器內部仍是外部。

  我將假定您對單元測試的原理有一些基本的瞭解,並熟悉JUnit框架。

您能夠在JUnit的Web站點 http://www.JUnit.org/上找到關於這兩個主題的更多信息。


  在本文中,我將首先討論關於如何集成JUnit和WebLogic Workshop的一些基本集成問題。

特別地,我將指出JUnit測試用例在WebLogic Platform應用程序中的位置,並

討論在WebLogic Workshop中運行這些JUnit測試的各類方式。

接下來,我將討論如何測試特殊類型的組件。

文件佈局
  由於JUnit測試用例只是標準的Java類,您能夠把它們放在您應用程序中幾乎全部類型的項目中。

當對沒有直接從服務器的虛擬機中公開給外部的組件進行測試時,您的測試類須要在服務器中是可訪問的,

這意味着它們應該是構建在您的APP-INF/lib目錄中的web項目或Java項目的一部分。

  注意,有一點很重要,即將您的應用程序部署用於生產時,您極可能不想把您的測試類包括在內。

若是您在單獨的測試項目中保留您全部的測試,您能夠在編譯時把這些項目排除在外。


在WebLogic Workshop中運行JUnit
  在Workshop中啓動JUnit進程有多種不一樣的方法。

儘管根據您應用程序的設置和使用狀況,有一些方法可能多少有些不方便,

可是這與您使用的實際方法沒有特別的關係。固然,若是您願意,您還能夠從命令行單獨啓動JUnit。

  不論用於啓動JUnit的方法如何,它都將在您的主目錄中建立一個.Junitsession文件,

以記住您先前已經運行過的測試。

儘管直接運行測試要比首先啓動JUnit

而後從組合框選擇測試仍然要更加方便一些,

可是由於您沒必要在首次運行測試類以後從新輸入它的名稱,

在啓動時將測試類名稱傳遞給JUnit就顯得沒那麼重要了。

使用main() 方法和Start 按鈕
  若是在Java項目中保存JUnit測試,

您能夠配置WebLogic Workshop以使用Start按鈕來運行您的測試。

您必須給測試類一個main()方法,

它負責啓動您選擇的JUnit運行器。

若是您還沒有爲項目配置調試器設置,點擊Start按鈕,

而後Workshop將詢問您是否想要把當前類設置爲主類。

您也能夠轉到Tool-->roject Properties…-->[Test project],

而後從列表中選擇Debugger。確保Create new process單選按鈕被選中,而後填入您的測試類名稱。

  
假定您想要關閉JUnit的重載類裝載器,您的main()方法多是這個樣子:

String[] JUnitArgs = new String[] { "-noloading", TestCase.class.getName() };JUnit.swingui.TestRunner.main( JUnitArgs );

  假定您讓您的類路徑設置包括全部的運行時依賴,就能夠運行了。這還容許您調試運行在JUnit進程中的代碼,因此當測試失敗時,進行跟蹤是很方便的。

使用外部工具
  Workshop爲經過IDE運行第三方程序提供了一種方法。轉到Tools-->IDE Preferences… ,

並在列表中選擇Tools 節點。您能夠建立一種新的工具配置來運行JUnit。

只要設置用於啓動JUnit的完整命令行便可,其中包括一個-classpath參數,

並給它一個可在其中啓動進程的可用目錄。例如,若是您的應用程序位於c:\wlw_app中,

並且您已經在c:\bea 目錄中安裝了WebLogic Workshop,您可使用c:\wlw_app 做爲該目錄。

假定您要測試的代碼位於一個名叫JavaProject的Java項目中,

而您的測試代碼位於一個叫作UnitTestProject的單獨Java項目中,

並且您已經在叫作somePackage.MainTestSuite的類中定義了一個TestSuite,那麼命令格式應該像下面這樣:


c:\bea\jdk141_05\java.exe -classpath c:\wlw_app\APP-INF\lib\JUnit-3.8.1.jar; c:\wlw_app\APP-INF\lib\UnitTestProject.jar; c:\wlw_app\APP-INF\lib\UnitTestProject.jar; JUnit.swingui.TestRunner -noloading somePackage.MainTestSuite

  經過在IDE中選擇菜單Tools-->External Tools-->[JUnit Tool Name],您能夠很容易地運行JUnit。

使用Ant
  Ant 爲運行JUnit測試提供了另外一個可選任務。對Ant的調用可能像下面這樣:

<target >
<JUnit haltonerror="yes" fork="true">
 <test />
 <classpath>
  <pathelement location="${app.local.directory}/APP-INF/lib/JUnit-3.8.1.jar"/>
  <pathelement location="${app.local.directory}/APP-INF/lib/JPFTestProject.jar"/>
  <pathelement location="${app.local.directory}/APP-INF/lib/htmlunit-1.2.3.jar"/>
  <pathelement location="${app.local.directory}/APP-INF/lib/nekohtml-0.7.7.jar"/>
  <pathelement location="${app.local.directory}/APP-INF/lib/commons-logging-1.0.3.jar"/>
  <pathelement location="${app.local.directory}/APP-INF/lib/commons-httpclient-2.0.jar"/>   </classpath>
</JUnit>
</target>

  若是您經過External Tools或者Ant方法來運行JUnit,您仍然能夠從 IDE 鏈接到 JUnit 進程以便調試它。首先,在您的Workshop應用程序中建立或選擇一個Java項目。它並不必定須要包含用於您的測試的代碼。來到它的Project Properties,並配置調試器設置爲鏈接到一個您選擇用於運行JUnit測試的機器端口。而後,啓動JUnit進程,將正確的參數傳遞給它的Java Virtual Machine,以開始監聽調試器的鏈接進程,通常的格式以下(這裏的SELECTED_PORT應該用在其上監聽調試器的端口來替代):

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=SELECTED_PORT,suspend=y,server=y

  儘管虛擬機將會啓動,它不會開始運行測試,直到調試器鏈接上爲止。在IDE中,打開您已經爲其配置調試器設置的Java項目中的一份文檔,而後點擊Start按鈕。調試器應該快速鏈接到該進程,而JUnit應該開始執行測試。

  您還可使用Ant生成基於您的測試結果的報告。要想了解關於如何集成Ant和JUnit的更多信息,請查看Ant手冊(http://ant.apache.org/manual/index.html)中Ant Tasks主題的Optional Tasks 部分。

禁用 JUnit 重載
  默認狀況下,JUnit的Swing接口使用類裝載器在運行測試以前自動從新裝載類。這很方便,由於您不須要在從新編譯您的類以後從新啓動JUnit。然而,我過去曾在某些狀況下遇到過有關類裝載器的工做方式的問題,它們引發了假的ClassCastExceptions異常和其餘我不肯意看到的問題。從腳本、經過Ant或從External Tools運行JUnit時,您能夠禁用特殊的類裝載器,具體方法是傳入-noloading參數。若是您在測試類中使用了main()方法,您可使用下面的代碼達到一樣的目的(這裏的YourTestClass應該用測試類的名稱來替代):


public static void main( String[] args ) { String[] JUnitArgs = new String[] { "-noloading", YourTestClass.class.getName() }; JUnit.swingui.TestRunner.main( JUnitArgs );}

對外部可測試組件進行單元測試
  如今,讓咱們轉而討論如何對WebLogic Platform組件進行單元測試。在討論中,我將指出內部可測試組件和外部可測試組件的差異,這是我要討論的第一個話題。對於此處的討論來講,外部可測試組件是指那些能夠從J2EE容器外部(一般是經過HTTP)調用的組件。編寫測試時,您的測試用例能夠初始化一個到服務器的網絡鏈接,把相應的請求發送給它,而後驗證服務器的響應是否正確。

  Java Page Flows(JPF)、Java Server Pages(JSP)和Servlet
測試Web站點時,您的測試本質上是模擬瀏覽器從服務器請求一個或一系列頁面。根據所涉及的站點,您須要建立正確的HTTP請求,包括相關的URL、頭、參數、cookie,等等。一旦服務器作出響應,您將須要檢查響應的內容,包括頭、HTML自己、客戶端的JavaScript和cookie。有兩種通常的方法能夠完成這項工做。

使用代理
  首先,您可使用代理來記錄普通web瀏覽器和服務器之間的交互。在仔細檢查頁面的正確順序和手動驗證結果的正確性以後,您可使用上述記錄自動回放一樣的請求序列,並驗證結果是否相同。有許多使用這種方法的包,包括MaxQ (http://maxq.tigris.org/) 和QuickTest (http://www.mercury.com/us/produc ... test-professional/)。

  這種方法能夠很是快速地生成一組測試,可是很不幸它很是脆弱。一旦您修改頁面的佈局方式,那麼測試中斷的風險就很高。對於佈局不斷變化的站點來講,這意味着您極可能不得不按期從新記錄您的測試。

對象模型
  第二種方法是使用一種更加有計劃性的技術,即編寫測試來構建對象,該對象用於請求HTTP請求、到達服務器並取回表明HTTP響應的對象。儘管這種方法的工做量比使用代理記錄會話要大,可是受到HTML佈局影響而中斷的可能性更小。包括HTTPUnit (http://httpunit.sourceforge.net/)、HTMLUnit (http://htmlunit.sourceforge.net/)和jWebUnit (http://jwebunit.sourceforge.net/A 在內的幾個庫都提供用於模擬瀏覽器交互的API。

頁面流示例
  爲了舉例說明對象模型方法,讓咱們看一看HTMLUnit。它的API爲服務器返回的HTML頁面提供一個對象模型。每一個請求返回一個HtmlPage,而後您能夠查詢它的內容。找出頁面中的連接以後,您能夠模擬一個用戶在瀏覽器中點擊它,而後它會返回另外一個HtmlPage。相似地,您能夠定位頁面中的表單、找出特定的字段、設置值,而後提交給服務器。

  HTMLUnit 使用Rhino JavaScript引擎,讓您能夠測試頁面中的腳本。然而,要注意有一點很重要,即它只支持大多數瀏覽器支持的JavaScript的一個子集,並且JavaScript的行爲老是至少有些依賴於瀏覽器。

  爲了演示如何測試一個web站點,我使用了WebLogic Workshop 8.1 SP2 SamplesApp中的multipleForms頁面流。在下載的代碼中,您能夠在JPFWebProject項目中找到它。測試包括的流部分有兩個文本字段。在其中輸入值並點擊提交按鈕以後,這些值就會顯示在後續的頁面中。

  用於這個例子的JUnit 測試用例是{JPFTestProject}/JPFTest.java。如上所述,它有一個main()方法,這樣您就能夠經過點擊IDE中的Start按鈕來運行它。測試方法的相關代碼以下:

public void testPageFlow() throws Exception {
   WebClient webClient = new WebClient();
   HtmlPage page = (HtmlPage)webClient.getPage(
       new URL( "http://localhost:7001/JPFWebProject/multipleForms/multipleFormsController.jpf" ) );
   HtmlAnchor anchor = page.getFirstAnchorByText( "Show the JSP with blank form fields." );
   HtmlPage page2 = (HtmlPage)anchor.click();
   HtmlForm form = (HtmlForm)page2.getFormByName( "form1" );
   Iterator elements = form.getAllSubmittableElements().iterator();
   int count = 1;
   while( elements.hasNext() ) {
       HtmlElement element = (HtmlElement)elements.next();
       assertTrue( element instanceof HtmlTextInput );
       HtmlTextInput textInput = (HtmlTextInput)element;
       textInput.setValueAttribute( "Value" + count++ );
   }
   HtmlPage page3 = (HtmlPage)form.submit();
   String pageText = page3.asText();
   assertTrue( pageText.indexOf( "Field A = \"Value1\"" ) != -1 );
   assertTrue( pageText.indexOf( "Field B = \"Value2\"" ) != -1 );
}


  測試自己是至關直觀的。它首先建立了一個WebClient對象,該對象負責響應Web瀏覽器。而後,它發出一個請求給頁面流的URL所表明的服務器。測試查找帶有文本「Show the JSP with blank form fields」的連接。它點擊連接,而後在結果頁面中定位表單。在經過表單元素進行迭代和給它們賦值以後,測試提交了表單,並在結果頁面中查找這些值。

  若是您要在您的站點上使用NetUI,要當心標籤庫一般不會爲表單元素生成很是簡單的名稱。一般這沒有關係,由於不管是做爲開發人員的你,仍是最終用戶都不須要關心名稱,可是當編寫測試時,您一般須要給特定元素設置特殊值。經過在瀏覽器中查看頁面的HTML源代碼,您老是可以找出一個元素的名稱。

Java Web Services(JWS)
  像基於HTML的組件那樣,能夠經過HTTP從服務器外部訪問Java Web Services。儘管JWS經過其WSDL提供一個更加穩定的API,但它可使測試變得更加容易,由於輸入和輸出XML的形狀變化的可能性比表明JSP輸出的實際HTML要小。從web服務返回的XML沒有包含格式信息,而格式信息可使HTML因爲佈局影響而發生變化的可能性更大。

  您可能想考慮從同一個客戶端生產平臺測試您的web服務。例如,若是您使用WebLogic Workshop在服務器上實現您的web服務,並且始終從在Microsoft .NET中編寫的客戶端調用它們,您可能會想在.NET中至少編寫一些測試,以測試跨平臺的交互。

  假定您想要使用Java編寫和運行您的測試,您願意使用強類型Java對象編寫測試,而不是構造一個HTTP請求,而後解析做爲結果生成的XML。在8.1中,有兩種方法能夠建立這類符合JAX-RPC規範的接口。

使用<clientgen>
  WebLogic Server提供一個<clientgen> Ant 任務。您在描述Web服務的WSDL上指向這個任務,而後告訴它在哪裏放置做爲結果的Java類。在http://e-docs.bea.com/wls/docs81/webserv/anttasks.html#1080160上能夠找到關於如何使用該任務的文檔。

使用Test Client
  您還可使用WebLogic Workshop Test Client來生成代理JAR。只要點擊您的JWS文件上的Start按鈕,轉到Test Client中的Overview選項卡,而後點擊Java Proxy按鈕便可。若是您願意,您能夠指定用於在其中放入代理類的包,不然使用默認的weblogic.jws.proxies。

Web服務示例
  下面給出一個JWS的例子,您能夠在{UnitTestingWeb}/jws/JWSToTest.jws中找到它。它定義了兩個很是簡單的操做。雖然不是頗有意思,可是它們對咱們要達到的目的來講已然足夠。您還能夠看到,咱們已經從JWS生成了一個WSDL,Workshop將自動使其在接口變化時與JWS保持同步。

public class JWSToTest implements com.bea.jws.WebService {
   static final long serialVersionUID = 1L;
   /** @commonperation */
   public int square( int i ) {
       return i * i;
   }
   /** @commonperation */
   public String hello() {
       return "Hello";
   }
}


  用於咱們的JWS的測試是{JWSTestProject}/JWSTest.java,下面給出它的一部分:

private JWSToTest _proxy;
public void setUp() throws IOException {
_proxy = new JWSToTest_Impl();
}
public void testJWS() throws Exception {
assertEquals( 25, _proxy.getJWSToTestSoap().square( 5 ) );
}


  就像頁面流測試同樣,它有一個main()方法,使您能夠經過點擊Start按鈕來運行它。在setUp() 方法(在運行每一個單獨的測試以前已經調用)中,咱們建立了JAX-RPC代理的一個實例。而後,在咱們的測試中,咱們能夠簡單地把相關參數傳遞給方法,而後驗證結果是否正確。

  由於代理是從WSDL生成的,它已經知道用於訪問web服務的URL。您能夠測試一臺運行相同web服務的不一樣服務器,像階段測試服務器,具體作法是傳遞一個不一樣的URL給代理。在http://java.sun.com/xml/jaxrpc/index.jsp上能夠找到關於JAX-RPC代理的更多信息。

Enterprise Java Beans(EJB)
  把EJB看成外部組件進行測試很是相似於從任何其餘客戶端調用它。(您還能夠把EJB看成內部組件進行測試。更多信息請參見下面的內容。)您須要使用過去習慣用於EJB的基本步驟: (1) 在JNDI中查找home接口, (2)建立一個bean實例,而後 (3) 調用它的方法。

EJB示例
  咱們將測試在{EJBProject}/ejbpackage/SampleSessionBean.ejb找到的無狀態會話bean。它定義了一個bean方法doSomethingBoring(), 該方法名副其實,功能是簡單地返回一個5:

public class SampleSessionBean extends GenericSessionBean implements SessionBean
{
public void ejbCreate()
  {
  }
/** @ejbgen:remote-method */ public int doSomethingBoring()
  {
   return 5;
  }
}

  對於這個例子來講,測試用例是{UnitTestProject}/EJBTest.java,下面是它的一小段代碼:

private SampleSessionHome lookupHome() throws NamingException {
   Context ctx = getInitialContext();
   // Lookup the bean's home using JNDI
   Object home = ctx.lookup("ejb.SampleSessionRemoteHome");
   return (SampleSessionHome) narrow(home, SampleSessionHome.class);
}
private Object narrow(Object ref, Class c) {
   return PortableRemoteObject.narrow(ref, c);
}
private Context getInitialContext() throws NamingException {
   // Set up the environment properties
   Hashtable h = new Hashtable();
   h.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
   h.put(Context.PROVIDER_URL, "t3://localhost:7001");
   return new InitialContext(h);
}
public void testEJB() throws Exception {
   assertEquals( 5, lookupHome().create().doSomethingBoring() );
}


  在咱們的測試方法中,咱們得到了服務器的初始環境,在JNDI中查找home接口,縮小它,調用建立方法,而後調用bean方法。也可使用Start按鈕來運行該測試。

對內部可測試組件進行單元測試
  一些WebLogic Workshop組件只能從服務器容器內部訪問。最明顯的例子是控件,只能由框架初始化它,並且只能被包含其餘控件、JWS、JPF和JPD類在內的組件使用。所以,爲了高效地對這些種類的組件進行單元測試,您的測試須要運行在服務器進程內部。

Cactus
  針對外部可測試組件運行時,須要把JUnit測試運行爲發送HTTP請求給組件的客戶端進程。爲了在服務器容器內部運行JUnit測試,您須要使用Cactus框架,它是一個免費的開源框架,是Apache Jakarta項目的一部分。Cactus Web站點http://jakarta.apache.org/cactus/index.html 包含了關於JUnit客戶端如何鏈接到服務器,而後使測試運行的詳細信息。下面,我將對該機制作一些總結。

  當編寫您想要使用Cactus運行在服務器內部的JUnit測試時,您一般想要擴展ServletTestCase,而非擴展TestCase。另外,您可讓您的suite()方法返回一個ServletTestSuite的實例。當您在您的測試上運行客戶端JUnit進程時,它將檢測到這是一個服務器端的測試,併發送HTTP請求給您指定的URL。在服務器上,Cactus接收到請求,建立您的測試類的一個實例,而後運行測試。接着,它把結果返回給JUnit客戶端進程,該進程顯示它們的時候就好像是運行標準的JUnit測試同樣。

  爲了使用Cactus,您須要配置您的web應用程序,使其把進入的請求正確地路由給Cactus,編輯web.xml部署描述符能夠作到這一點,以下面的代碼片段所示:

<servlet>
  <servlet-name>ServletRedirector</servlet-name>
<servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class></servlet>
<servlet-mapping>
  <servlet-name>ServletRedirector</servlet-name>
  <url-pattern>/ServletRedirector</url-pattern>
</servlet-mapping>

  此外,服務器和客戶端都須要在它們的運行時類路徑中包含JUnit、Cactus和測試類。通常說來,您要把Cactus和JUnit JAR添加到您的應用程序的APP-INF/lib目錄。您還可使用Ant任務把運行您的測試所需的全部類都打包成一個EAR文件。啓動JUnit客戶端進程時,您須要使用-Dcactus.contextURL=SomeURL來指定Cactus在鏈接到服務器時應該使用的URL。想要了解更多信息,請參見http://jakarta.apache.org/cactus/integration/ant/task_cactus.html

Enterprise Java Bean(EJB)
  若是您調用EJB的生產代碼做爲EJB實例運行在同一個虛擬機內部,您能夠經過使用Cactus使您的測試環境更加近似地匹配您的生產環境。這正以下面的例子所示。

EJB示例
  在這個例子中,上面用於外部組件測試的EJB測試已經被轉換成在服務器內部運行。您能夠在{UnitTestingWeb}/ejb/CactusEJBTest.java 上找到演示Cactus的EJB測試。它位於一個web項目內,以即可以部署給服務器,儘管將JAR文件構建到APP-INF/lib目錄中的Java項目也將被部署給服務器。此次測試的一個代碼片段以下所示:

public class CactusEJBTest extends ServletTestCase
{
   private SampleSessionHome lookupHome() throws NamingException {
       Context ctx = getInitialContext();
       // Lookup the bean's home using JNDI
       Object home = ctx.lookup("ejb.SampleSessionRemoteHome");
       return (SampleSessionHome) narrow(home, SampleSessionHome.class);
   }
   private Object narrow(Object ref, Class c) {
       return PortableRemoteObject.narrow(ref, c);
   }     
   private Context getInitialContext() throws NamingException {
       System.out.println( "getInitialContext()" );
       // Set up the environment properties
       Hashtable h = new Hashtable();
       h.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
       h.put(Context.PROVIDER_URL, "t3://localhost:7001");
      return new InitialContext(h);
   }  
   public void testEJB() throws Exception {
       assertEquals( 5, lookupHome().create().doSomethingBoring() );
   }
...


  若是您查看該測試的源代碼,您會注意到,它實際上與非Cactus的版本徹底相同。它擴展的是ServletTestCase ,而非TestCase ,並且有一個不一樣的類和包名。它還在它的getInitialContext()方法中打印出一些調試輸出,這樣您就能夠了解到,它的確是運行在服務器VM內部,可是沒有其餘方面的變化。必定要在試着運行測試以前構建和部署應用程序,以確保測試類被真正地部署到服務器。

Java控件(JCS、JCX)
  控件或許是WebLogic Workshop 8.1中最難測試的組件,由於用戶代碼不會直接實例化它們。相反,您必須容許框架讓支持控件的組件類型(好比JPF)使用控件實例。下面的例子說明了如何作到這一點。

Java控件示例
  在這個例子中,爲了可以接收Cactus請求的Java Page Flow,我把一個抽象基類AbstractUnitTestController包含在內。爲了測試控件,您須要使用JUnit測試方法建立一個子類。由於您的測試用例擴展了AbstractUnitTestController,它其實是一個頁面流控制器,因此服務器框架將給您的類一個控件實例來使用。此外,您能夠在IDE中使用您已經熟悉的設計工具編寫您的測試,這能夠簡化測試的建立過程。注意,您能夠輕鬆地把這個頁面流改編成測試任何爲WebLogic Platform應用程序而開發的Java控件。

  咱們將要測試的控件是一個在前面的web服務例子中自動生成的服務控件。該例子還演示了一種測試不須要構建Java客戶端代理的web服務的不一樣方法。Workshop將自動使服務控件與web服務保持同步。這個UnitTestingWeb}/jws/JWSToTestControl.jcx 控件的一個代碼片段以下所示:

public interface JWSToTestControl extends com.bea.control.ControlExtension, com.bea.control.ServiceControl {  
   public int square (int i);
   public java.lang.String hello ();
   static final long serialVersionUID = 1L;
}
...


  測試{UnitTestingWeb}/jws/newpageflow1/ ServiceControlTest.jpf的代碼以下所示:

public class ServiceControlTest extends AbstractUnitTestController {
   /** @common:control */
   private jws.JWSToTestControl jwsToTestControl;
/** @jpf:action */
   protected Forward begin() throws ServletException {
       return super.begin();
   }
   public static Test suite() {
       return new ServletTestSuite( ServiceControlTest.class );
   }  
   public void testMethod() {
       Assert.assertEquals( jwsToTestControl.square( 2 ), 4 );
   }
}


  在這段代碼中,有兩個元素是使測試在Cactus中正確工做所必需的(餘下的部分是標準的JUnit測試代碼)。首先,測試須要有一個委託給超類的protected 的begin()方法。由於在WebLogic Workshop 8.1 中,子類不能繼承註釋,每一個測試類須要定義一個jpf:action,以便可以接收HTTP請求。超類可在{UnitTestingWeb}/jwsTestPageFlow/ AbstractUnitTestController.jpf上找到,它將負責處理請求自己和調用相關的測試方法。

  接下來,測試須要一個suite()方法,用於把類添加給ServletTestSuite。由於類須要是Controller子類,以從框架得到控件實例,這個標籤告訴Cactus在服務器上,而不是在客戶端JUnit VM內部運行測試。

  要運行測試,確保您已經構建了應用程序並將其部署到WebLogic Server。而後,使用controlCactus.bat文件啓動客戶端進程,並使Cactus在服務器中運行測試。和EJB Cactus例子同樣,您可能須要在文件中編輯路徑,使其指向您機器上的正確目錄。

  要爲您本身的控件編寫測試,您只需把AbstractUnitTestController.jpf 類添加到您的項目中,而後建立您本身的子類便可。幫助您編輯頁面流文檔的常規設計工具還能夠輔助建立使用控件的測試。

結束語
  儘管WebLogic Workshop 8.1沒有將測試的編寫和維護自動化,它沒有禁止您編寫您的本身的測試。在某些狀況下,您能夠直接在IDE中輕鬆地運行您的測試。使用本文中說起的信息,您應該可以快速而輕鬆地測試您本身的WebLogic Workshop組件。

輔助閱讀

JUnit: http://www.JUnit.org/
閱讀Ant手冊(http://ant.apache.org/manual/index.html)中Ant Tasks主題的Optional Tasks 部分中有關Ant和JUnit集成的信息。
MaxQ: http://maxq.tigris.org/
QuickTest: http://www.mercury.com/us/produc ... ktest-professional/
HTTPUnit: http://httpunit.sourceforge.net/
HTMLUnit: http://htmlunit.sourceforge.net/
jWebUnit: http://jwebunit.sourceforge.net/
JAX-RPC: http://java.sun.com/xml/jaxrpc/index.jsp
Cactus: http://jakarta.apache.org/cactus/index.html
原文出處
http://dev2dev.bea.com/products/ ... icles/eckels_BP.jsp

相關文章
相關標籤/搜索