適用於 Microsoft Windows 的 Sun Java System Application Server Enterprise Edition 8.2 版本說明

Web 容器

本節說明已知的 Web 容器問題以及相關的解決方案。

不支援 Apache 和 IIS 使用負載平衡程式外掛程式

Sun Java ES 5 Application Server 不支援在 Apache 和 IIS (非 Sun Web 容器) 上使用負載平衡程式外掛程式。Sun Java ES 會為負載平衡程式外掛程式配置安裝 Sun Java System Web Server。

使用 --precompilejsp=true 部署應用程式會鎖定 JAR 檔案 (ID 5004315)

在 Windows 平台上,如果您在 Windows 上部署應用程式時請求對 JSP 進行預先編譯,則以後無法按預期嘗試取消部署或重新部署該應用程式 (或任何具有相同模組 ID 的應用程式)。因為 JSP 預先編譯會開啟應用程式中的 JAR 檔案但不會將其關閉,並且 Windows 會防止取消部署刪除這些檔案或防止重新部署將其覆寫。

請注意,取消部署會延續至某個點,在該點上該應用程式會在邏輯上從 Application Server 中移除。還請注意,asadmin 公用程式不會傳回任何錯誤訊息,但應用程式的目錄和鎖定的 jar 檔案會保留在伺服器上。伺服器的記錄檔將包含描述無法刪除檔案和應用程式目錄的訊息。

取消部署失敗後會嘗試重新部署應用程式,因為伺服器會嘗試移除現有檔案與目錄,此嘗試仍失敗。如果您嘗試部署任何使用與初始部署的應用程式具有相同模組 ID 的應用程式,便會出現這種情況,因為伺服器是使用模組 ID 選擇目錄名稱來存放應用程式檔案。

基於同樣原因,不先取消部署即嘗試重新部署應用程式將會失敗。

診斷

如果您嘗試重新部署應用程式,或在取消部署之後再部署該應用程式,asadmin 公用程式會傳回類似以下的錯誤:


An exception occurred while running the command. The exception 
message is: CLI171 Command deploy failed : Deploying application in 
domain failed; Cannot deploy. Module directory is locked and can't 
be deleted.

解決方案

如果您在部署應用程式時指定 --precompilejsps=false (預設設定),則不會出現此問題。請注意,第一次使用應用程式會觸發 JSP 編譯,因此第一次請求的回應時間會比以後請求的回應時間長。

還請注意,如果進行預編譯,應先停止並重新啟動伺服器,然後再取消部署或重新部署應用程式。關機會釋放鎖定的 JAR 檔案,因此重新啟動後才能成功取消部署或重新部署。

無法使用基於 Servlet 2.4 且包含空 <load-on-startup> 元素的 web.xml 部署 WAR (ID 6172006)

web.xml 檔案中的選擇性 load-on-startup servlet 元素表示在宣告該 servlet 的 Web 應用程式啟動過程中,將要載入關聯的 servlet 並將其初始化。

該元素的可選內容是一個整數,表示要載入並初始化與 Web 應用程式之其他 servlet 相關的 servlet 的順序。空的 <load-on-startup> 元素表示順序無關緊要,只要是在 servlet 所含 Web 應用程式的啟動過程中將該 servlet 載入並初始化即可。

web.xml 的 Servlet 2.4 模式不再支援空的 <load-on-startup>,這意味著在使用基於 Servlet 2.4 的 web.xml 檔案時,必須指定一個整數。如果指定空 <load-on-startup> (與 <load-on-startup/> 中相同),web.xml 檔案將無法針對 web.xml 的 Servlet 2.4 模式進行驗證,進而導致部署 Web 應用程式失敗。

向下相容性問題。指定空的 <load-on-startup> 仍可使用基於 Servlet 2.3 的 web.xml

解決方案

使用基於 Servlet 2.4 的 web.xml 時,指定 <load-on-startup>0</load-on-startup>,以表示 servlet 載入順序並不重要。

無法在資源受限的伺服器上編譯 JSP 頁面 (ID 6184122)

存取 JSP 頁面後無法編譯,伺服器記錄含有錯誤訊息「Unable to execute command」以及以下堆疊追蹤:


at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.
exec(Execute.java:655) at org.apache.tools.ant.taskdefs.Execute.
launch(Execute.java:416) 
at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:427) 
at org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.
executeExternalCompile(DefaultCompilerAdapter.java:448) 
at org.apache.tools.ant.taskdefs.compilers.JavacExternal.execute
(JavacExternal.java:81) 
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:842) 
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:682) 
at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:396)

解決方案

將 JSP 編譯切換「fork」設定為「false」。

您可使用以下兩種方式之一來啟動此設定:

任一設定均可防止 Ant 產生新的 javac 編譯程序。

Application Server 不支援 auth-passthrough Web Server 6.1 附加元件 (ID 6188932)

Sun Java System Application Server Enterprise Edition 8.2 還支援 Sun Java System Application Server Enterprise Edition 7.1 具備的 auth-passthrough 外掛程式功能所提供的功能性。但是在 Application Server Enterprise Edition 8.2 中,auth-passthrough 外掛程式功能以不同方式配置。

Application Server Enterprise Edition 7.1 中的 auth-passthrough 外掛程式功能在雙階層部署案例中非常有用,但有以下限制:

在此類網路架構中,用戶端連線至使用 service-passthrough 外掛程式功能配置的前端 Web 伺服器,並將 HTTP 請求轉寄至代理 Application Server 實例進行處理。Application Server 實例只能接收來自 Web 伺服器代理程式伺服器的請求,絕不會直接接收來自任何用戶端主機的請求。因此,部署在查詢用戶端資訊 (如用戶端的 IP 位址) 的代理 Application Server 實例上的任何應用程式均會接收代理主機 IP,因為這才是實際產生所轉送請求的主機。

在 Application Server Enterprise Edition 7.1 中,您可在代理 Application Server 實例上配置 auth-passthrough 外掛程式功能,以便直接為在其上部署的任何應用程式提供遠端用戶端資訊;這就好像代理 Application Server 實例直接接收請求,而不是透過執行 service-passthrough 外掛程式的中間 Web 伺服器接收請求。

在 Application Server Enterprise Edition 8.2 中,您可將 domain.xml<http-service> 元素的 authPassthroughEnabled 特性設為 TRUE 以便啟用 auth-passthrough 功能,如下所示:


<property name="authPassthroughEnabled" value="true"/>

Application Server Enterprise Edition 7.1 中 auth-passthrough 外掛程式功能的安全注意事項同樣適用於 Application Server Enterprise Edition 8.2 中的 authPassthroughEnabled 特性。由於 authPassthroughEnabled 可置換用於認證的資訊 (如產生請求的來源 IP 位址或 SSL 用戶端憑證),因此,應僅允許受信任的用戶端或伺服器連線至 authPassthroughEnabled 設定為 TRUE 的 Application Server Enterprise Edition 8.2 實例。預防措施是僅配置企業防火牆後方的伺服器,並將 authPassthroughEnabled 設定為 TRUE。可透過網際網路存取的伺服器絕不能將 authPassthroughEnabled 設定為 TRUE

請注意,在代理 Web 伺服器已配置有 service-passthrough 外掛程式,並且是將請求轉送至 authPassthroughEnabled 設定為 TRUE 的 Application Server 8.1 Update 2 實例情況下,可在該代理 Web 伺服器上啟用 SSL 用戶端認證,並在代理的 Application Server 8.1 Update 2 實例上將其停用。在此情況下,代理的 Application Server 8.1 Update 2 實例仍將請求做為已透過 SSL 認證的請求進行處理,並將用戶端的 SSL 憑證提供給需要此憑證的所有已部署的應用程式。

使用 --enabled=false 建立的 HTTP 偵聽程式不會停用該偵聽程式 (ID 6190900)

使用 --enabled=false 旗標建立 httplistener 時,並未停用偵聽程式。當建立偵聽程式時使用旗標 --enabled 不會產生任何影響。

解決方案

將偵聽程式建立為啟用狀態,稍後手動將其停用。