© 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.
WebSphere® Application Server 6.0.2.5 與以上的版本支援將複製到伺服器的應用程式檔案減到最少選項。在 WebSphere Application Server 6.0 版伺服器編輯器中,有這個選項的勾選框;對 6.0.2.5 版之前的伺服器選取此選項無效。
如果 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)
由於 Eclipse 與 WebSphere 執行時期環境之間有各種行為和互動,透過「應用程式用戶端啟動配置」對話框來執行多執行緒 WebSphere 應用程式用戶端時,需要執行額外的步驟。 在產品的工具列中選取執行 > 執行時,可從 J2EE 視景中開啟「應用程式用戶端啟動配置」對話框。如果用戶端使用多個執行緒,或使用的架構用到更多執行緒,例如 Swing,則您必須另外完成下列步驟:
- 在「應用程式用戶端啟動配置」對話框中,選取引數標籤。在 VM 引數文字框下,指定下列參數:
-Dosgi.noShutdown=true- 確定用戶端應用程式呼叫 System.exit()
如果不指定,可能會出現類別載入的相關問題,或 Java™ 虛擬機器 (JVM) 在應用程式執行完成時沒有結束。
假設有一個使用下列配置的專案,例如「應用程式用戶端」專案:
- Java 的 Poject Facet 設為 1.4 版
- 此專案的目標伺服器執行時期在伺服器配置中已啟用「常用方法取代」選項
您可能發現「除錯」視圖中的「回復」按鈕無法正常運作。例如,在伺服器上以除錯模式執行應用程式時,您試圖在執行時期變更程式檔,然後利用「回復」按鈕來繼續對應用程式除錯。您可能發現常用方法取代對程式碼的變更沒有生效。
請嘗試按兩次「回復」按鈕,讓執行時期變更生效。
附註:將 Java 的 Poject Facet 設為 5.0 版時不會發生這個問題。
「管理共用的 WebSphere 伺服器」對話框的移除按鈕無法正常運作。
提示:若要開啟「管理共用的 WebSphere 伺服器」對話框:
- 在工具列中,選取視窗 > 喜好設定。這時會開啟「喜好設定」對話框。
- 在左窗格中,選取伺服器 > WebSphere > WebSphere 51版。
- 在右窗格中,按一下「共用的 WebSphere 伺服器」欄位旁邊的管理按鈕。這時會開啟「管理共用的 WebSphere 伺服器」對話框。
如果使用「移除」按鈕,則伺服器看起來已移除。不過,如果結束對話框,然後又重新開啟對話框並重新整理遠端伺服器資訊,則先前移除的伺服器仍然會留在對話框中。
若要解決這個問題,您可以執行下列步驟來手動移除共用的伺服器項目:
- 開啟下列目錄中的 id.txt 檔案:
<目錄>/plugins/com.ibm.etools.websphere.tools*/properties
其中,<目錄> 是 Agent Controller 的安裝目錄。- 刪除項目,此項目參照您要移除的共用伺服器。
- 移除在伺服器建立期間針對此特定的共用伺服器所指定的 WebSphere 部署目錄及其所有子目錄。在 WebSphere 部署目錄下可移除的子目錄可能有:config、installedApps、temp,以及此目錄下的其他目錄和檔案。
- 在「管理共用的 WebSphere 伺服器」對話框中,指定主機名稱,再按一下重新整理按鈕,確認已順利移除共用的伺服器。
如果相同的 WebSphere Application Server 6.x 版設定檔內安裝其他伺服器,例如 IBM HTTP Server,「新建伺服器」精靈的「WebSphere 伺服器設定」頁面可能找不到正確的遠端方法呼叫 (RMI) 或 SOAP 埠號。此外,也可能不會擷取管理主控台的埠號。
當「新建伺服器」精靈找不到為伺服器定義的實際埠號時,依預設會在埠欄位中預先填入預設埠號:RMI 是 2809,SOAP 是 8880。
如果定義不正確的埠號,可能會發生下列問題:
- 無法連接新的伺服器,例如無法啟動或停止伺服器。
- 無法從這個新的伺服器開啟管理主控台,可能出現管理主控台埠未定義的錯誤。
- 無法在這個伺服器上執行應用程式,例如「在伺服器中執行」指令沒有用
暫行解決方法:
- 參考伺服器配置檔來決定已配置的設定檔的埠值。埠值儲存在下列目錄中的 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 - 若要連接伺服器,請在建立伺服器時指定正確的 RMI 或 SOAP 埠號。
- 若要啟動管理主控台,請使用外部 Web 瀏覽器,在位址欄位中鍵入正確管理主控台埠的 URL:
http://<machine_name>:<WC_adminhost>/IBM/console
例如:http://localhost:9060/IBM/console- 若要在伺服器上執行應用程式,請發出「在伺服器中執行」指令。當 Web 瀏覽器開啟時,請在 URL 中更正為伺服器已定義的 HTTP 傳輸埠號。
http://<machine_name>:<WC_defaulthost>/<ContextRoot>/<application_start_page>
例如:http://localhost:9080/MyApplication/index.jsp
附註:「伺服器」視圖中自動定義的伺服器可能未參照實際伺服器的正確埠號。在此情況下,請採取上述的暫行解決方法。
「設定檔管理」工具是為每一個執行時期環境建立設定檔的 WebSphere Application Server 工具。您可以利用工作台來啟動 WebSphere Application Server 的「設定檔管理」工具。但「設定檔管理」工具無法在 64 位元處理器上執行,請改用 WebSphere Application Server 提供的 manageprofiles 指令行工具。
在 Windows 作業系統上,如果使用遠端方法呼叫 (RMI) 埠來連接 WebSphere Application Server 6.x 版,在失去網路連線之後,對伺服器建立連線時可能會擱置很久。即使伺服器在本端且網路連線只是暫時中斷(常見於無線網路環境),也可能發生這種情形。
如果您確定伺服器已啟動,但「伺服器」視圖中的狀態卻顯示已停止或啟動中,請試著將伺服器連線從 RMI 切換成 SOAP,看能否對伺服器建立連線。伺服器的狀態應該會變成已啟動。在無線網路環境中,對伺服器建立連線有幾個可用的選項:
- 最簡單和最安全的選項是將連線改為使用 SOAP 埠。在失去網路連線之後,SOAP 連線能夠比 RMI 連線更快回復。
- 如果必須使用 RMI 連線,您可以嘗試在 Windows 作業系統上修改「網域名稱系統 (DNS)」快取相關的預設值。如需詳細資訊,請參閱下列 Microsoft 支援文章:
http://support.microsoft.com/kb/318803
Windows 作業系統有內建的 DNS 快取會維護已解析的主機名稱。這有助於發出 DNS 查閱時快速回轉。但這在 DNS 查閱失敗時就有缺點。Windows 作業系統會快取失敗值,預設時間為 300 秒。即使在此之後 DNS 伺服器可以馬上解析查閱,但在快速時間到期之前,並不會實際地嘗試查閱。因此,使用預設值執行的失敗 DNS 查閱可能需要經過 5 分鐘之後,才會真正地重新查閱。將快取時間設為 0 秒可強制 Windows 作業系統永不快取失敗的 DNS 查閱查詢,在 DNS 回復之後就立刻重新連接。
下列示範在 Windows 作業系統上如何不讓 DNS 快取失敗的查閱:
在下列登錄鍵中: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
新增下列其中一個登錄值:
- Windows XP/2003:
"MaxNegativeCacheTtl"=dword:00000000- Windows 2000:
"NegativeCacheTime"=dword:00000000
即使重新發佈應用程式、重新啟動應用程式或解除安裝再重新安裝應用程式,這些動作仍然無法將「應用程式部署描述子」編輯器的「部署」頁面中定義的種種資源變更套用至伺服器。例如,在編輯器的「部署」頁面中變更資料來源的資料庫名稱,目前已知伺服器無法套用這項變更,可能還有其他幾項變更是伺服器無法套用的。
暫行解決方法是完成下列步驟,將變更套至伺服器:
- 停止伺服器。
- 在「伺服器」視圖中,用滑鼠右鍵按一下伺服器,選取停止。
- 在「伺服器」視圖中,等到伺服器的狀態顯示已停止之後,再繼續下一步。
- 啟動工作台。
附註:如果伺服器無法啟動,則必須利用作業系統的功能來停止執行伺服器的 java 程序。或者,您也可以重新啟動工作台,再嘗試重新啟動伺服器。- 啟動伺服器。
- 在「伺服器」視圖中,用滑鼠右鍵按一下伺服器,選取啟動。
- 在「伺服器」視圖中,等到重新發佈完成且伺服器和應用程式的狀態顯示已啟動之後,再繼續下一步。
- 在伺服器上執行應用程式,例如使用在伺服器中執行指令。現在,伺服器應該能夠套用「應用程式部署描述子」編輯器中的變更。
如果將公用程式 JAR 檔新增至 Web 專案的 Web 程式庫,且在程式碼中參照 JAR 檔內的類別,當您嘗試在伺服器上執行應用程式時,可能會發生 java.lang.NoClassDefFoundError 錯誤。
暫行解決方法是在公用程式 JAR 檔新增至 EAR 模組之後,完成下列步驟,將 JAR 檔新增至 Web 專案的 J2EE 模組相依關係:
- 將公用程式 JAR 檔新增至 EAR 模組。如需詳細資訊,請參閱產品說明中的新增專案公用程式 JAR 檔主題。
- 用滑鼠右鍵按一下 Web 專案,選取內容。這時會開啟「內容」對話框。
- 選取 J2EE 模組相依關係。
- 在 J2EE 模組標籤中,請在 JAR/模組直欄下選取您的公用程式 JAR 檔的勾選框。
如果 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 連線。
如果遠端伺服器已停止,在「新建伺服器」精靈中按一下完成按鈕之後,需要經過很久才會完成。暫行解決方法是先啟動遠端伺服器,然後才在「新建伺服器」精靈中按一下完成按鈕。
如果 EAR 專案的 EarContent 資料夾中有 .war 副檔名的檔案,且該檔案在 application.xml 中並未定義成 Web 模組,則企業應用程式無法發佈至伺服器,將出現類似下列的錯誤訊息:
org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException: IWAE0034E 無法開啟 "D:\myworkspace\PublishEAR\EarContent" 中的巢狀保存檔 "abc.war"這項錯誤的因為是工作台無法將檔案視為 Web 模組來正確處理。請選擇下列其中一個暫行解決方法:
- 如果檔案是 Web 模組,請將檔案新增至企業應用程式中成為模組。如需詳細資訊,請參閱產品說明中的將模組新增至企業應用程式主題。
- 如果檔案不是 Web 模組,則建議將副檔名改為非 .war 的其他副檔名來解決發佈問題,例如改為 .jar
對於遠端 WebSphere Application Server 5.1 版或遠端 WebSphere Application Server 5.1 Express 版本, 如果在伺服器編輯器中變更部署目錄和發佈目錄,然後重新發佈應用程式,則應用程式仍然會發佈至前一個目的地。 因此,您對發佈和部署目錄所做的變更無效。使用本端副本或 FTP 方法時會發生這個問題。
暫行解決方法是重新啟動工作台。結果,對發佈目錄和部署目錄所做的配置變更就會生效。
為了以更靈活的方式來儲存專案,應用程式的發佈技術已變更。應用程式在發佈至伺服器之前會先複製。如果應用程式很大,例如大於 100 MB,則發佈指令所執行的這項複製作業會比在舊版中更久。
目前尚未暫行解決方法。IBM® 正在設法更新,以後在大多數情況下不需要再執行這項新的複製作業。
如果安全的 WebSphere Application Server 6.1 版已啟動,且您在伺服器編輯器中將伺服器連線類型改為遠端方法呼叫 (RMI) 或 SOAP,則儲存伺服器編輯器中的變更之後,可能會出現下列發佈失敗的錯誤訊息:
未執行發佈,因為伺服器未啟動。執行發佈作業之前,請先啟動伺服器。
您可以放心地忽略這項錯誤。或者,您可以等到「伺服器」視圖中的伺服器狀態變成已啟動之後再完成發佈指令(在「伺服器」視圖中,用滑鼠右鍵按一下伺服器,再選取發佈)。
嘗試使用「表格和資料來源建立器」精靈來產生資料來源時,在「表格和資料來源建立結果」對話框的「詳細資料」區段可能會出現 TargetInvocationException 錯誤。
如果匯入的專案交換包含以相同 Java 命名和目錄介面 (JNDI) 名稱定義的資料來源,就可能發生 TargetInvocationException 錯誤。
若要解決 TargetInvocationException 錯誤,請驗證工作台裡是否定義相同 JNDI 名稱的資料來源。如果已定義,請從「應用程式部署描述子」編輯器的「部署」頁面中移除,然後以不同的 JNDI 名稱來重新建立資料來源。JNDI 名稱是將 Enterprise Bean 連結至資料來源的命名和查閱服務,必須是唯一的。
從「伺服器」視圖中停止伺服器時,伺服器可能無法完全停止。「伺服器」視圖顯示為已停止,但伺服器處理程序可能處於無回應狀態。當構件(例如您的應用程式)或工作台仍然持續參照伺服器上的類別時,通常就會發生這種情形。下列是可能的情況:
- 應用程式陷入無窮迴圈,或應用程式持續參照伺服器上的某些類別。
- 應用程式未清除自己的連線就建立 Cloudscape 或 Derby 資料庫連線
- 使用資料工具的「新建連線」精靈中的測試連線按鈕來開啟對 Cloudscape 或 Derby 資料庫的連線,但事先未中斷資料庫的連線
限制:由於 Cloudscape 或 Derby 配置限制,單一 Cloudscape 或 Derby 資料庫不支援多個連線。如果從「資料庫瀏覽器」來維護資料庫的資料庫連線,且有一個伺服器嘗試透過資料來源來建立另一個 Cloudscape 或 Derby 連線,則第二個連線會失敗。因此,您必須從「資料庫瀏覽器」關閉連線,伺服器才能建立 Cloudscape 或 Derby 資料庫的連線。
暫行解決方法:利用作業系統的功能來停止執行伺服器的 java 程序。或者,您也可以重新啟動工作台,強制釋放參照。在第三個項目符號所描述的最後一個情況中,您可以利用「資料庫瀏覽器」視圖來連接再中斷連接 Cloudscape 或 Derby 資料庫連線。
將資源發佈至伺服器時,例如 Enterprise Bean,如果利用「通用測試用戶端 (UTC)」來測試 EJB,則 JAR 檔可能會鎖定,無法更新。這導致在測試 EJB 期間,工具中所做的變更無法生效。當 UTC 載入 EJB JAR 檔之後,JAR 檔會持續鎖定,一直到移除再重新加入應用程式或重新啟動伺服器為止。
暫行解決方法:在工作區耗盡應用程式資源的開發環境中使用 UTC,不要在伺服器上執行。這可利用「新建伺服器」精靈來配置,或稍後在伺服器精靈的「發佈」選項下選取使用工作區內的資源來執行伺服器來變更。這樣可以只更新 EJB 專案內的個別檔案,不需要取代整個 EJB JAR 檔。
當應用程式完整測試之後,就可利用使用伺服器上的資源來執行伺服器發佈選項來發佈至伺服器。