Sun GlassFish Enterprise Server 2.1 版本說明

第 3 章 已知問題和限制

本章說明 Sun GlassFish Enterprise Server 2.1 軟體的已知問題以及相關的解決方法。如果摘要敘述未指明特定的平台,則所有平台都可能出現此問題。

這些資訊按以下章節進行分類:

管理

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

獨立實例有時會從其他實例取得檔案 (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.

解決方案

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

無法針對 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";
 };

如果 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,則每次建立新網域時均必須執行此作業。

不支援同時啟動伺服器和其他 JMX 代理程式 (6200011)

說明

在伺服器上可以配置 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 特性並啟動伺服器之後,會在 Virtual Machine 上啟動新的 jmx-connector 伺服器。這一過程的不良副作用是會對管理功能造成不利影響,並且管理主控台和指令行介面可能會產生未預期的結果。問題在於在內建 jmx-connector 伺服器和新的 jmx-connector 伺服器之間存在某些衝突。

解決方案

如果使用 jconsole (或任何其他與 JMX 相容的用戶端),請考慮重新使用在 Server 啟動時一起啟動的標準 JMX Connector Server。

伺服器啟動後,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.|#]

如需更多資訊,請參閱「「Sun GlassFish Enterprise Server 2.1 Administration Guide」」。

您不能使用任何 Web 服務的端點 URL 建立負載平衡器配置檔案 (6236544、6275436)

說明

在使用包含可匯出 Web 服務 URL 之 EJB 模組的應用程式來設定負載平衡器配置時,此 Web 服務的環境根目錄不包含在所產生的 loadbalancer.xml 檔案中。

解決方案

  1. 編輯 loadbalancer.xml 檔案,按照以下所示增加缺少的 Web 模組:


    <web-module context-root="context-root-name"
    disable-timeout-in-minutes="30" enabled="true"/>
  2. 使用顯示為 EJB 的 Web 服務的環境根目錄名稱替代 context-root-name 值。

.asadmintruststore 檔案未在 Enterprise Server 文件中介紹 (6315957)

說明

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

解決方案

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

說明

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

解決方案

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


備註 –

當使用 REMOTE 模式時,所有實例均使用一個代理程式 (DAS),因此在 Enterprise 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

解決方案

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

預設連接埠在每個 AS 重大發行版本中都有所變更 (6566481)

說明

預設管理連接埠在過去的三個重大 Enterprise Server 發行版本中均不相同。具體的說,7.x、8.x 和 9.x 中的預設管理連接埠分別為︰

解決方案

這不是錯誤,但也是一個值得注意的問題。預設管理連接埠只是一個建議使用的連接埠。預期未來的 Enterprise Server 發行版本將保留預設的 4848 連接埠。

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

說明

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


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

Procedure解決方案:(AIX) 使用自訂主密碼建立網域


備註 –

在接下來的程序中,只會提供每個步驟所需的選項。如果您需要指令的其他選項,請在指令中指定這些選項。如需有關 Enterprise Server 指令的資訊,請參閱「「Sun GlassFish Enterprise Server 2.1 Reference Manual」」。


  1. 建立包含以下程式碼的 shell 程序檔:

    #!/bin/sh
    changeKeystorePass() {
      keytool -storepasswd -keystore ${KEYSTORE} -storepass ${OLD} -new ${NEW}
    }
    changeTruststorePass() {
      keytool -storepasswd -keystore ${TRUSTSTORE} -storepass ${OLD} -new ${NEW}
    }
    changeKeyPass() {
      keytool -keypasswd -alias s1as -keystore ${KEYSTORE} -storepass ${NEW} -keypass ${OLD} -new ${NEW}
    }
    changeDomainPasswordEntry() {
      keytool -storepasswd -storetype JCEKS -keystore ${DOMAINPASSWORDS} -storepass ${OLD} -new ${NEW}
    }
    deleteMasterPasswordFile() {
      if [ -f ${DOMAIN_PATH}/master-password ] ; then
        echo Deleting ${DOMAIN_PATH}/master-password
        rm -f ${DOMAIN_PATH}/master-password
      fi
    }
    DOMAIN_PATH=$1
    OLD=$2
    NEW=$3
    if [ $# != 3 ] ; then
      echo Usage: $0 domain-path old-master-pass new-master-pass
      exit 1
    fi
    echo Processing ...
    if [ ! -f ${DOMAIN_PATH}/config/domain.xml ] ; then
      echo "Domain with folder ${DOMAIN_PATH} does not exist, create it first"
      exit 2
    else
      KEYSTORE=${DOMAIN_PATH}/config/keystore.jks
      TRUSTSTORE=${DOMAIN_PATH}/config/cacerts.jks
      DOMAINPASSWORDS=${DOMAIN_PATH}/config/domain-passwords
      changeKeystorePass
      changeTruststorePass
      changeKeyPass
      changeDomainPasswordEntry
      deleteMasterPasswordFile
    fi
  2. 建立網域,並指定預設主密碼。


    aadmin create-domain {--adminport aminportno|--portbase portbase} domain-name
    Please enter the admin user name>admin-user
    Please enter the admin password>admin-user-password
    Please enter the admin password again>admin-user-password
    Please enter the master password [Enter to accept the default]:>
    Please enter the master password again [Enter to accept the default]:>

    預設主密碼為 changeit

  3. 變更剛建立之網域的主密碼。

    若要變更主密碼,請執行您在「步驟 1」中所建立的程序檔。


    script-name domain-path old-password new-password
    
  4. 啟動您在「步驟 2」中所建立的網域。


    asadmin start-domain domain-name
    

    由於網域具有自訂主密碼,所以系統會提示您輸入主密碼。

  5. 若要回應提示,請鍵入新的主密碼。

  6. 對於已配置為支援叢集的網域,請建立並啟動節點代理程式。

    1. 為您在「步驟 2」中所建立的網域建立節點代理程式。


      asadmin create-node-agent --port portno --user admin-user
      
    2. 啟動您在「步驟 a」中所建立的節點代理程式。


      asadmin start-node-agent
      

      由於網域具有自訂主密碼,所以系統會提示您輸入主密碼。

    3. 若要回應提示,請鍵入新的主密碼。

另請參閱

以下 Enterprise Server 線上手冊:

AIX:0403-027 參數清單太長 (6625591)

說明

在 AIX 作業系統上,某些與作業系統相關的作業可能會失敗,同時顯示以下錯誤:


0403-027 The parameter list is too long

與作業系統相關的作業範例,包括部署應用程式或執行應用程式用戶端容器。

這個問題的起因通常是 CLASSPATH 環境變數中的檔案路徑太長。

解決方案

使用以下解決方案之一:

Procedure(AIX) 增加指令行的最大長度

ncargs 屬性決定指令行的最大長度,其中包括環境變數。在 AIX 作業系統上,ncargs 屬性的預設值為 4 個 4 KB 區段。為確保 Enterprise Server 指令不會超過指令行的最大長度,請將此值增加至 16 個 4 KB 區段。


備註 –

變更完 ncargs 屬性的值後,不須重新啟動或更新常駐程式。


  1. 判定 ncargs 屬性的值。


    lsattr -EH -l sys0 | grep ncargs
    
  2. 如果 ncargs 屬性的值小於 16 個 4 KB 區段,請將此值增加至 16。


    chdev -l sys0 -a ncargs=16
    

Apache 和負載平衡器外掛程式

本節說明 Apache Web Sever 和負載平衡器外掛程式的已知問題和相關解決方案。

以 Web 服務形式部署具 EJB 的 Java EE 應用程式時,負載平衡外掛程式未擷取資訊 (問題 685)

說明

使用以 Servlet 為基礎的 Web 服務部署任何 WAR (或 EAR) 時,HTTP 負載平衡器會獲得 Web 服務的更新資訊。部署以 EJB 為基礎的 Web 服務時,不會更新 HTTP 負載平衡器的配置以反映新物件。

解決方案

將這些環境根目錄手動新增到負載平衡器配置檔案 (loadbalancer.xml) 中。不過,動態重新配置負載平衡器配置 (使用自動套用功能) 時,會失去較舊的手動編輯內容。

從 DAS 關閉自動套用功能,並改用手動匯出功能來編輯負載平衡器配置,並將其套用至 Web 伺服器。

「高可用性管理指南」未說明如何在 Apache 2.0 中使用憑證 (6307976)

若要執行 Apache 安全性,必須使用憑證。如需從憑證授權單位取得憑證的說明,請參閱 modssl FAQ 中有關憑證的資訊。

必須以超級使用者身份啟動 Apache Web Server (6308021)

在 Solaris 上,如果已將 Application Server 安裝在根目錄下,則必須以超級使用者的身份啟動 Apache Web Server。以超級使用者的身份安裝 Java Enterprise System。以超級使用者的身份啟動 Apache 2.0 後,Apache 會切換為您定義的其他使用者並執行。您在 /conf/httpd.conf 檔案中定義了該使用者。若要以超級使用者的身份啟動,則在許多系統上均必須編輯 httpd.conf 檔案,以指定正確的群組。將行:

Group #-1

替代為

Group nobody

有關使用者/群組用法的更多資訊包含在 httpd.conf 檔案中。

應用程式用戶端

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

應用程式用戶端歸檔中封裝的程式庫 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

無法啟動網域,缺少 sunpkcs11.jar (6571044)

說明

在 64 位元 Linux 上執行時,啟動網域時會出現以下異常。問題在於 jdk1.5.0_11/jre/lib/ext/ 下缺少 sunpkcs11.jar

解決方案

這是 64 位元 Linux 上的已知 JDK 錯誤,將在 JDK 1.5.0_13 中進行修正。

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

說明

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

解決方案

此問題與 JDK 錯誤 6562829 相關,預計在 6.0 U3 中修正。Enterprise Server 2.1 中已經提供了解決方法,以便在呼叫 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

如需有關配置連線池的詳細資訊,請參閱「「Sun GlassFish Enterprise Server 2.1 Administration Guide」」。

描述 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

若要為連線設定所需的隔離層級,必須在此隔離層級建立相應的連線區。如需相關說明,請參閱「「Sun GlassFish Enterprise Server 2.1 Administration Guide」」。

機器重新開機或伺服器啟動後,Java DB 並沒有啟動 (6515124)

說明

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

解決方案

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


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

如需有關 asadmin 指令選項的更多資訊,請參閱「Sun GlassFish Enterprise Server 2.1 Quick Start Guide」中的「Administration Tools」「Sun GlassFish Enterprise Server 2.1 Quick Start Guide」

部署

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

說明

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

解決方案

使用以下解決方案之一:

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

說明

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

解決方案

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

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

說明

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

解決方案

無已知解決方案。

說明文件

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

Javadoc 不一致 (不同的 ID)

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

EJB

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

說明

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

解決方案

無已知解決方案。

全球化

必須保留英文的 yes/no,以便在韓文環境中進行 cli 安裝(6892)

說明

我們必須保留英文的 yes/no,以便在韓文環境中進行 cli 安裝,因為這可讓本機使用者輕鬆輸入。

解決方案

當 cli 提示 yes/no 問題時,使用者可以輸入韓文字元

SuSE 10 需要 CJK 支援(6416177)

說明

在 SuSE10 上所有 CJK 語言環境可用的情況下,CJK 文字影像全都會顯示成空白方塊。

解決方案

請針對 SuSE 10 在 C 語言環境中執行軟體安裝程式和 CLI 指令

填寫 Sun 線上帳號資訊時,只能使用拉丁文字元(6704238)

說明

當使用者在安裝結束後嘗試建立新的 Sun 線上帳號時,無法輸入多位元組字元的名字和姓氏。

解決方案

使用者可以輸入英文名稱來註冊 Sun 線上帳號。

在 cli 中,jvm 監視器丟出異常(7076)

說明

安裝軟體並加以啟動,然後執行「asadmin monitor --type jvm server」會收到異常狀況。

解決方案

使用者可在 C 語言環境中啟動軟體,以使該功能正常運作

高可用性

本節說明已知的高可用性資料庫 (HADB) 問題以及相關的解決方案。

負載平衡器外掛程式運作狀態檢查在背景產生大量連線/中斷連線 (負載) (6453946)

說明

負載平衡器外掛程式運作狀態檢查在背景產生大量連線/中斷連線 (負載)。為了執行運作狀況檢查,runDaemonMonitor 執行緒會針對每個應用程式伺服器偵聽程式執行連線/中斷連線。這樣可能導致 Enterprise Server 上出現連線飽和的狀況。

解決方案

已為 loadbalancer.xml 檔案開發新屬性 monitor-interval-in-seconds。若已為負載平衡器外掛程式配置數百個偵聽程式,則可利用此屬性在連線/中斷連線事件之間插入暫停。預設暫停值為 0。

具有雙網路的 HADB 配置 (無 ID)

在兩個子網路上配置為具有雙網路的 HADB,在 Solaris SPARC 上工作正常。然而,我們發現由於作業系統的問題或同一硬體平台上的網路驅動程式,Solaris x86 與 Linux 平台並不總能正確處理雙網路。這將引起 HADB 的以下問題:

HADB 資料庫建立失敗 (無 ID)

說明

建立新資料庫可能失敗並顯示以下錯誤,表示可用的共用記憶體區段不足:

HADB-E-21054: System resource is unavailable: HADB-S-05512: Attaching shared memory segment with key "xxxxx" failed, OS status=24 OS error message: Too many open files.

解決方案

驗證是否已配置共用記憶體,以及配置是否能夠正常工作。尤其,在 Solaris 8 上,檢視檔案 /etc/system,並檢查變數 shmsys: shminfo_shmseg 的值是否至少為每個主機上節點數目的六倍。

hadbm set 不會檢查資源可用性 (磁碟與記憶體空間) (5091280)

說明

當使用 hadbm set 增加裝置或緩衝區大小時,管理系統會在建立資料庫或增加節點時檢查資源可用性,但不會在裝置或主記憶體緩衝區大小變更時檢查是否有足夠的可用資源。

解決方案

增加任何 devicesizebuffersize 配置屬性之前,驗證所有的主機上是否有足夠的可用磁碟/記憶體空間。

不支援 packagepath 的異質性路徑 (5091349)

說明

不可能在不同主機的不同位置使用相同名稱註冊同一套裝軟體,例如:


hadbm registerpackage test --packagepath=/var/install1 --hosts europa11
Package successfully registered.
hadbm registerpackage test --packagepath=/var/install2 --hosts europa12
hadbm:Error 22171: A software package has already been registered with 
the package name test.

解決方案

HADB 不支援資料庫叢集中跨節點的不同路徑。請確定 HADB 伺服器安裝目錄 (--packagepath) 在所有參與的主機上均相同。

hadbm createdomain 可能失敗 (6173886、6253132)

說明

當在具有多個網路介面的主機上執行管理代理程式時,如果部分網路介面不在同一個子網路中,則 createdomain 指令可能失敗:


hadbm:Error 22020: The management agents could not establish a 
domain, please check that the hosts can communicate with UDP multicast.

管理代理程式將 (如果未另行配置) 使用「第一個」介面進行 UDP 多重播送 (由 java.net.NetworkInterface.getNetworkInterfaces() 的結果定義「第一個」為何)。

解決方案

最佳解決方案是告訴管理代理程式要使用的子網路 (在配置檔案中設定 ma.server.mainternal.interfaces,例如 ma.server.mainternal.interfaces=10.11.100.0)。另一種方法是,將子網路間的路由器配置為路由多重播送資料封包 (管理代理程式使用多重播送位址 228.8.8.8)。

嘗試管理代理程式的新配置之前,您必須清除管理代理程式儲存庫。停止網域中的所有代理程式,並刪除儲存庫目錄 (透過管理代理程式配置檔案中的 repository.dr.path 所指定) 中的所有檔案與目錄。必須先在所有主機上完成此作業,方可使用新配置檔案重新啟動代理程式。

啟動、停止和重新配置 HADB 可能會失敗或當機 (6230792、6230415)

說明

在 Solaris 10 作業系統上,使用 hadbm 指令啟動、停止或重新配置 HADB 可能會失敗或當機,並顯示下列錯誤之一:


hadbm:Error 22009: The command issued had no progress in the last 
300 seconds.
HADB-E-21070: The operation did not complete within the time limit, 
but has not been cancelled and may complete at a later time.

當讀取/寫入 clu_noman_srv 程序使用的檔案 (nomandevice) 不一致時,可能發生此情況。可透過在 HADB 歷史檔案中尋找以下訊息來偵測此問題:


n:3 NSUP INF 2005-02-11 18:00:33.844 p:731 Child process noman3 733 
does not respond.
n:3 NSUP INF 2005-02-11 18:00:33.844 p:731 Have not heard from it in 
104.537454 sec.
n:3 NSUP INF 2005-02-11 18:00:33.844 p:731 Child process noman3 733 
did not start.

解決方案

由於無法手動再現此問題,因此下列的解決方法尚未經過驗證。但是,對受影響的節點執行此指令應該可以解決此問題。


hadbm restartnode --level=clear nodeno dbname

請注意,該節點的所有裝置均會被重新初始化。重新初始化之前,您可能必須停止節點。

管理代理程式終止,並顯示異常 "IPV6_MULTICAST_IF 失敗" (6232140)

說明

在安裝了數張 NIC 卡並執行 Solaris 8 的主機上啟動時,如果混插啟用 IPv6 和啟用 IPv4 的卡,則會終止管理代理程式,並出現異常「IPV6_MULTICAST_IF 失敗」。

解決方案

將環境變數 JAVA_OPTIONS 設定為 -Djava.net.preferIPv4Stack=true,例如:


export JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true"

或者,使用 Solaris 9 或更新的版本,其不會出現此問題。

clu_trans_srv 無法中斷 (6249685)

說明

64 位元版本的 Red Hat Enterprise Linux 3.0 有一個錯誤,使得 clu_trans_srv 程序在執行非同步 I/O 時進入無法中斷的模式。這表示強制結束 -9 不起作用,必須重新啟動作業系統。

解決方案

使用 32 位元版本的 Red Hat Enterprise Linux 3.0。

hadbm 不支援包含大寫字母的密碼 (6262824)

說明

將密碼儲存在 hadb 中時,密碼中的大寫字母會被轉換為小寫字母。

解決方案

不使用含有大寫字母的密碼。

從 HADB 版本 4.4.2.5 降級至 HADB 版本 4.4.1.7 會導致管理代理程式失敗,並顯示不同的錯誤代碼 (6265419)

說明

當降級至舊的 HADB 版本時,管理代理程式可能會失敗,並顯示不同錯誤代碼。

解決方案

雖然可以降級 HADB 資料庫,但是如果已變更了儲存庫物件,則管理代理程式可能無法降級。降級後,必須使用最新版的 HADB 中的管理代理程式。

安裝/移除與 symlink 保留 (6271063)

說明

關於安裝/移除 HADB c 套裝軟體 (Solaris: SUNWhadbc,Linux: sun-hadb-c) 版本 <m.n.u-p>symlink /opt/SUNWhadb/<m> 自建立後將永遠不會變更。因此,可能存在孤立的 symlink

解決方案

如果不使用,請在安裝之前或解除安裝之後刪除 symlink

全域區域和本機區域中的管理代理程式可能會衝突 (6273681)

說明

在 Solaris 10 上,使用 ma-initd 程序檔停止全域區域中的管理代理程式時,也會停止本機區域中的管理代理程式。

解決方案

不同時在全域區域和本機區域中安裝管理代理程式。

當階段作業物件在 MA 處逾時並刪除時,hadbm/ma 應該顯示更準確的錯誤訊息 (6275103)

說明

有時,伺服器上的資源競爭狀態問題可能會導致管理用戶端連線中斷。重新連線後,可能會傳回不正確的錯誤訊息 "hadbm: Error 22184: A password is required to connect to the management agent"

解決方案

有時,伺服器上的資源競爭狀態問題可能會導致管理用戶端連線中斷。重新連線後,可能會傳回不正確的錯誤訊息 "hadbm: Error 22184: A password is required to connect to the management agent"

檢查該伺服器上是否存在資源問題,並採取適當措施 (例如,增加更多資源),然後重試該作業。

非超級使用者不能管理 HADB (6275319)

說明

使用 Java Enterprise System (以超級使用者的身份) 安裝 HADB 後不允許非超級使用者管理 。

解決方案

始終以超級使用者身份登入以管理 HADB。

管理代理程式不應該使用特殊用途的介面 (6293912)

說明

不應將包含 0.0.0.0 之類 IP 位址的具有特殊用途的介面註冊為管理代理程式中的 HADB 節點所使用的有效介面。如果透過使用者使用主機名稱而非 IP 位址發出 hadbm create 指令,在此類介面上設定 HADB 節點,則註冊此類介面可能會導致問題發生。之後節點將無法通訊,並導致 create 指令掛機。

解決方案

當在包含多重介面的主機上使用 hadbm create 時,請始終使用 DDN 表示法明確指定 IP 位址。

在 Windows 上出現重新組合故障 (6291562)

說明

在 Windows 平台上,由於某些配置和負載,作業系統中可能會出現大量的重新組合故障。在具有多於二十個節點的配置平行執行數個表掃描 (select *) 時,曾發生此問題。此問題表現為作業事件頻繁中斷、修復或回復需較長時間才能完成,以及多種系統零件可能會頻繁逾時。

解決方案

若要修正此問題,可將 Windows 登錄變數 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 設定為大於預設值 100 的值。建議您將此值提高到 0x1000 (4096)。如需更多資訊,請參閱 Microsoft 支援網頁的文章 811003

如果瀏覽器的另一個 Cookie 帶有 / 路徑,則無法維護階段作業狀態 (6553415)

說明

Cookie 的路徑如果等於「/」,則與高可用性 Web 應用程式 (使用記憶體中複製做為持續性類型) 部署在「/」以外環境根目錄中的 Cookie 相衝突,使得高可用性 Web 應用程式無法保留任何 HTTP 階段作業狀態。當使用同一個瀏覽器同時存取管理 GUI (在「/」中部署) 和高可用性 Web 應用程式時,通常會發生這種狀況。

解決方案

使用其他瀏覽器存取在「/」中部署的 Web 應用程式。

負載平衡器無法與 IIS 6 配合使用;as-install/lib 下缺少 SASL32.DLLZLIB.DLL (6572184)

說明

負載平衡器必須有 SASL32.DLLZLIB.DLL 檔案,才能搭配 Windows IIS 6。這些檔案目前不在 as-install/lib 中。

解決方案

手動將兩個 DLL 檔案複製到 as-install/lib。可以從以下位置下載這兩個檔案︰


http://download.java.net/javaee5/external/OS/aslb/jars/

其中 OS 表示所需的平台,它可以是以下任何一個值:

全域區域中存在 DAS 建立/啟動和 HA 套裝軟體傳遞問題 (6573511)

說明

在全域區域中透過高可用性套裝軟體安裝或解除安裝 Enterprise Server 時,會出現兩個問題︰

  1. HA 套裝軟體會安裝在所有區域中 ,但執行者不一定希望如此。

  2. 當解除安裝時,所有區域的 HA、MQ、JDK 等套裝軟體也會遭到移除,執行者也不一定希望如此。

從本機根區域中執行安裝或解除安裝動作時,便不會出現此問題。

解決方案

從本機根區域而非全域區域執行安裝和解除安裝。

在「/」中部署的高可用性 Web 應用程式無法繼續記憶體中複製的 HTTP 階段作業 (問題追蹤代碼 2972)

說明

當「/」中部署的高可用性 Web 應用程式使用記憶體中複製做為其持續性類型時,它們無法維護任何 HTTP 階段作業。

解決方案

將使用記憶體中複製做為其持續性類型的高可用性 Web 應用程式部署到「/」以外的環境根目錄中。如果您要使此類 Web 應用程式位於「/」下,應該將其指定為部署了 Web 應用程式之虛擬伺服器的預設 Web 模組。

AS 負載平衡器安裝程式未將 /usr/lib/mps 路徑置於 apachectl LD_LIBRARY_PATH 下,因此無法啟動 Apache SSL (6591878)

說明

在 Solaris 上安裝適用於 Apache 的 Enterprise Server 負載平衡程式時,安裝程式將更新 apachectl 程序檔中的 LD_LIBRARY_PATH。但是,安裝程式不會正確地寫入 /usr/lib/mps 路徑。在 Solaris 上,如果此路徑不在 LD_LIBRARY_PATH 下,Apache 安全性實例便不會啟動。

解決方案

此問題只在 Solaris 平台上存在。若要解決此問題,請將 /opt/SUNWappserver/appserver/lib/lbplugin/lib 增加至 LD_LIBRARY_PATH

針對實例/叢集啟用/停用負載平衡器應該顯示正確的狀態 (6595113)

說明

在 [叢集/實例] 一般頁面上,無論 domain.xml 中儲存何種內容,[啟用負載平衡] 按鈕始終處於啟用狀態。

解決方案

AS9.1 EE IFR b58f/JES5 UR1。無法安裝 Registry Server,因為偵測到「未完成的」HA(6602508)。

說明

(僅適用於 Solaris) 在帶有 HADB 的 SPARC Solaris 10 上安裝 Enterprise Server 2.1 之後,啟動 Enterprise Server 並嘗試安裝帶有 Registry Server 的 JES 5 UR 1 時可能顯示以下錯誤︰


Dependency Error:  Installation can not proceed because the version of HA
Session Store 4.4.3 detected on this host is incomplete , and a compatible
version is required by Servervice Registry Deployment Support.

解決方案

在 Solaris 機器上,不能使用 Enterprise Server 2.1 IFR 從 JES 5 UR1 安裝 Registry Server。Registry Server 套裝軟體必須使用 pkgadd 指令從以下 JES5 UR1 發行目錄手動安裝︰


path/OS/Products/registry-svr/Packages

Internet Explorer 6.0/7.0 瀏覽器特有的問題︰匯出負載平衡器配置檔案時丟出錯誤 (6516068)

說明

(僅適用於 Internet Explorer 6 與 7) 當嘗試從 Internet Explorer 6 或 7 匯出負載平衡器配置檔案 (loadbalancer.xml) 時,瀏覽器顯示錯誤訊息,表示無法找到 sun-loadbalancer_1_2.dtd DTD 檔案。

解決方案

若要儲存該檔案,請使用以下解決方案︰

  1. 在 Internet Explorer 中的 [負載平衡器] 頁面上,按一下 [匯出]

    將顯示「無法顯示 XML 頁面」訊息。

  2. 按一下錯誤訊框,然後在 Internet Explorer 中選擇 [檔案] -> [另存新檔]

  3. loadbalancer.xml 檔案儲存到您選擇的目錄。

安裝

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

Enterprise Server 安裝程式在 Linux 上當機 (6739013)

說明

執行 Linux 的系統將環境變數 MALLOC_CHECK_ 設定為 2 時會出現此問題。

解決方案

將環境變數 MALLOC_CHECK_ 設定為 0。執行 export 指令,如下所示:


export MALLOC_CHECK_

在某些 Linux 系統上,按一下 [完成] 按鈕之後,安裝關閉會當機 (5009728)

說明

已在多個 Linux 系統中發現此問題。此問題在 Java Desktop System 2 中最為常見,也見於 Linux Red Hat 發行軟體中。

在最後的安裝程式螢幕上按一下 [完成] 按鈕之後,安裝程式無法啟動包含產品 [關於] 頁面或產品註冊頁面的瀏覽器視窗,且無限期當機,並不返回指令提示。

解決方案

在啟動安裝程式的終端機視窗中按下 Ctrl+C 以結束安裝程式。執行完此步驟後,有時會啟動包含產品 [關於] 頁面或註冊頁面的瀏覽器視窗,但如果未顯示該視窗,請啟動瀏覽器並輸入以下 URL 以檢視 [關於] 頁面:


file://as-install/docs-ee/about.html

如果您還選取安裝選項以註冊產品,請使用產品 [關於] 頁面上的連結進入註冊頁面。

在 Windows 上,imq 目錄需要在安裝期間建立 (6199697)

說明

在 Windows 上,安裝一經完成,Message Queue 代理程式便會在啟動時失敗,並顯示訊息表明 drive:\as\domains\domain1\imq 目錄不存在。

請注意,如果在啟動 domain1 之後啟動此代理程式,則 Application Server 會建立此目錄並且不會發生此問題。

解決方案

  1. 在建立代理程式前建立 var_home_dir_location


    $imqbrokerd -varhome var_home_dir_location
    

    例如︰


    $imqbrokerd -varhome D:\as\domains\domain1\imq

解除安裝不會正確更新 productregistry 檔案,無法使用無訊息模式進行安裝 (6571598)

說明

如果 Enterprise Server productregistry 檔案包含共用元件配置,Enterprise Server 解除安裝程序便不會正確更新 productregistry 檔案,且您將無法在後續的安裝中使用無訊息模式,除非重新命名或移除 productregistry 檔案。依設計,productregistry 檔案中的共用元件項目保持完整,但是會導致與後續無訊息安裝混淆。

解決方案

解除安裝記錄檔回報解除安裝成功完成之後,請在執行後續安裝之前刪除 productregistry 檔案。若要驗證之前的解除安裝是否已成功完成,請在 as-install 中尋找 appserv_uninstall.class 檔案。如果解除安裝成功完成,此檔案便存在。


備註 –

如果解除安裝未成功完成,請勿刪除 productregistry


productregistry 檔案在 Solaris 上位於 /var/sadm/install 中;在 Linux 上位於 /var/tmp 中。

IFR 無法在稀疏本機區域中安裝 AS,這是 MQ 套裝軟體的問題 (6555578)。

說明

在稀疏本機區域中安裝 Enterprise Server 時,如果未事先安裝 Message Queue (MQ),此安裝便會失敗。安裝程式嘗試安裝 MQ,然後整個安裝失敗。

解決方案

在稀疏本機區域中安裝 Enterprise Server 之前,必須在全域區域中手動安裝 MQ。有兩種方法來解決此問題︰

  1. 在全域區域中從 Enterprise Server 2.1 IFR 安裝所在的媒體手動安裝 MQ 4.1,以取得最新版本的 MQ 套裝軟體。

    1. 使用與您的平台對應的安裝程式︰


      mq4_1-installer-SunOS.zip
      mq4_1-installer-SunOS_X86.zip
      mq4_1-installer-Linux_X86.zip
      mq4_1-installer-WINNT.zip
    2. 解壓縮位元,然後執行安裝程式。

      安裝程式位於 mq4_1-installer 目錄中。

  2. 在全域區域中安裝 IFR 安裝元件。此動作會檢查全域區域中 MQ 的版本,必要時會升級為 Enterprise Server 2.1 IFR 中隨附的版本。均等選取並安裝範例應用程式元件可將 MQ 升級到 IFR 版本。

    1. 在全域區域中執行 Enterprise Server 安裝,但是僅選取範例元件。

      安裝範例元件會導致在所有區域中安裝 MQ 和 Enterprise Server 共用元件。

    2. 再次執行 Enterprise Server 安裝,這次是在本機稀疏區域中進行。

      安裝將順利完成,不會出現任何問題。

必須移除 IFR 安裝 -console 提示:「Do you want to upgrade from previous Application?」(6592454)

說明

使用 —console 選項 (指令行模式) 執行 Enterprise Server 2.1 IFR 安裝程式時,系統會提示您:


Do you want to upgrade from previous Application Server version?

但是,IFR 安裝程式不支援此類升級,因此該提示是錯誤的。如果您針對此提示回答「是」,安裝會正常繼續,但不會指明是執行了完整安裝,而非升級。

解決方案

如果您要升級 Enterprise Server 安裝,請使用升級工具。

升級後,您將會於網域啟動時在記錄中看到下列異常 (6774663)。

說明

可能會丟出下列異常:

#|2008-11-19T01:44:37.422+0530|SEVERE|sun-appserver9.1|org.apache.catalina.session.ManagerBase|_ThreadID=17;_ThreadName=pool-1-thread-3;_Req uestID=cc0ddf54-a42e-400a-9788-e30d79a25d88;|PWC2768: IOException while loading persisted sessions: java.io.InvalidClassException: org.apache .catalina.session.StandardSession; local class incompatible: stream classdesc serialVersionUID = 8647852380089530442, local class serialVersi onUID = -8515037662877107054 java.io.InvalidClassException: org.apache.catalina.session.StandardSession; local class incompatible: stream classdesc serialVersionUID = 864 7852380089530442, local class serialVersionUID = -8515037662877107054..... .....

解決方案

升級完成及升級網域啟動後,可以忽略這些異常 (如果發生的話)。

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 實體目標,便會出現一則錯誤訊息。

解決方案

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

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

說明

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

解決方法

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

記錄

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

設定 access,failure 的除錯敘述導致伺服器啟動當機 (6180095)

說明

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


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

解決方案

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

Message Queue

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

如果 MQ 代理程式未啟動,則 Enterprise Server 無法啟動 (6740797)

說明

如果您將 JMS 配置為 REMOTE,則 MQ 代理程式未啟動時,Enterprise Server 亦無法啟動。

解決方案

無已知解決方案。配置 JMS 以在 EMBEDDED 模式下使用。

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

說明

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

解決方案

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

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

說明

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

解決方案

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

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

說明

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

解決方案

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

監視

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

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

說明

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

解決方案

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

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

說明

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

解決方案

目前尚無解決方案。

封裝

本節說明 Enterprise Server 2.1 產品軟體程式碼封裝的相關已知問題及對應解決方案。

AIX:monitor 指令在 AIX 上無法運作 (6655731)

說明

monitor 指令不能在 AIX 作業系統上執行,因為 Enterprise Server 2.1 中未封裝 libcliutil.so 程式庫檔案。

Procedure解決方案:安裝缺少的 libcliutil.so 程式庫檔案

  1. 下載 JAR 檔案。

  2. 將目錄變更為下載的 appserv-native-9.1.1-b16a.jar 檔案所在目錄。


    prompt% cd destination-dir
    
  3. 擷取 appserv-native-9.1.1-b16a.jar 檔案的內容。


    prompt% jar xf appserv-native-9.1.1-b16a.jar
    
  4. libcliutil.so 檔案複製到 as-install/lib 目錄。


    prompt% cp libcliutil.so as-install/lib
    

範例

本節說明 Enterprise Server 2.1 產品內附程式碼範例的相關已知問題及對應解決方案。

升級 Enterprise Server 之後,範例與 JES5 入口網站範例爭用 Derby 連接埠 1527 (6574563)

說明

在 Windows 上,升級到 Enterprise Server 2.1 之後,範例與 JES 5 入口網站範例會爭用 Derby 連接埠 1527。具體的說,Enterprise Server 2.1 會在具有 APP:APP 的連接埠 0.0.0.0:1527 上自動啟動 JavaDB,但是,JES5 Portal JavaDB 希望連結到具有 portal:portalhostnameIP:1527

此錯誤說明 JES 5 已經出現的問題,亦即錯誤 6472173。錯誤 6472173 的解決方法記錄在「Sun Java Enterprise System 5 Installation Guide for Microsoft Windows」中,網址是:http://docs.sun.com。

解決方案

使用以下指令啟動 Derby 資料庫︰


JES-installation-dir\appserver\bin\asadmin start-database --dbhome JES-installation-dir\portal\data\derby

安全性

本節說明與 Enterprise 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 提供者。

AIX:因為伺服器端認證驗證錯誤,WSS 動態加密金鑰測試失敗 (6627379)

說明

在 AIX 平台上,針對回應的加密金鑰判定所進行的動態加密會失敗。此失敗發生在伺服器端憑證的驗證期間。

以下錯誤訊息會寫入至伺服器記錄檔 server.log,以回應此失敗:


Unable to validate certificate

Error occurred while resolving key information
com.sun.xml.wss.impl.WssSoapFaultException: Certificate validation failed

解決方案

在 Enterprise Server 2.1 上安裝 Metro 1.1

AIX:在 EJB 模組授權測試中使用 @RunAs 失敗 AccessLocalException: 無法授權用戶端 (6627385)

說明

在企業 Bean (其執行身份或傳遞的安全性驗證身份是使用 @RunAs 附註所定義) 中的方法嘗試要呼叫另一個企業 Bean 中的方法。如果 sun-ejb-jar.xml 部署描述元檔案中沒有定義任何 run-as 主體,則嘗試可能會失敗,並會顯示 javax.ejb.AccessLocalException 異常。


javax.ejb.AccessLocalException: Client not authorized for this invocation.

解決方案

sun-ejb-jar.xml 部署描述元檔案中,將指定 run-as 角色的主體名稱定義在 principal-name 元素中。

SSL 終止未起作用 (6269102)

說明

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

解決方案

在硬體負載平衡器與 Enterprise 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 版本。

升級公用程式

本節介紹已知的升級公用程式問題和相關的解決方案。

在某些 Linux 系統上,按一下 [啟動升級精靈] 按鈕之後,執行「現地升級」的安裝程式無法啟動升級工具 (6207337)

說明

此問題已在多個 Linux 系統中發現,在 Java Desktop System 2 中最常見,但也見於 Red Hat 發行軟體中。

在最終的安裝程式螢幕上按一下 [啟動升級工具] 按鈕之後,安裝程式無法啟動升級工具以完成升級程序,且無限期當機,並不返回指令提示。

解決方案

如果使用指令行安裝模式現地執行升級,則不會遇到此問題。

  1. 如果在 GUI 模式中現地執行升級並遇到此問題,請在啟動安裝程式的終端機視窗中按下 Ctrl+C,以退出安裝程式。

  2. 使用以下指令從終端機視窗中啟動升級工具:


    as-install/bin/asupgrade --source as-install/domains --target 
    as-install --adminuser adminuser --adminpassword adminpassword 
    --masterpassword changeit

    adminuseradminpassword 應符合用於要升級之安裝的值。

  3. 當升級工具完成升級程序後,您還可以啟動瀏覽器並輸入以下 URL 以檢視 [關於] 頁面:


    file://as-install/docs-ee/about.html

如果您還選取安裝選項以註冊產品,請使用產品 [關於] 頁面上的連結進入註冊頁面。

自我簽署憑證在從 8.0 Platform Edition (PE) 到 8.1 Enterprise Edition (EE) UR2 的升級期間和升級之後均不受信任 (6296105)

解決方案

從目標 domain.xml 中移除以下項目 (升級後),然後重新啟動伺服器:

<jvm-options>-Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}
/config/keystore.jks</jvm-options>-
<jvm-options>Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}
/config/cacerts.jks</jvm-options>

(sbs-manual、sbs-installer) 丟出「伺服器實例,伺服器沒有名為 null 的系統連接器」的錯誤 (6545145)

說明

從 Enterprise Server 8.0PE 升級到 2.1 時,將丟出錯誤,指出伺服器沒有名為 null 的系統連接器,以及如 sbs-manual 中所見的無效使用者資訊。即使在變更程序內定值之後,也會出現相同的錯誤訊息。

解決方案

只有在從 8.0 PE 升級到 Enterprise Server 時,您才會遇到此錯誤。解決方法是升級到 8.1、8.2 或 9.0,然後再升級至 Enterprise Server。

使用不同的建置組合時,不同的網域會在升級期間遺失 (6546130)

說明

執行現地升級時,如果來源中具有多個網域,則即使終止程序,安裝程式也會呼叫升級工具。在 GUI 模式中進行呼叫時會出現這種狀況。

解決方案

  1. 以 CLI 模式進行現地安裝,在安裝程序結束時,安裝程式會提示您選取升級工具。請在此時結束。這樣便不會刪除網域目錄中的任何網域。應該從 bin 目錄手動呼叫升級工具。

  2. 以 GUI 模式進行現地安裝時,請對網域根目錄中的網域進行備份,防止在過程中遺失任何網域。在安裝程序結束時,安裝程式會提示您呼叫升級工具,請在此時結束。如果有任何網域遺失,請將備份網域複製到網域目錄。手動啟動升級工具以執行升級。

Solaris︰升級工具中預先填入的主密碼來自 Enterprise Server 2.1,而非 AS8.2 (6565825)

說明

從 AS 8.2 升級時,目標安裝不會繼承來自 8.2 安裝中的主密碼。這樣,會在下一次管理登入時導致認證錯誤。

解決方案

Enterprise Server 2.1 中的預設管理密碼為 changeit。從 8.2 升級之後,為了避免在登入 Enterprise Server 時出現問題,請從以下三個步驟擇一執行︰

不存在已本土化的 asupgrade GUI 線上說明 (6610170)

說明

在非英文語言中執行 asupgrade GUI 時,沒有針對所選取非英文語言的 GUI 線上說明進行本土化。

解決方案

目前尚無解決方案。已排定將線上說明本土化為所有非英文目標語言。

在具有多個網域情況下進行升級 (反向順序) 時,升級工具會刪除 nodeagents 目錄 (6636871)

說明

在同時升級含有多個網域的配置之後,只有最後處理之網域的節點代理程式會存在。此問題起因於每次升級工具處理網域時,都會移除目標中的 nodeagents 目錄,再重新建立該目錄。

Procedure解決方案:在同時升級多個網域時保留所有節點代理程式

  1. 處理完每個網域之後,建立 nodeagents 目錄的壓縮檔。

  2. 當所有網域都處理完成後,將所建立的檔案解壓縮。

    現在所有的節點代理程式都應該存在。

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

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

說明

Sun GlassFish Enterprise Server 2.1 新增支援 Sun GlassFish Enterprise Server Enterprise Edition 7.1 上 auth-passthrough 外掛程式功能所提供的功能。但是在 Enterprise Server 2.1 中,auth-passthrough 外掛程式功能的配置不同。

Enterprise 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 允許在代理應用程式伺服器實例上配置 auth-passthrough 外掛程式功能,以使該實例上部署的所有應用程式都能直接取得遠端用戶端的資訊;猶如代理應用程式伺服器實例直接收到請求一樣,而非透過執行 service-passthrough 外掛程式的中間 Web 伺服器接收。

在 Enterprise Server 2.1 中,將 domain.xml<http-service> 元素的 authPassthroughEnabled 特性設定為 TRUE 即可啟用auth-passthrough 功能,如下所示:


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

Application Server Enterprise Edition 7.1 中 auth-passthrough 外掛程式功能的相同安全性注意事項,也適用於 Enterprise Server 2.1 中的 authPassthroughEnabled 特性。由於 authPassthroughEnabled 能夠置換可以用於認證的資訊 (例如發出請求的 IP 位址或 SSL 用戶端憑證),因此必須只在 authPassthroughEnabled 設定為 TRUE 的情況下,允許信任的用戶端或伺服器連線至 Enterprise Server 2.1 實例。作為預警措施,建議您應僅將公司防火牆後的伺服器的 authPassthroughEnabled 設定為 TRUE。可透過網際網路存取的伺服器永遠不能將 authPassthroughEnabled 設定為 TRUE。

請注意,若是將代理 Web 伺服器配置成使用 service-passthrough 外掛程式,同時將 authPassthroughEnabled 設定為 TRUE 以便將請求轉寄至 Enterprise Server 實例的情形,則可在 Web 代理伺服器上啟用 SSL 用戶端認證功能,並在代理的 Enterprise Server 實例上停用此功能。在此情況下,代理 Enterprise Server 實例仍會將請求視為已透過 SSL 進行認證,並將用戶端的 SSL 憑證提供給請求此憑證的所有已部署應用程式。

Web 伺服器

AS 9.1 b50e.Linux。無法在安裝 AS 負載平衡器之後啟動 WS:libjvm.so:cannot open shared (6572654)

說明

僅在 Linux 系統上將 Sun GlassFish Web Server 與 Enterprise Server 以及負載平衡器配合使用時,才出現此問題。在此情況下,安裝完 Enterprise Server 和負載平衡程式之後,可能無法啟動 Web Server,因為 libicui18n.so.2libicuuc.so.2 相衝突。這些程式庫位於 /opt/sun/private/lib/opt/sun/appserver/lib 中。

解決方案

要使用的正確程式庫只能位於 /opt/sun/appserver/lib 中,因為 lbplugin 是依據這些程式庫建置的。一旦從 /opt/sun/private/lib 移除這兩個程式庫之後,Web Server 便會正常啟動,不會出現任何錯誤。

或者,如果您不想刪除 /opt/sun/private/lib 中的程式庫,可以在 Web Server startserv 程序檔的 LD_LIBRARY_PATH 中,將 /opt/sun/appserver/lib 置於 /opt/sun/private/lib 之前;亦即將︰


# Add instance-specific information to LD_LIBRARY_PATH for Solaris and Linux
LD_LIBRARY_PATH="${SERVER_LIB_PATH}:${SERVER_JVM_LIBPATH}:${LD_LIBRARY_PATH}:
/opt/sun/appserver/lib:/opt/sun/appserver/lbplugin/lib"; export LD_LIBRARY_PATH 

替代為:


# Add instance-specific information to LD_LIBRARY_PATH for Solaris and Linux
LD_LIBRARY_PATH="/opt/sun/appserver/lib:/opt/sun/appserver/lbplugin/lib:
${SERVER_LIB_PATH}:${SERVER_JVM_LIBPATH}:${LD_LIBRARY_PATH}"; export LD_LIBRARY_PATH

Web 服務

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

Ant 作業 wsimport 無法用於 Java EE SDK b33d (使用 JDK 1.6),出現 NoClassDefFoundError (6527842)

說明

使用 Java EE SDK b33d 內附的 JDK 1.6 執行 JAX-WS 測試時,可能會遇到問題。測試會立即中斷,並顯示下列訊息:


[wsimport] Exception in thread "main" java.lang.NoClassDefFoundError: \
com/sun/tools/ws/WsImport

即使 webservices-tools.jar 不包含 com/sun/tools/ws/WsImport.classcom/sun/tools/ws/ant/WsImport.classcom/sun/tools/ws/ant/WsImport2.class,也會出現此錯誤。而且,使用 1.5.0-10 JDK 時,相同的測試工作區便會正常工作,不出現任何問題。

解決方案

在執行 JAX-WS 測試之前,將 webservices-api.jar 複製到 $JAVA_HOME/jre/lib/endorsed

publish-to-registry 指令在 IFR EE 建置中無法使用 (6602046)

說明

JAXR 使用 SAAJ 將 SOAP 訊息傳送至登錄。在非 IFR 情況下,SAAJ impl 類別位於 lib/webservices-rt.jar 下。在 IFR 情況下,SAAJ 類別仍位於 lib/webservices-rt.jar 下。此外,saaj-impl.jar 位於 /usr/share/lib 目錄中。此 jar 檔案由 Enterprise Server 挑選,其優先順序高於 webservices-rt.jar 中的類別。此 jar 檔案不具有將 SOAP 訊息傳送至 Web 服務登錄所需的必要安全性許可權。應該將封裝修改為將權限授予 /usr/share/lib 目錄下的 jar,或者修改為不依賴 /usr/share/lib jar。

解決方案

server.policy 檔案增加以下內容︰


grant codeBase "file:/usr/share/lib/saaj-impl.jar" {
   permission java.security.AllPermission;
};

在 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