Sun GlassFish Communications Server 2.0 版本說明

第 4 章 Sun GlassFish 企業伺服器的已知問題與限制

本章說明 Sun GlassFish Enterprise Server 2.1.1 軟體的已知問題以及相關的解決方案。這些問題特別會影響建立於 Sun GlassFish Enterprise Server 2.1 上的通訊伺服器。如果沒有看到指出特定平台的摘要聲明,表示這個問題會發生在所有平台上。這些資訊按以下章節進行分類:

管理

本節介紹已知的管理問題以及相關的解決方案。

Communications Server 不會偵測與叢集活動訊號連接埠的衝突 (問題編號 1967)

說明

叢集建立時,Communications Server 會為其隨機指定 1026 到 45556 之間的活動訊號連接埠。對於預設叢集 (亦即 Communications Server 安裝所建立的預設叢集),系統會隨機選取介於 0 至 45556 之間的數字。叢集建立程序不會精確偵測是否已有其他服務使用該活動訊號連接埠。

解決方案

如果自動叢集建立配置選取了與另一服務 (已使用該連接埠) 衝突的活動訊號連接埠,請將叢集活動訊號連接埠更新為系統未使用的連接埠。

要變更叢集的活動訊號連接埠,請使用下列 asadmin 指令:

asadmin set cluster-name.heartbeat-port= newportnumber

執行 64 位元 Linux 的 NFS 伺服器停止建立網域 (問題編號 1961)

說明

在執行 64 位元 Linux 的 NFS 伺服器上,asadmin create-domain 指令在嘗試於掛載 Network File System (NFS) 的檔案系統上建立網域時可能會失敗。

解決方案

無已知解決方案。

自動重建大型記錄檔時發生效能降低情形 (6718611)

說明

自動重建大型記錄檔時,觀察到回應時間略為增加的情形。

解決方案

修改記錄程式設定中「檔案自動重建限制」和「檔案自動重建時間限制」的值,可以將效能降低情形減至最低。這些特性的值會視您的應用程式和環境而定。

無法針對 IBM MQ 部署常規 RA 資源配接卡 (問題 6605)

說明

針對 IBM Message Queue 產品部署常規 RA 配接卡失敗。server.policy 檔案授予的權限如下。


grant {
      permission java.util.logging.LoggingPermission "control";
      permission java.util.PropertyPermission "*", "read,write";
      }

解決方案

變更 server.policy 檔案中的權限,如下所示:


grant codeBase
"file:${com.sun.aas.installRoot}/lib/install/applications/adminapp/-" {
  permission java.util.logging.LoggingPermission "control";
 };

獨立實例有時會從其他實例取得檔案 (6698604)

說明

在某些情況下,系統會將安裝在 DAS 上但需與特定實例同步的檔案,真的傳送至其他實例。

解決方案

無已知解決方案。

start-cluster 指令產生的啟動訊息太詳細 (6728317)

說明

即使啟動期間失敗的元件並不重要,asadmin start-cluster 指令仍會顯示過多訊息。請參閱下列不重要元素 (與叢集中的實例有關) 失敗時產生的指令輸出範例:


./asadmin start-cluster --port 9898 cluster1
Please enter the admin user name>admin
Please enter the admin password>
The clustered instance, instance2, was successfully started.
error 0 [#|2008-07-17T14:58:16.496+0200|WARNING|sun-appserver9.1|javax.jms|
_ThreadID=10;_ThreadName=main;
_RequestID=90bbbe3a-d654-4480-b295-7e317d945a4a;|[C4003]: 
Error occurred on connection creation [localhost:37676]. - cause: 
java.net.ConnectException: Connection refused|#]


error 1 [#|2008-07-17T14:58:17.517+0200|WARNING|sun-appserver9.1|javax.jms|
_ThreadID=10;_ThreadName=main;
_RequestID=90bbbe3a-d654-4480-b295-7e317d945a4a;|[C4003]: 
Error occurred on connection creation [localhost:37676]. - cause: 
java.net.ConnectException: Connection refused|#]


error 2 [#|2008-07-17T14:58:30.596+0200|WARNING|sun-appserver9.1|
javax.enterprise.system.container.ejb|
_ThreadID=13;_ThreadName=pool-1-thread-4;TimerBean;
_RequestID=5954a044-df06-4a3e-902a-0c40b4b6cddb;
|EJB5108:Unable to initialize EJB Timer Service. 
The likely cause is the database has not been 
started or the timer database table has not been created.|#]


error 3 [#|2008-07-17T14:58:32.512+0200|WARNING|sun-appserver9.1|
javax.enterprise.resource.resourceadapter|_ThreadID=10;_ThreadName=main;
__CallFlowPool;_RequestID=90bbbe3a-d654-4480-b295-7e317d945a4a;|
RAR5005:Error in accessing XA resource with JNDI name [__CallFlowPool] for recovery|#]


The clustered instance, instance1, was successfully started.
error 0 [#|2008-07-17T14:58:21.117+0200|WARNING|sun-appserver9.1|
javax.enterprise.system.container.ejb|
_ThreadID=13;_ThreadName=pool-1-thread-4;TimerBean;
_RequestID=30827d9a-72ac-4854-b216-06494b6a9fb5;
|EJB5108:Unable to initialize EJB Timer Service. The likely cause is the database has 
not been started or the timer database table has not been created.|#]


error 1 [#|2008-07-17T14:58:23.106+0200|WARNING|sun-appserver9.1|
javax.enterprise.resource.resourceadapter|
_ThreadID=10;_ThreadName=main;__CallFlowPool;
_RequestID=b41d76fa-0203-49f7-a2ae-83bf242d3e7a;
|RAR5005:Error in accessing XA resource with JNDI name [__CallFlowPool] for recovery|#]


Command start-cluster executed successfully.

解決方案

無已知解決方案。可以略過這些 (異常) 訊息。

如果 domain1 不存在,則 package-appclient 程序檔無法使用 (6171458)

說明

依預設,在 as-install/lib/package-appclient.xml 中,asenv.conf 指向的 domain1AS_ACC_CONFIG 變數有一個程序內定值。如果刪除 domain1 並建立新網域,則不會使用新網域名稱更新 AS_ACC_CONFIG 變數,這將導致 package-appclient 程序檔失敗。

解決方案

執行下列動作之一:

  1. 保留 domain1 的完整,並在周圍建立其他網域。

  2. 移除 domain1 並使用新網域名稱替代 as-install/lib/package-appclient.xmldomain1 的程序內定值。

如果沒有 domain1,則每次建立新網域時均必須執行此作業。

不支援同時啟動 Application Server 和其他 JMX 代理程式 (6200011)

說明

在 Application Server 上可以配置 J2SE 1.4.x、5.0 或更高版本。啟動 JMX 代理程式是 J2SE 5.0 平台不可或缺的功能。如果您在伺服器啟動時明確設定系統特性,則會啟動此功能。

範例值包含︰


name="com.sun.management.jmxremote" value="true"
name="com.sun.management.jmxremote.port" value="9999"
name="com.sun.management.jmxremote.authenticate" value="false"
name="com.sun.management.jmxremote.ssl" value="false"

在配置 JMX 特性並啟動伺服器之後,會在 Application Server Virtual Machine 上啟動新的 jmx-connector 伺服器。此作業會產生不良副作用,即負面影響管理功能,並且 Application Server 管理主控台和指令行介面可能會產生未預期的結果。問題在於在內建 jmx-connector 伺服器和新的 jmx-connector 伺服器之間存在某些衝突。

解決方案

在使用 jconsole (或其他任何 JMX-compliant 用戶端) 時,考量重複使用透過 Application Server 啟動程序檔啟動的標準 JMX 連接器伺服器。

伺服器啟動後,server.log 中會顯示與下行類似的文字。您可連接至其中指定的 JMXService URL,並在成功提供憑證之後執行相同的管理/配置作業,例如:


[#|2004-11-24T17:49:08.203-0800|INFO|sun-appserver-ee8.1|
javax.enterprise.system.tools.admin|_ThreadID=10;|ADM1501: 
Here is the JMXServiceURL for the JMXConnectorServer: 
[service:jmx:rmi:///jndi/rmi://hostname:8686/management/
rmi-jmx-connector]. This is where the remote administrative 
clients should connect using the JSR 160 JMX Connectors.|#]

.asadmintruststore 檔案未在文件中說明 (6315957)

說明

在文件中未說明 .asadmintruststore 檔案。如果伺服器管理員的 home 目錄中不存在此檔案,則升級在此伺服器上代管的某些應用程式時,可能會遇到嚴重錯誤。

解決方案

叢集實例由於連接 JMS 代理程式逾時而無法啟動 (6523663)

說明

Communications Server 叢集實例的預設 MQ 整合模式為 LOCAL。當 Communications Server 的安裝位置 (PATH) 很長 (顯示為「not short」) 時,imqbrokerscv.exe 便會在叢集實例啟動時當機。此問題屬於 imqbrokersvc 中的記憶體分配問題。

解決方案

叢集實例的 JMS 服務類型必須從預設的 LOCAL 變更為 REMOTE。在此配置中,所有實例都指回 DAS 代理程式。請依照以下說明在 REMOTE 模式中配置叢集。


備註 –

當使用 REMOTE 模式時,所有實例均使用一個代理程式 (DAS),因此在 Communications Server 叢集啟動時,不會建立任何代理程式叢集。如需詳細資訊,請參閱 http://www.glassfishwiki.org/gfwiki/attach/OnePagersOrFunctionalSpecs/as-mq-integration-gfv2.txt 單頁短文第 4.1 節第 iii 點的「自動叢集」。上述功能將無法使用!


Procedure使用指令行

開始之前

依據您的環境修改連接埠與密碼檔案。請注意,在以下說明中,叢集名稱為 racluster,DAS 管理連接埠為 5858,DAS JMS 連接埠為 7676

  1. 修改叢集配置,將 JMS 類型變更為 REMOTE


    as-install/bin/asadmin.bat set --port 5858 --user admin --passwordfile \
    as-install/bin/password_file racluster.jms-service.type=REMOTE
  2. 建立與 DAS JMS 主機對應的 JMS 主機。


    as-install/bin/asadmin.bat create-jms-host --port 5858 --user admin --passwordfile \
    as-install/bin/password_file --target racluster --mqhost localhost --mqport 7676 \
    --mquser admin --mqpassword admin dashost
  3. 將預設 JMS 主機設定為在上一步驟中建立的 DAS JMS 主機。


    as-install/bin/asadmin.bat set --port 5858 --user admin --passwordfile \
    as-install/bin/password_file racluster.jms-service.default-jms-host=dashost

Procedure使用管理 GUI

  1. 移至 [配置] -> [cluster-name-config] -> [Java 訊息服務] -> [JMS 主機]。

  2. 按一下 [新增] 以建立新的 JMS 主機,將其命名為 dashost

  3. 輸入與 DAS 的 JMS 服務對應的配置設定,預設設定如下所示︰

    • 主機名稱:localhost

    • 連接埠︰ 7676

    • 管理使用者︰ admin

    • 密碼︰ admin

    依據您 DAS JMS 服務的需要修改上述設定。

  4. 瀏覽回 [Java 訊息服務] 標籤,然後將 JMS 服務類型變更為 REMOTE (預設為 LOCAL)。

  5. 從 [default-jms-host] 下拉式清單中選擇 [dashost]。

  6. 儲存變更,然後啟動節點代理程式或叢集。

無法在 Netscape 8.1.3、Mozilla 1.7 和 Safari 2.0.4 等瀏覽器中顯示 jmaki 圖表 (6543014)

說明

當嘗試使用某些不支援的瀏覽器顯示 [記錄統計監視] 頁面中的圖表時,可能會丟出以下錯誤︰


Error loading jmaki.widgets.jmaki.charting.line.Widget : id=form1:jmaki_chart11
Script: http://easqelx5.red.iplanet.com:4848/resources/jmaki/charting/ \
line/component.js (line:5437).
Message: area.initialize is not a function

解決方案

使用支援的瀏覽器。請參閱瀏覽器,以取得 Communications Server 支援的瀏覽器清單。

在 AIX 中使用自訂主密碼執行 create-domain 指令失敗 (6628170)

說明

在 AIX 作業系統上,嘗試使用自訂主密碼建立網域失敗,同時會顯示以下錯誤:


keytool error (likely untranslated): java.lang.NullPointerException
 Enter keystore password:  New keystore password:

應用程式用戶端

本節介紹已知的應用程式用戶端問題以及相關的解決方案。

應用程式用戶端歸檔中封裝的程式庫 JAR 會置換清單檔案 (6193556)

說明

如果您在用戶端 JAR 內部具有頂層的 JAR 檔案 (這種情況下,為 reporter.jar),當您部署用戶端 JAR 時,該 JAR 的可取得的檔案將置換用戶端 JAR 的可取得的檔案。

解決方案

目前尚無解決方案。

ACC 一直嘗試連線至 localhost:3700 (6527987)

說明

應用程式用戶端始終嘗試連線至 localhost:3700。問題在於呼叫用戶端程式碼之前,需要讀取數個系統特性。

解決方案

將以下內容設定為系統特性 (-D 位於 JAVA_CMD 中)。請在應用程式用戶端程式碼中設定它們︰


org.omg.CORBA.ORBInitialHost = server-instance-host
org.omg.CORBA.ORBInitialPort = server-instance-port

ASQuickStartup 中斷了 SocketChannel.keyFor(),傳回空值,而非 SelectionKey (問題追蹤代碼 3027)

說明

在數個選擇器上註冊 SocketChannel 時,執行 socketChannel.keyFor(lastRegisteredSelector) 會傳回 Null,而非 SelectionKey

解決方案

此問題與 JDK 錯誤 6562829 相關,預計在 6.0 U3 中修正。Communications Server 中已經提供了解決方法,以便在呼叫 keyFor API 之前展開選擇器。這樣,將繼續使用 keyFor,直至修正了 JDK 錯誤。

隨附的 Sun JDBC 驅動程式

本節介紹已知的附帶的 Sun JDBC驅動程式問題以及相關的解決方案。

PreparedStatement 錯誤 (6170432)

描述 1

如果應用程式在一個作業事件中產生 3000 個以上 PreparedStatement 物件,DB2 可能會遇到以下錯誤︰

[sunm][DB2 JDBC Driver] No more available statements. Please recreate your package with a larger dynamicSections value.

解決方法 1

將以下特性增加到連線區定義中,以使用更大的動態區段值來使驅動程式重新連結 DB2 封裝︰

createDefaultPackage=true replacePackage=true dynamicSections=1000

描述 2

與上述 PrepardStatement 錯誤相關,可能丟出其他錯誤訊息:

[sunm][DB2 JDBC Driver][DB2]Virtual storage or database resource is not available.

解決方法 2

增大 DB2 伺服器配置參數 APPLHEAPSZ。合適的值為 4096

描述 3

隔離層級 TRANSACTION_SERIALIZABLE。如果應用程式使用隔離層級 TRANSACTION_SERIALIZABLE,並使用上述建議的參數之一,則應用程式在取得連線時可能會掛機。

解決方法 3

若要為連線設定所需的隔離層級,必須在此隔離層級建立相應的連線區。

Java DB 不會在重新啟動機器或啟動 Application Server 之後啟動 (6515124)

說明

隨附的 Java DB 資料庫不會在重新啟動主機系統或 Solaris 區域,或啟動 Communications Server 之後自動重新啟動。這不是錯誤,而是所有隨附應用程式或協力廠商應用程式的預期運作方式。問題在於 Java DB 必須在 Communications Server 實例之前啟動。

解決方案

重新啟動主機電腦或 Solaris 區域之後,務必在啟動 Communications Server 之前啟動 Java DB,例如︰


/opt/SUNWappserver/appserver/bin/asadmin start-database

部署

有時在叢集上進行自動部署會失敗 (6610527)

說明

在已配置為支援叢集的網域中,時序問題有時會造成自動部署失敗。不支援叢集的網域尚未發生此問題。

解決方案

使用以下解決方案之一:

JSP 編譯未使用應用程式專用類別載入器 (6693246)

說明

JSP 編譯未使用應用程式專用類別載入器 (applibs 或 --libraries)。因此參照這些 JAR 的 JSP 將無法進行編譯。

解決方案

無已知解決方案。

說明文件

本節說明已知的文件問題以及相關的解決方案。

Javadoc 不一致 (不同的 ID)

用於多個 AMX 介面與方法的 Javadoc 缺漏或不正確:

隨附的 ANT 丟出 java.lang.NoClassDefFoundError (6265624)

說明

在「主」執行緒中丟出以下異常 java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher

解決方案

不建議將隨附的 ANT 用於 Communications Server 以外的軟體。

EJB

無法在 HandlerChain 中使用資源注入 (6750245)

說明

由於 EJB 初始化的順序,導致無法在 HandlerChain 中使用資源注入。

解決方案

無已知解決方案。

Java EE Tutorial

當使用 [管理主控台] 建立任何資源時,請使用 [目標] 標籤將伺服器指定為目標。如果使用指令行或 asant 目標,則伺服器為預設目標,無需其他動作。

Java 持續性

TopLink 預期 Collection 欄位/特性可複製 ( 代碼 556)

說明

如果使用 java.util.Arrays.asList() API 將 Object[] 轉換為 Collection,JDK 便會傳回不可複製的 java.util.ArrayList 之實作。這樣會導致出現以下異常︰


The method invocation of the method [protected native java.lang.Object 
java.lang.Object.clone() throws java.lang.CloneNotSupportedException] on the object 
[[pkg.A id = xxx]], of class [class java.util.Arrays$ArrayList], triggered an 
exception. Internal Exception: java.lang.reflect.InvocationTargetException Target 
Invocation Exception: java.lang.CloneNotSupportedException: 
java.util.Arrays$ArrayList

此問題將以 https://glassfish.dev.java.net/issues/show_bug.cgi?id=556 持續追蹤。

解決方案

使用其建構子建立另一集合;例如︰


myCollection = new ArrayList(java.util.Arrays.asList(a))

GenerationType.IDENTITY 和 DataDirect 驅動程式搭配 SyBase (問題追蹤代碼 2431)

說明

將 DataDirect 驅動程式與 SyBase 配合使用時,嘗試插入使用 GenerationType.IDENTITY 的實體會失敗。失敗的原因在於 DataDirect 驅動程式會為參數化預備陳述式建立已儲存程序。

解決方案

domain.xml 檔案中,設定對應資料來源的特性 PrepareMethod=direct

生命週期管理

本節說明已知的生命週期管理問題以及相關的解決方案。

設定 ejb-timer-service 特性導致 set 指令失敗 (6193449)

說明

ejb-timer-service 特性 minimum-delivery-interval 設定為 9000 之後,嘗試將 ejb-timer-service 特性 redelivery-interval-in-mills 設定為 7000 的行為會導致 set 指令失敗,並出現以下錯誤︰


[echo] Doing admin task set
[exec] [Attribute(id=redelivery-interval-internal-in-millis) : 
Redelivery-Interval (7,000) 
should be greater than or equal to Minimum-delivery-interval-
in-millis (9,000)]
[exec] CLI137 Command set failed.

問題在於,將重新傳送間隔特性與最小傳送特性相聯繫的邏輯不正確,並阻止您使用 GUI 或 CLI 設定任何最小傳送間隔大於重新傳送間隔的值。

minimum-delivery-interval-in-millis 的設定必須始終等於或高於 ejb-timer-service 特性 redelivery-interval-in-millis 的設定。問題在於,應用程式伺服器具有錯誤的驗證檢查可驗證 redelivery-interval-in-millis 的值是否大於 minimum-delivery-interval-in-millis 的值。

解決方案

使用這些特性的預設值,如下所示:


minimum-delivery-interval(default)=7000
redelivery-interval-in-millis(default)=5000

這些預設值以外的值將會產生錯誤。

當列出非 DAS 配置內的 JMS 實體目標時丟出錯誤 (6532532)

說明

如果您要嘗試檢視使用 default-config 的 JMS 實體目標,便會出現一則錯誤訊息。

解決方案

這是預期的運作方式。在 Communications Server 2.0 中,default-config 是配置資訊範本,因此無法針對 default-config 執行 JMS 作業 (如 listcreate)。但是,可以針對叢集或獨立實例的配置執行 JMS 作業。

僅適用於 Win2003︰非分頁池記憶體發生錯誤,中斷 tcp 堆疊和 richaccess 測試 (6575349)

說明

(僅適用於 Windows 2003) 執行豐富存取功能時,Windows 2003 系統上會出現記憶體錯誤。出現此問題是因為 Win32 非分頁池一直在增長,最終導致整個 TCP/IP 堆疊出現錯誤。一旦出現此故障,TCP/IP 堆疊便處於可回復狀態,復原它的唯一方式是重新啟動 Windows 2003 系統。

解決方法

有兩種解決方法可解決這個問題:

記錄

本節說明已知的記錄問題以及解決方案。

設定 access,failure 的除錯敘述導致 Application Server 啟動當機 (6180095)

說明

設定 JVM 的 java.security.debug 選項將會導致伺服器實例啟動因為死結而凍結;例如,在 domain.xml 中進行以下設定會導致該問題:


<jvm-options>-Djava.security.debug=access,failure</jvm-options>

解決方案

目前尚無解決方案。請避免設定此標幟。

Message Queue

本節說明已知的 Java Message Queue 問題以及相關的解決方案。

在與時間相關的特定情況下,JMS 重新連線無法成功完成 (6173308、6189645、6198481、6199510、6208728)

說明

在與時間相關的方案中重新連線失敗可能是由多個問題導致的。

解決方案

您可以透過以下方法解決這些問題:

如果 MQ 代理程式未啟動,則伺服器無法啟動 (6740797)

說明

如果您將 JMS 配置為 REMOTE,則 MQ 代理程式未啟動時,企業伺服器亦無法啟動。

解決方案

設定下列 JVM 選項,如下所示:com.sun.enterprise.jms.CONNECT_MQ_LAZILY=true。設定此 JVM 選項後,如果 MQ 代理程式未啟動,您可以啟動 Communications Server。然而,建議您在啟動伺服器之前啟動 MQ。

MQ 代理程式無法在帶有叢集設定檔的 Linux 上啟動 (6524871)

說明

在 Linux 系統上建立帶有叢集設定檔的網域之後,可能會遇到 java.lang.OutOfMemoryError: Java heap space 錯誤,由於 MQ 代理程式未啟動,伺服器實例也可能無法重新啟動。出現此狀況之後,系統便無法再回復。出現此問題是因為 /etc/hosts 檔案配置錯誤;具體的說,伺服器主機名稱將指向迴路位址 127.0.0.1

解決方案

依設計,MQ 代理程式叢集不能在網路裝置配置為指向迴路位址的情形下啟動。這不是錯誤。解決方案是確保 Communications Server 主機的 /etc/hosts 檔案不指向 127.0.0.1

在升級前載入 imqjmsra.jar 時,會產生舊類別與新類別不相符的情形 (6740794)

說明

應用程式伺服器啟動期間,伺服器會檢查 Message Queue 版本。如果 Message Queue 版本錯誤,伺服器會使用 imqjmsra.jar 升級。應用程式伺服器必須重新啟動才可使用此升級 JAR 及其類別。只有當 Message Queue 單獨升級時,或是單獨修補應用程式伺服器時,才會發生此情況。此情況的副作用是有時無法啟動應用程式伺服器。

解決方案

您需要將 Message Queue 與應用程式伺服器維持在同一修補層級,或重新啟動應用程式伺服器。

監視

本節介紹已知的監視問題和相關的解決方案。

有些 HTTP 服務監視統計不能提供有用的資訊,應該將其忽略 (6174518)

說明

檢視 HTTP 服務的某些元素的監視統計資料時,出現的某些值與目前值不相符,或始終為 0。具體的說,下列 HTTP 服務統計資料顯示的資訊並不適用於應用程式伺服器,應予以忽略:

解決方案

在以後的版本中,將移除這些監視,並由更適當的資訊取代。

從管理 UI 開啟 JNDI 瀏覽會在 server.log 中傾印大量異常 (6591734)

說明

從管理 GUI 開啟 JNDI 瀏覽器時,會丟出許多異常。

解決方案

目前尚無解決方案。

對於繁體中文、簡體中文和西班牙文,無法以 asadmin monitor 指令監視 JVM (7076)

說明

在繁體中文、簡體中文和西班牙文語言環境下執行 asadmin monitor --type jvm server 會發生異常狀況。

解決方案

請從【管理主控台】檢視 JVM 資訊,或在英文語言環境中執行 asadmin monitor 指令。

安全性

本節說明與 Communications Server 和 Web 應用程式安全性及憑證有關的已知問題和相關解決方案。

負荷過大時,SSL 分析藍本出現記憶體不足的錯誤 (JDK 6 問題 23)

說明

在負荷過大的情況下執行某些 SSL 分析藍本時,JDK6 Sun PKCS11 提供者中的 JDK 錯誤 (請參閱:https://jdk6.dev.java.net/issues/show_bug.cgi?id=23) 可能會導致出現記憶體不足的錯誤。

解決方案

如果您遇到此問題,請從 JRE 安裝內的 java.security 檔案中移除 sun.security.pkcs11.SunPKCS11 提供者。

SSL 終止未起作用 (6269102)

說明

SSL 終止無法正常工作;如果為 SSL 終止設定了負載平衡程式 (硬體),Communications Server 會在重新導向期間將協定從 https 變更為 http

解決方案

在硬體負載平衡器與 Communications Server 之間增加軟體負載平衡器。

SSL 出現通訊端連線錯誤 (6492477)

說明

由於 JVM 錯誤,在 HTTP 偵聽程式上將 security-enabled 設定為 true 時,某些 JDK 版本會出現錯誤問題。具體的說,重現此錯誤的步驟如下︰

  1. 在 HTTP 偵聽程式上,將 security-enabled 設定為 true


    <http-listener acceptor-threads="1" address="0.0.0.0" 
    blocking-enabled="false" default-virtual-server="server" enabled="true" 
    family="inet" id=" http-listener-1" port="8080" security-enabled="true" 
    server-name="" xpowered-by="true">
  2. 在 quicklook 測試結尾處加入停止網域的註釋。

  3. 執行 quicklook 測試。

  4. 檢查通訊埠的使用︰


    netstat -an | grep 8080

    下面顯示的是正在使用︰


    *.8080               *.*                0      0 49152      0 LISTEN
    *.8080               *.*                0      0 49152      0 BOUND

GlassFish 網站已經追蹤此問題,網址為:https://glassfish.dev.java.net/issues/show_bug.cgi?id=849

解決方案

升級到最新的 JDK 版本。

Web 容器

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

在 Windows 上使用 --precompilejsp=true 部署應用程式可能會鎖定應用程式中的 JAR 檔案,從而導致後面的取消部署或重新部署作業失敗 (5004315)

說明

如果您在 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 的 web.xml (包含空的 <load-on-startup> 元素) 部署 WAR (6172006)

說明

web.xml 中的選擇性 load-on-startup servlet 元素表示要載入相關的 servlet 並將其初始化為宣告該 servlet 的 Web 應用程式啟動的一部分。

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

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 頁面 (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 編譯的新程序。

Web 服務

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

在 JDK6 u4 b3 上 wscompile 失敗,並出現「package javax.xml.rpc does not exist」的訊息 (6638567)

說明

對於 JDK 6 Update 4,wscompile ant 作業會失敗。針對每個 JAX-RPC API 類別,會顯示下列錯誤訊息:


package package-name does not exist

解決方案

在執行 wscompile ant 作業之前,請確認在類別路徑中已指定 javaee.jar,而 j2ee.jar