本節描述 Sun GlassFish Enterprise Server v3 中的已知問題和解決方法 (如果有的話)。
[JDK_Issue] 因呼叫 setSoLinger 或 setReuseAddress 造成效能降級 (問題 7109)
[JDK_ISSUE] Richaccess:java.io.IOException: 來自 doSelect 的引數無效 (問題 8573)
網域的 /applications 目錄的檔案權限可能導致 NullProcessException (問題 6545)
[Open Installer] 在 Windows Vista 和 Windows 2008 中 [開始] 功能表未顯示,然後變成空白 (問題 5087)
在部署 specj 應用程式後,asadmin get --monitor=true "server.*" 會導致 I/O 錯誤 (問題 11163)
Java EE 6 Managed Bean 支援在使用 Java Web Start 啟動的應用程式用戶端中不可用 (問題 11257)
在帶有 Apple Java 實作的 Mac OS X 中呼叫 appclient 程序檔時出現警告訊息 (問題 8644)
內嵌說明和 CLI 線上手冊在 X-Powered-By 中列出不正確的 servlet 2.4 版 (問題 11011)
[Embedded] 在使用 uber-jar 時,包含 activation-1.1.jar 的應用程式部署失敗 (問題 11149)
在 passwordfile 中沒有 AS_ADMIN_USER 的情況下,create-service 無法在 Solaris 上建立服務 (問題 11119)
[Monitoring] connector-connection-pools 的附加監視檢視不可用 (問題 11256)
[EclipseLink] 可內嵌部分的 ElementCollections 的問題 (EclipseLink 問題 296606)
在 Windows Vista 和 Windows 7 中,安裝程式偶爾會在安裝進度為 41% 時當機 (問題 11185)
mysql 未列於 deploy 指令線上手冊內 --dbvendorname 中的支援資料庫清單中 (問題 11328)
在呼叫 setSoLinger 方法或 setReuseAddess 方法時,會出現效能降低並丟出下列異常:
[#|2009-01-26T00:33:56.325-0800|WARNING|sun-appserver9.1| javax.enterprise.system.container.web|_ThreadID=17; _ThreadName=SelectorReaderThread-8084; _RequestID=11ae0030-c392-4217-8408-cfa7efe0a879;|setSoLinger exception java.net.SocketException: Invalid argument |
此問題是由 JDK 軟體的問題所造成。該問題已在 JDK 7 版中解決。
如需更多資訊,請參閱問題報告。
無。
重新啟動 Enterprise Server 有時候會造成丟出空指標異常。
SEVERE: doSelect exception java.lang.NullPointerException |
此問題是由 JDK 軟體的問題所造成。該問題已在 JDK 7 版中解決。
如需更多資訊,請參閱問題報告。
無。
在 HTTP 壽命測試期間,執行 42 小時後會丟出下列異常:
[#|2009-04-05T17:41:26.537-0700|SEVERE|glassfish|javax.enterprise.system.core| _ThreadID=15;_ThreadName=Thread-1;|doSelect exception java.io.IOException: Invalid argument |
實例與應用程式在執行期間仍然可以存取。
此問題是由 JDK 軟體的問題所造成。該問題已在 JDK 7 版中解決。
如需更多資訊,請參閱問題報告。
無。
在啟動時,Enterprise Server 丟出空指標異常:
java.lang.NullPointerException at sun.nio.ch.Util.atBugLevel(Util.java:326) at sun.nio.ch.SelectorImpl.<init>(SelectorImpl.java:40) at sun.nio.ch.EPollSelectorImpl.<init>(EPollSelectorImpl.java:47) |
此問題與 Grizzly 有關,是 JDK 6 的問題。該問題已在 JDK 7 中解決。
如需更多資訊,請參閱問題報告。
無。Grizzly 嘗試解決這個問題但仍然可能失敗。
出現下列異常:
[#|2009-06-20T06:05:57.942-0700|SEVERE|glassfish| com.sun.grizzly.config.GrizzlyServiceListener| _ThreadID=21;_ThreadName=Thread-2;|doSelect IOException java.io.IOException: Invalid argument |
此為 JDK 問題,計畫將在 JDK 1.6.0_18 中解決。
如需更多資訊,請參閱問題報告。
將檔案描述元的最大數目增加為 10000 或以上 (在 Solaris 上的預設值為 64000)。一旦 JDK 1.6.0_18 可以使用,請即安裝。
如果網域的 /applications 目錄限制存取,或者您使用受限制目錄的目錄部署,伺服器將無法讀取展開目錄中的檔案。部署時發生 NullProcessException 錯誤。
如需更多資訊,請參閱問題報告。
變更此類目錄的檔案存取設定,以授予伺服器讀取目錄內容的權限。
無法讀取 time-stamp-install.log 檔案,因為會將寫入檔案中的所有行鏈結成單一長字串。
如需更多資訊,請參閱問題報告。
使用不同的編輯器,並手動開啟建立在 %TEMP% 目錄下的安裝記錄檔。
只有在重新啟動伺服器之後,才能監視有關新增虛擬伺服器的統計資料。
如需更多資訊,請參閱問題 6238 和 問題 6422 的報告。
新增虛擬伺服器之後,請重新啟動伺服器以檢視虛擬伺服器的監視資料。
在與選項 -a 和 -s 搭配使用時,用來遷移記錄檔的選項 -l 會被忽略,而記錄檔會建立在預設位置。
如需更多資訊,請參閱問題報告。
無。
在 Windows Vista 中啟用使用者帳戶控制 (User Account Control, UAC) 功能時,某些功能可能無法正常運作。其中一個例子便是管理主控台,它無法在上述情況下順利啟動。
如需更多資訊,請參閱問題報告。
停用 UAC 然後重新開機。
在啟用 GlassFish 訊息安全提供者的情況下測試 JAX-RPC Web 服務時,將會在伺服器記錄中丟出下列異常:
[#|2009-11-23T11:16:58.375+0005|SEVERE|glassfishv3.0| javax.enterprise.resource.webservices.rpc.server.http|_ThreadID=25;_ ThreadName=http-thread-pool-8080-(2);|caught throwable java.lang.RuntimeException: com.sun.enterprise.security.jauth.AuthException |
nonce 屬性的預設值無法正常工作。
如需更多資訊,請參閱問題報告。
若要在 JAX-RPC Web 服務中使用訊息安全,請停用配置中的 nonce 屬性。請參閱問題報告了解解決方法的完整步驟。
在完成初次安裝之後,未顯示 Enterprise Server 的 [開始] 功能表群組。如果您登出然後重新登入,功能表群組雖然會顯示,但卻是空白。
如需更多資訊,請參閱問題報告。
無。
指令 asadmin get -m "server.*" 傳回與該伺服器有關的所有監視資料。在部署許多應用程式時,資料的數量非常龐大,可能要花很長的時間才能傳回。用戶端可能逾時,並產生下列用戶端錯誤:
./asadmin get --monitor=true "server.*" I/O Error: Read timed out Command get failed. |
如需更多資訊,請參閱問題報告。
將要傳回至用戶端的資料數量減至最低。
執行 asadmin list -m "server.*" 指令,該指令可傳回頂層元素。
選取需要其詳細資料的頂層元素,並且用它作為篩選器。例如︰
> ./asadmin list -m "server.*" ... server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-cache server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods. create-int-int-[Lorg\.spec\.jappserver\.supplier\.helper\.ComponentOrder server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods. findByPrimaryKey-java\.lang\.Integer server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.generateXml server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.getEJBLocalHome ... >./asadmin get -m "server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.*" ... server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.remove. methodstatistic-name = MethodStatistic server.applications.SPECjAppServer.supplier\.jar.POEnt.bean-methods.remove. methodstatistic-starttime = 1259604209775 ... |
在安裝附加元件時,Solaris 上發生分段錯誤,使得以 updatetool 指令啟動的獨立更新工具失敗。
如需更多資訊,請參閱問題報告。
請確定您的系統符合 Update Center 版本說明 中定義的獨立更新工具修補程式需求。
管理主控台中的更新工具功能使用不同的以 Java 為基礎的 Update Center API,因此不受到此問題影響。
如果在環境根目錄「/」中部署 Ruby 應用程式,隨後存取管理主控台,則存取 Ruby 應用程式時會產生 404 錯誤。
如需更多資訊,請參閱問題報告。
無。
當使用 Java Web Start 啟動應用程式用戶端時,無法識別應用程式用戶端中任何 Managed Bean。
如需更多資訊,請參閱問題報告。
使用 appclient 程序檔啟動應用程式用戶端,便能夠正常支援應用程式用戶端中的 Managed Bean。
當您在已安裝 Apple Java 的 Mac OS X 系統中呼叫 appclient 程序檔時,下列的堆疊追蹤會出現兩次 (此處僅顯示前幾行):
Intentionally suppressing recursive invocation exception! java.lang.IllegalStateException: recursive invocation at java.lang.ClassLoader.initSystemClassLoader(ClassLoader.java:1394) at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1377) at sun.security.jca.ProviderConfig$1.run(ProviderConfig.java:64) ... |
如需更多資訊,請參閱問題報告。
不需要採取任何行動。
雖然有警告訊息,但是用戶端會順利啟動並正常執行。這些錯誤是由 Apple Java 實作中的問題所造成。
滿足下列所有情況時會發生問題:
應用程式為包含應用程式用戶端的 EAR。
EAR 是已部署的目錄。
EAR 包含應用程式用戶端模組 myAppClient.jar,而且因為它是目錄部署,已預先擴展為 myAppClient_jar。(基於此範例的目的,myApp 為 EAR 的名稱。此名稱可以是任何文字。)
嘗試啟動應用程式用戶端失敗,並出現下列錯誤,原因是在伺服器上產生的一個檔案放置在錯誤的伺服器目錄中,並且覆寫了另一個產生的檔案:
java.lang.ClassNotFoundException:(main-class-for-the-client) |
如需更多資訊,請參閱問題報告。
將應用程式用戶端的名稱變更為 myAppClient.jar 以外的名稱。具體而言是:
編輯 myApp/META-INF/application.xml,使得用戶端的宣告為 <java>myClient.jar</java>。請注意,您可以使用 myAppClient.jar 以外的任何名稱。
將目錄 myApp/myAppClient_jar 重新命名為 myApp/myClient_jar。請注意,用戶端的子目錄名稱必須和 application.xml 檔案中的應用程式用戶端 URI 相同,且將 .jar 取代為 _jar。
部署應用程式:
asadmin deploy --retrieve localdir myApp |
執行應用程式用戶端:
appclient -client localdir/myAppClient.jar |
在管理主控台的 [Logger Settings] 頁面的 [General] 標籤中對伺服器記錄值進行變更不會立即生效。
如需更多資訊,請參閱問題報告。
重新啟動伺服器。對於此頁中值的所有變更均需要重新啟動伺服器才能生效。
在圖形安裝程式之安裝過程結束時會顯示 [Summary] 頁面,無法透過點選該頁面上的連結來開啟安裝記錄檔。
如需更多資訊,請參閱問題報告。
手動存取檔案。安裝記錄和摘要檔案的名稱分別為 timestamp-install.log 和 timestamp-install-summary.html。在 Linux 和 Mac 系統中,這些檔案會在 $TMP 目錄下產生。
如果您使用相同預設值將 Enterprise Server (帶有更新工具) 重新安裝在相同的安裝目錄,然後使用 updatetool 指令呼叫更新工具,您會收到訊息,顯示未安裝更新工具並且詢問您是否要安裝。這個問題只在 Windows 系統上發生。
如需更多資訊,請參閱問題報告。
在解除安裝之後,先手動移除殘留的 .org* 目錄,然後再重新安裝。
在 Windows 和 Mac OS 系統中偶爾會出現此問題。在某些系統中,pkg(5) 有時候沒有作用。
如需更多資訊,請參閱 Update Center 問題報告。
無。
內嵌說明和 CLI 線上手冊在 X-Powered-By 欄位中列出 servlet 2.4。正確的版本為 servlet 3.0。
如需更多資訊,請參閱問題報告。
無。
在以 glassfish-embedded-all-3.0-b73.jar 內嵌使用時,部署失敗並出現下列錯誤:
SEVERE: WEB9051: Error trying to scan the classes at /private/var/folders/CV/CVhj8DvqEwGK5bdJKK9TaE TI/-Tmp- /gfembed6991712842235699248tmp/applications/xwiki-enterprise-web-2.0/ WEB-INF/lib/activation-1.1.jar for annotations in which a ServletContainerInitializer has expressed interest java.util.zip.ZipException: error in opening zip file |
發生此問題是由於內嵌使用帶有加號 (+) 的資料夾,而在解碼路徑時,路徑中的加號被轉換為空格字元「 」。
如需更多資訊,請參閱問題報告。
已增加系統屬性,讓您能夠放置暫存目錄。屬性為 glassfish.embedded.tmpdir 而且可以設定,使得暫存網域目錄不會放置在使用者目錄中。
在 passwordfile 中沒有 AS_ADMIN_USER 的情況下,create-service 無法在 Solaris 上建立服務。
如需更多資訊,請參閱問題報告。
無。
Enterprise Server 使用樹狀結構追蹤可監視物件。在該樹狀結構中,無法使用下列檢視取得連線儲存池統計資料:
server.connector-service.resource-adapter-name .connection-pool-name .* 或 server.jms-service.connection-factories. connection-factory-name.* (針對 jms-ra 相關儲存池)。
如需更多資訊,請參閱問題報告。
使用 server.resources.* 檢視獲得統計資料。
如需更多有關監視的資訊,請參閱「Sun GlassFish Enterprise Server v3 Administration Guide」中的第 8 章「Administering the Monitoring Service」。
在啟用織入 (weaving) 的情況下,更新可內嵌元素集合有可能會丟出空指標異常。
如需更多資訊,請參閱 EclipseLink 問題報告。
解決方法有兩個:
在可內嵌元素集合上加入附註 @ChangeTracking(DEFFERED) 並且將屬性 eclipselink.weaving.internal 設定為 false,或
在持續性 XML 中將下列屬性設定為 false:eclipselink.weaving.changetracking 和 eclipselink.weaving.internal。
在啟動網域並存取 localhost:4848 之後,伺服器記錄中會出現下列訊息:
[#|2009-11-27T16:21:57.091+1100|INFO|glassfishv3.0| javax.enterprise.system.container.web.com.sun.enterprise.web| _ThreadID=20;_ThreadName=Thread-1;|Created virtual server server|#] |
[#|2009-11-27T16:21:57.091+1100|INFO|glassfishv3.0| javax.enterprise.system.container.web.com.sun.enterprise.web| _ThreadID=20;_ThreadName=Thread-20;|Created virtual server server|#] |
這些訊息讓人感覺虛擬伺服器 server 啟動了兩次。實際情況並非如此。虛擬伺服器僅啟動一次,但是記錄了多次訊息。
如需更多資訊,請參閱問題報告。
無。
由於伺服器的訊息有限,因此除錯 JPA 較為困難。
如需更多資訊,請參閱問題報告。
將屬性 org.eclipse.persistence.session.level=INFO 增加至 logging.properties 檔案。接著您可以使用管理主控台來控制 EclipseLink 記錄器。
當目標 EJB 位於相同的主機 (其他 Enterprise Server 網域或其他 Enterprise Server v3 實例) 時,遠端 EJB 的 EJB 互通功能失敗。
如需更多資訊,請參閱問題報告。
在 jvm-options 中設定下列屬性:
-Dorg.glassfish.orb.iiop.orbserverid=:
在 Windows Vista 和 Windows 7 中安裝時,Enterprise Server 圖形安裝程式會在安裝至 41% 時當機。這個情況並非每次安裝都會發生。
如需更多資訊,請參閱問題報告。
這個問題與 Windows Vista 和 Windows 7 中預設啟用的自動調整功能有關。
如果您在最初安裝 Enterprise Server 時,或是在增加套裝軟體或套用更新時發生當機,請限制或停用自動調整功能。
根據預設,Enterprise Server 上 JMS 服務的預設主機名稱為 localhost。然而,要從其他系統存取 JMS 服務,您必須變更主機名稱。您可以將它變更為實際的主機名稱或變更為 0.0.0.0。
如需更多資訊,請參閱問題報告。
要進行變更,請執行下列其中一項動作:
使用管理主控台:展開 [配置]、[Java Message Service] 和 [JMS Hosts] 節點,選取 default_JMS_host,然後編輯 [Host] 欄位,或
使用 asadmin 子指令,如下所示:
asadmin set server-config.jms-service.jms-host.default_JMS_host.host="0.0.0.0" ,或
asadmin set server-config.jms-service.jms-host.default_JMS_host.host="hostname"
使用圖形安裝程式安裝 Enterprise Server 時,雖然能夠成功完成安裝,但是只有頂層的 GlassFish v3 項目會增加至 Windows 系統功能表中,而且此功能表為空。在本土化和英文版的安裝程式中都會發生此問題。
如需更多資訊,請參閱問題報告。
無。
mysql 未列於 deploy 指令線上手冊內 --dbvendorname 中的支援資料庫清單中。這不正確。MySQL 是支援的資料庫,其中應該列出。
如需更多資訊,請參閱問題報告。
無。
ACC 期望目前執行緒的環境類別載入器是 ACCClassLoader。這一限制過嚴。雖然 appclient 程序檔與 Java Web Start 啟動符合此條件,但是內嵌式功能可能不符合此條件。ACC 內部的其他功能要求類別載入器是 URLClassLoader (或 URLClassLoader 之子類別的實例),但載入器不需要是 ACCClassLoader。
如需更多資訊,請參閱問題報告。
解決方法有兩個:
設定 -Djava.system.class.loader=org.glassfish.appclient.client.acc.ACCClassLoader,或者
在 Java 程式中,將 ACCClassLoader 實例化,並且在使用內嵌式 ACC 類別及介面之前,使用 Thread.currentThread().setContextClassLoader 將它設定為目前執行緒的環境類別載入器。
能夠以使用者身份在 MySQL 中建立和儲存 EJB 計時器,但是,在嘗試為 MySQL 配置 EJB 計時器服務時,出現下列異常 (SQLException 執行敘述):
"CREATE TABLE EJB__TIMER__TBL (TIMERID VARCHAR(255) NOT NULL, BLOB BLOB(64000), INITIALEXPIRATIONRAW BIGINT, SCHEDULE VARCHAR(255), INTERVALDURATION BIGINT, OWNERID VARCHAR(255), STATE INTEGER, LASTEXPIRATIONRAW BIGINT, PKHASHCODE INTEGER, CREATIONTIMERAW BIGINT, CONTAINERID BIGINT, PRIMARY KEY (TIMERID))": com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BLOB BLOB(64000), INITIALEXPIRATIONRAW BIGINT, SCHEDULE VARCHAR(255), INTERVALDU' at line 1|#] |
如需更多資訊,請參閱問題報告。
確定為計時器集區指定的 datasource-classname 代表 XA DataSource。
MySQL 特定步驟:
解壓縮 glassfishv3/glassfish/lib/install/applications/ejb-timer-service-app.war。
將下列內容增加至 WEB-INF/classes/__ejb_timer_mappings.xml 中的 <persistence-unit-metadata> 之後:
<persistence-unit-defaults> <delimited-identifiers/> </persistence-unit-defaults>
重新封裝 WEB-INF/classes/__ejb_timer_mappings.xml 檔案。
(只有在目前安裝已使用 EJB 計時器服務時,才需要此步驟。)使用此 create 陳述式,在資料庫中手動建立 EJB__TIMER__TBL:
CREATE TABLE `EJB__TIMER__TBL` (`TIMERID` VARCHAR(255) NOT NULL, `BLOB` BLOB(64000), `INITIALEXPIRATIONRAW` BIGINT, `SCHEDULE` VARCHAR(255), `INTERVALDURATION` BIGINT, `OWNERID` VARCHAR(255), `STATE` INTEGER, `LASTEXPIRATIONRAW` BIGINT, `PKHASHCODE` INTEGER, `CREATIONTIMERAW` BIGINT, `CONTAINERID` BIGINT, PRIMARY KEY (`TIMERID`))
除非使用 --secure 選項,否則 deploy 子指令會因安全伺服器而失敗。
如需更多資訊,請參閱問題報告。
對安全伺服器發出 deploy 子指令時,使用 --secure 選項。
Enterprise Server 信任清單存放區的其中一個權限憑證於 2010 年 1 月 7 日過期。該憑證為 cacerts.jks。啟動時產生錯誤訊息,指示憑證已過期:
Version: V1 Subject: OU=Secure Server Certification Authority, O="RSA Data Security, Inc.", C=US Signature Algorithm: MD2withRSA, OID = 1.2.840.113549.1.1.2 Key: SunPKCS11-Solaris RSA public key, 1000 bits (id 17891456, session object) modulus: public exponent: Validity: [From: Tue Nov 08 19:00:00 GMT-05:00 1994, To: Thu Jan 07 18:59:59 GMT-05:00 2010] Issuer: OU=Secure Server Certification Authority, O="RSA Data Security, Inc.", C=US SerialNumber: [ 02ad667e 4e45fe5e 576f3c98 195eddc0] |
如需更多資訊,請參閱問題報告。
Java SE 6 的更新 18 中已移除過期的權限憑證。未來的更新也將從 Enterprise Server 信任清單存放區中移除它。
您可以忽略該錯誤訊息並使用更新,也可以清除該錯誤訊息。若要停止收到錯誤訊息,請使用金鑰工具,從 Enterprise Server 信任清單存放區中移除憑證:
=> cd domains/domainX/config => cp cacerts.jks cacerts.jks.save => keytool -delete -keystore cacerts.jks -alias verisignserverca Enter keystore password: |
若要避免在後續建立的網域中再次出現過期的憑證,也應該從範本信任清單存放區中移除該憑證:
=> cd glassfish/lib/templates => cp cacerts.jks cacerts.jks.save => keytool -delete -keystore cacerts.jks -alias verisignserverca Enter keystore password: |
如需有關金鑰庫密碼的更多資訊,請參閱「Sun GlassFish Enterprise Server v3 Administration Guide」中的「Authentication」中關於主要密碼及金鑰庫的資訊。