測試和發佈(伺服器)工具的版本注意事項

© Copyright International Business Machines Corporation 2006. All rights reserved.US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM® Corp.

版本注意事項

1.0 限制
   1.1 WebSphere Application Server 6.0.2.5 與以上的版本支援「將複製到伺服器的應用程式檔案減到最少」選項
   1.2 移除多個 EAR 專案共用的 EJB 模組
   1.3 執行多執行緒 WebSphere 應用程式用戶端
2.0 已知的問題和暫行解決方法
   2.1 在除錯模式下回復之後,置換常用方法無法生效
   2.2「管理共用的 WebSphere 伺服器」對話框的「移除」按鈕沒有作用。
   2.3「新建伺服器」精靈無法擷取正確的埠資訊
   2.4 在 64 位元機器上建立 WebSphere Application Server 設定檔
   2.5 失去網路連線之後建立 RMI 連線會擱置很久
   2.6 伺服器無法套用「應用程式部署描述子」編輯器的「部署」頁面中的各項變更
   2.7 當公用程式 JAR 檔新增至 Web 程式庫時,發生 java.lang.NoClassDefFoundError 錯誤
   2.8 安全的 SOAP 連線無法同時 並存於 WebSphere Application Server 6.0 版與 6.1 版
   2.9 當停止遠端伺服器時,「新建伺服器」精靈需耗時很久才會完成
   2.10 無法發佈在 EarContent 目錄中有 .war 副檔名的 EAR 應用程式
   2.11 對遠端 WebSphere Application Server 5.1 版的部署和發佈目錄所做的變更無法生效
   2.12 發佈大型應用程式比在舊版中更慢
   2.13 切換安全的 WebSphere Application Server 6.1 版的伺服器連線類型
   2.14 使用「表格和資料來源建立器」精靈時發生 TargetInvocationException 錯誤
   2.15 從「伺服器」視圖中停止伺服器時,伺服器無法完全停止
   2.16 透過「通用測試用戶端 (UTC)」執行 EJB 後,EJB jar 變更就無法生效

1.0 限制

1.1 WebSphere Application Server 6.0.2.5 與以上的版本支援「將複製到伺服器的應用程式檔案減到最少」選項

WebSphere® Application Server 6.0.2.5 與以上的版本支援將複製到伺服器的應用程式檔案減到最少選項。在 WebSphere Application Server 6.0 版伺服器編輯器中,有這個選項的勾選框;對 6.0.2.5 版之前的伺服器選取此選項無效。 

1.2 移除多個 EAR 專案共用的 EJB 模組

如果 WebSphere Application Server 上執行的多個 EAR 專案共用一個 Enterprise JavaBean (EJB) 模組,且從伺服器移除其中一個 EAR 專案,則其他 EAR 專案必須重新啟動,才能存取此 EJB 專案中的資源,例如 EJB Bean。 

如果未執行這個動作,可能會出現類似下列的錯誤訊息。發生這些錯誤是因為移除 EAR 時,伺服器中也移除 EJB 專案的 Java 命名和目錄介面 (JNDI) 名稱。

 

下列是錯誤訊息範例:

00000028 SystemOut     O javax.naming.NameNotFoundException: Context: myCell/nodes/myNode/servers/server1, name: ejb/ejbs/Session20Home: First component in name Session20Home not found. [Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]
    at com.ibm.ws.naming.jndicos.CNContextImpl.processNotFoundException(CNContextImpl.java:4730)
    at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1907)
    at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1862)
    at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1552)
    at com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1354)
    at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:172)
    at javax.naming.InitialContext.lookup(InitialContext.java:363)
    at com.ibm.ivj.ejb.runtime.AbstractAccessBean.lookupAndCacheHome(AbstractAccessBean.java:224)
    at com.ibm.ivj.ejb.runtime.AbstractAccessBean.getGlobalHome(AbstractAccessBean.java:216)
    at com.ibm.ivj.ejb.runtime.AbstractAccessBean.getHome(AbstractAccessBean.java:249)
    at ejbs.Session20AccessBean.ejbHome(Session20AccessBean.java:50)
    at ejbs.Session20AccessBean.instantiateEJB(Session20AccessBean.java:80)
    at ejbs.Session20AccessBean.foo(Session20AccessBean.java:91)
 

1.3 執行多執行緒 WebSphere 應用程式用戶端

由於 Eclipse 與 WebSphere 執行時期環境之間有各種行為和互動,透過「應用程式用戶端啟動配置」對話框來執行多執行緒 WebSphere 應用程式用戶端時,需要執行額外的步驟。 在產品的工具列中選取執行 > 執行...時,可從 J2EE 視景中開啟「應用程式用戶端啟動配置」對話框。如果用戶端使用多個執行緒,或使用的架構用到更多執行緒,例如 Swing,則您必須另外完成下列步驟:

  1. 在「應用程式用戶端啟動配置」對話框中,選取引數標籤。在 VM 引數文字框下,指定下列參數:
    -Dosgi.noShutdown=true
  2. 確定用戶端應用程式呼叫 System.exit()

如果不指定,可能會出現類別載入的相關問題,或 Java 虛擬機器 (JVM) 在應用程式執行完成時沒有結束。

2.0 已知的問題和暫行解決方法

2.1 在除錯模式下回復之後,置換常用方法無法生效

假設有一個使用下列配置的專案,例如「應用程式用戶端」專案:

您可能發現「除錯」視圖中的「回復」按鈕無法正常運作。例如,在伺服器上以除錯模式執行應用程式時,您試圖在執行時期變更程式檔,然後利用「回復」按鈕來繼續對應用程式除錯。您可能發現置換常用方法對程式碼的變更無法生效。
請嘗試按兩次「回復」按鈕,讓執行時期變更生效。 
附註:將 Java 的 Poject Facet 設為 5.0 版時不會發生這個問題。

2.2「管理共用的 WebSphere 伺服器」對話框的「移除」按鈕沒有作用。

「管理共用的 WebSphere 伺服器」對話框的移除按鈕無法正常運作。
提示:若要開啟「管理共用的 WebSphere 伺服器」對話框:

  1. 在工具列中,選取視窗 > 喜好設定。這時會開啟「喜好設定」對話框。
  2. 在左窗格中,選取伺服器 > WebSphere > WebSphere 5.1 版
  3. 在右窗格中,按一下「共用的 WebSphere 伺服器」欄位旁邊的管理按鈕。這時會開啟「管理共用的 WebSphere 伺服器」對話框。

如果使用「移除」按鈕,則伺服器看起來已移除。不過,如果結束對話框,然後又重新開啟對話框並重新整理遠端伺服器資訊,則先前移除的伺服器仍然會留在對話框中。

若要暫行解決這個問題,您可以執行下列步驟來手動移除共用的伺服器項目:

  1. 開啟下列目錄中的 id.txt 檔案:
    <目錄>/plugins/com.ibm.etools.websphere.tools*/properties
    其中,<目錄> 是 Agent Controller 的安裝目錄。
  2. 刪除項目,此項目參照您要移除的共用伺服器。
  3. 移除在伺服器建立期間針對此特定的共用伺服器所指定的 WebSphere 部署目錄及其所有子目錄。在 WebSphere 部署目錄下可移除的子目錄可能有:config、installedApps、temp,以及此目錄下的其他目錄和檔案。
  4. 在「管理共用的 WebSphere 伺服器」對話框中,指定主機名稱,再按一下重新整理按鈕,確認已順利移除共用的伺服器。

2.3「新建伺服器」精靈無法擷取正確的埠資訊

如果相同的 WebSphere Application Server 6.x 版設定檔內安裝其他伺服器,例如 IBM HTTP Server,「新建伺服器」精靈的「WebSphere 伺服器設定」頁面可能找不到正確的遠端方法呼叫 (RMI) 或 SOAP 埠號。此外,也可能不會擷取管理主控台的埠號。
當「新建伺服器」精靈找不到為伺服器定義的實際埠號時,依預設會在埠欄位中預先填入預設埠號:RMI 是 2809,SOAP 是 8880。 
如果定義不正確的埠號,可能會發生下列問題:

暫行解決方法:

  1. 參考伺服器配置檔來決定已配置的設定檔的埠值。埠值儲存在下列目錄中的 serverindex.xml 檔案:
    <目錄>\profiles\<profileName>\config\cells\<cellName>\nodes\<nodeName>,其中,<目錄> 是 WebSphere Application Server 的安裝目錄。
    利用 serverindex.xml 檔案來填寫下表,決定為伺服器定義的實際埠號:
    埠名稱埠說明預設埠號您指派的埠號
    SOAP_CONNECTOR_ADDRESS SOAP 8880
    BOOTSTRAP_ADDRESS RMI 2809
    WC_adminhost 管理主控台 9060
    WC_defaulthost HTTP 傳輸 9080
  2. 若要連接伺服器,請在建立伺服器時指定正確的 RMI 或 SOAP 埠號。
  3. 若要啟動管理主控台,請使用外部 Web 瀏覽器,在位址欄位中鍵入正確管理主控台埠的 URL:
    http://<machine_name>:<WC_adminhost>/IBM/console
    例如:http://localhost:9060/IBM/console
  4. 若要在伺服器上執行應用程式,請發出「在伺服器中執行」指令。當 Web 瀏覽器開啟時,請在 URL 中更正為伺服器已定義的 HTTP 傳輸埠號。
    http://<machine_name>:<WC_defaulthost>/<ContextRoot>/<application_start_page>
    例如:http://localhost:9080/MyApplication/index.jsp
    附註:「伺服器」視圖中自動定義的伺服器可能未參照實際伺服器的正確埠號。在此情況下,請採取上述的暫行解決方法。

 

2.4 在 64 位元機器上建立 WebSphere Application Server 設定檔

「設定檔管理」工具是為每一個執行時期環境建立設定檔的 WebSphere Application Server 工具。您可以利用工作台來啟動 WebSphere Application Server 的「設定檔管理」工具。但「設定檔管理」工具無法在 64 位元處理器上執行,請改用 WebSphere Application Server 提供的 manageprofiles 指令行工具。

2.5 失去網路連線之後建立 RMI 連線會擱置很久

在 Windows 作業系統上,如果使用遠端方法呼叫 (RMI) 埠來連接 WebSphere Application Server 6.x 版,在失去網路連線之後,對伺服器建立連線時可能會擱置很久。即使伺服器在本端且網路連線只是暫時中斷(常見於無線網路環境),也可能發生這種情形。
如果您確定伺服器已啟動,但「伺服器」視圖中的狀態卻顯示已停止啟動中,請試著將伺服器連線從 RMI 切換成 SOAP,看能否對伺服器建立連線。伺服器的狀態應該會變成已啟動

在無線網路環境中,對伺服器建立連線有幾個可用的選項:

2.6 伺服器無法套用「應用程式部署描述子」編輯器的「部署」頁面中的各項變更

即使重新發佈應用程式、重新啟動應用程式或解除安裝再重新安裝應用程式,這些動作仍然無法將「應用程式部署描述子」編輯器的「部署」頁面中定義的種種資源變更套用至伺服器。例如,在編輯器的「部署」頁面中變更資料來源的資料庫名稱,目前已知伺服器無法套用這項變更,可能還有其他幾項變更是伺服器無法套用的。
暫行解決方法是完成下列步驟,將變更套至伺服器:

  1. 停止伺服器。
    1. 在「伺服器」視圖中,用滑鼠右鍵按一下伺服器,選取停止
    2. 在「伺服器」視圖中,等到伺服器的狀態顯示已停止之後,再繼續下一步。 
  2. 啟動工作台。
    附註:如果伺服器無法啟動,則必須利用作業系統的功能來停止執行伺服器的 java 程序。或者,您也可以重新啟動工作台,再嘗試重新啟動伺服器。
  3. 啟動伺服器。
    1. 在「伺服器」視圖中,用滑鼠右鍵按一下伺服器,選取啟動
    2. 在「伺服器」視圖中,等到重新發佈完成且伺服器和應用程式的狀態顯示已啟動之後,再繼續下一步。
  4. 在伺服器上執行應用程式,例如使用在伺服器中執行指令。現在,伺服器應該能夠套用「應用程式部署描述子」編輯器中的變更。 

2.7 當公用程式 JAR 檔新增至 Web 程式庫時,發生 java.lang.NoClassDefFoundError 錯誤

如果將公用程式 JAR 檔新增至 Web 專案的 Web 程式庫,且在程式碼中參照 JAR 檔內的類別,當您嘗試在伺服器上執行應用程式時,可能會發生 java.lang.NoClassDefFoundError 錯誤。
暫行解決方法是在公用程式 JAR 檔新增至 EAR 模組之後,完成下列步驟,將 JAR 檔新增至 Web 專案的 J2EE 模組相依關係:

  1. 將公用程式 JAR 檔新增至 EAR 模組。如需詳細資訊,請參閱產品說明中的新增專案公用程式 JAR 檔主題。
  2. 用滑鼠右鍵按一下 Web 專案,選取內容。這時會開啟「內容」對話框。
  3. 選取 J2EE 模組相依關係。  
  4. J2EE 模組標籤中,請在 JAR/模組直欄下選取您的公用程式 JAR 檔的勾選框。

2.8 安全的 SOAP 連線無法同時存在 WebSphere Application Server 6.0 版與 6.1 版之間

如果 WebSphere Application Server 6.1 版在安全的 SOAP 連線上執行,則對 WebSphere Application Server 6.0 版建立的另一個安全的 SOAP 連線會失敗。反之也會發生同樣的問題,例如,在安全的 SOAP 連線上執行的 WebSphere Application Server 6.0 版,將導致無法對 WebSphere Application Server 6.1 版建立的安全的 SOAP 連線。不過,如果伺服器已定義在「伺服器」視圖中,且狀態為空白,則不會發生問題。

暫行解決方法是利用安全的遠端方法呼叫 (RMI) 連線來連接伺服器,而不是使用 SOAP 連線,或者使用未受保護的 SOAP 連線。

 

2.9 當遠端伺服器已停止時,「新建伺服器」精靈經過很久才會完成

如果遠端伺服器已停止,在「新建伺服器」精靈中按一下完成按鈕之後,需要經過很久才會完成。暫行解決方法是先啟動遠端伺服器,然後才在「新建伺服器」精靈中按一下完成按鈕。

2.10 無法發佈在 EarContent 目錄中有 .war 副檔名的 EAR 應用程式

如果 EAR 專案的 EarContent 資料夾中有 .war 副檔名的檔案,且該檔案在 application.xml 中並未定義成 Web 模組,則企業應用程式無法發佈至伺服器,將出現類似下列的錯誤訊息:
org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException: IWAE0034E 無法開啟 "D:\myworkspace\PublishEAR\EarContent" 中的巢狀保存檔 "abc.war"

這項錯誤的原因是工作台無法將檔案視為 Web 模組來正確處理。請選擇下列其中一個暫行解決方法:

 

2.11 對遠端 WebSphere Application Server 5.1 版的部署和發佈目錄所做的變更無法生效

適用於遠端 WebSphere Application Server 5.1 版或遠端 WebSphere Application Server 5.1 Express 版本,如如果您在伺服器編輯器中變更部署目錄和發佈目錄­,然後重新發佈應用程式,則應用程式仍然會發佈至前一個目的地。 因此,您對發佈和部署目錄所做的變更無效。使用本端副本或 FTP 方法時會發生這個問題。
暫行解決方法是重新啟動工作台。結果,對發佈目錄和部署目錄所做的配置變更就會生效。

2.12 發佈大型應用程式比在舊版中更慢

為了以更靈活的方式來儲存專案,應用程式的發佈技術已變更。應用程式在發佈至伺服器之前會先複製。如果應用程式很大,例如大於 100 MB,則發佈指令所執行的這項複製作業會比在舊版中更久。

目前尚未有暫行解決方法。IBM 正在設法更新,以後在大多數情況下不需要再執行這項新的複製作業。

2.13 切換安全的 WebSphere Application Server 6.1 版的伺服器連線類型

如果安全的 WebSphere Application Server 6.1 版已啟動,且您在伺服器編輯器中將伺服器連線類型改為遠端方法呼叫 (RMI) 或 SOAP,則儲存伺服器編輯器中的變更之後,可能會出現下列發佈失敗的錯誤訊息:
未執行發佈,因為伺服器未啟動。執行發佈作業之前,請先啟動伺服器。
您可以放心地忽略這項錯誤。或者,您可以等到「伺服器」視圖中的伺服器狀態變成已啟動之後再完成發佈指令(在「伺服器」視圖中,用滑鼠右鍵按一下伺服器,再選取發佈)。

2.14 使用「表格和資料來源建立器」精靈時發生 TargetInvocationException 錯誤

嘗試使用「表格和資料來源建立器」精靈來產生資料來源時,在「表格和資料來源建立結果」對話框的「詳細資料」區段可能會出現 TargetInvocationException 錯誤。
如果匯入的專案交換包含以相同 Java 命名和目錄介面 (JNDI) 名稱定義的資料來源,就可能發生 TargetInvocationException 錯誤。
若要解決 TargetInvocationException 錯誤,請驗證工作台裡是否定義相同 JNDI 名稱的資料來源。如果已定義,請從「應用程式部署描述子」編輯器的「部署」頁面中移除,然後以不同的 JNDI 名稱來重新建立資料來源。JNDI 名稱是將 Enterprise Bean 連結至資料來源的命名和查閱服務,必須是唯一的。

2.15 從「伺服器」視圖中停止伺服器時,伺服器無法完全停止

從「伺服器」視圖中停止伺服器時,伺服器可能無法完全停止。「伺服器」視圖顯示為已停止,但伺服器處理程序可能處於無回應狀態。當構件(例如您的應用程式)或工作台仍然持續參照伺服器上的類別時,通常就會發生這種情形。下列是可能的情況:

限制:由於 Cloudscape 或 Derby 配置限制,單一 Cloudscape 或 Derby 資料庫不支援多個連線。如果從「資料庫瀏覽器」來維護資料庫的資料庫連線,且有一個伺服器嘗試透過資料來源來建立另一個 Cloudscape 或 Derby 連線,則第二個連線會失敗。因此,您必須從「資料庫瀏覽器」關閉連線,伺服器才能建立 Cloudscape 或 Derby 資料庫的連線。

 

若要解決問題,您必須利用作業系統的功能來停止執行伺服器的 java 程序。或者,您也可以重新啟動工作台,強制釋放參照。在第三個項目符號所描述的最後一個情況中,您可以利用「資料庫瀏覽器」視圖來連接再中斷連接 Cloudscape 或 Derby 資料庫連線。

2.16 透過「通用測試用戶端 (UTC)」來執行 EJB 之後,EJB jar 變更無法生效

將資源發佈至伺服器時,例如 Enterprise Bean,如果利用「通用測試用戶端 (UTC)」來測試 EJB,則 JAR 檔可能會鎖定,無法更新。這導致在測試 EJB 期間,工具中所做的變更無法生效。當 UTC 載入 EJB JAR 檔之後,JAR 檔會持續鎖定,一直到移除再重新加入應用程式或重新啟動伺服器為止。

暫行解決方法是在工作區耗盡應用程式資源的開發環境中使用 UTC,不要在伺服器上執行。這可利用「新建伺服器」精靈來配置,或稍後在伺服器編輯器的「發佈」選項下選取使用工作區內的資源來執行伺服器來變更。這樣可以只更新 EJB 專案內的個別檔案,不需要取代整個 EJB JAR 檔。

當應用程式完整測試之後,就可利用使用伺服器上的資源來執行伺服器發佈選項來發佈至伺服器。