版本 4.1
文件號碼 820-3194
這些版本說明包含 Sun Java™ System Message Queue 4.1 發行時所提供的重要資訊。其中包括新增功能和增強功能、已知的問題與限制以及其他資訊。開始使用 Message Queue 之前,請先閱讀此文件。這些版本說明也包含有關 Message Queue 4.0 版的資訊;請參閱關於 Message Queue 4.0,以取得有關該發行版本所推出之功能的資訊。
您可以在 Sun Java System Message Queue 文件網站找到此版本說明的最新版本。請在安裝與設定軟體之前瀏覽此網站,並定期檢視最新版本說明與產品文件。
此版本說明包含下列各節︰
本文件中提供了協力廠商 URL 以供參考,另亦提供其他相關的資訊。
Sun 對本文件中提到的協力廠商網站的可用性不承擔任何責任。Sun 對於此類網站或資源中的 (或透過它們所取得的) 任何內容、廣告、產品或其他材料不做背書,也不承擔任何責任。對於因使用或依靠此類網站或資源中的 (或透過它們所取得的) 任何內容、產品或服務而造成的或連帶產生的實際或名義上之損壞或損失,Sun 概不負責,也不承擔任何責任。
下表列出 Message Queue 產品所有 4.x 版的發行日期,並說明與每個發行版本相關的主要變更。
表 1–1 修訂歷程
日期 |
對變更的說明 |
---|---|
2006 年 5 月 |
Message Queue 4.0 版此文件的初版。 |
2007 年 1 月 |
Message Queue 4.1 Beta 版此文件的初版。增加有關 JAAS 支援的說明。 |
2007 年 4 月 |
Message Queue 4.1 Beta 版此文件的再版。增加高可用性功能。 |
2007 年 9 月 |
正式版文件的第三版。增加有關 Java Enterprise System Monitoring Framework 支援、固定的 C 連接埠、錯誤修正及其他功能的說明。 |
Sun Java System Message Queue 為全方位功能的訊息服務,可提供符合 Java Messaging Specification (JMS) 1.1 規格且可靠的非同步訊息傳送。此外,Message Queue 還提供多種 JMS 規格以外的功能,以滿足大型企業的使用需求。
Message Queue 4.1 版增加對高可用性、Java 認證與授權服務 (JAAS)、使用固定的 C 連接埠,以及 Java Enterprise System Monitoring Framework 的支援。同時也增加了一些次要的增強功能和錯誤修正。本節包含下列資訊。
如需有關 Message Queue 4.0 中推出之功能的資訊,請參閱關於 Message Queue 4.0。
Message Queue 4.1 推出高可用性 (資料與服務可用性) 代理程式叢集、JAAS 支援以及各種其他次要的功能。本節將說明這些功能,並提供更多參考資訊供您使用。
Message Queue 4.1 推出高可用性叢集,在提供服務可用性的同時,還提供資料可用性。它會在用戶端失去與高可用性代理程式的連線時,自動重新連線至叢集中的其他代理程式。提供新連線的代理程式會接管故障代理程式的永久性資料與狀態,並繼續為故障代理程式用戶端提供不間斷服務。您可以透過安全連線執行高可用性代理程式。
高可用性代理程式需要使用高可用性資料庫 (HADB)。若不具備此類資料庫或資料可用性對您而言不重要,則可繼續使用傳統叢集,提供自動重新連線與服務可用性。
配置高可用性代理程式很簡單:為叢集中的每個代理程式指定下列種類的代理程式特性。
叢集成員身份特性可指定代理程式是高可用性叢集的一部分、叢集的 ID 與代理程式的 ID。
高可用性資料庫 (HADB) 特性可指定永久性訊息的模型 (JDBC)、HADB 供應商的名稱,以及供應商特定的資料庫配置特性。
故障偵測和接管特性可指定偵測及處理代理程式故障的方式。
若要使用此項功能,必須執行下列作業:
安裝高可用性資料庫。
安裝 JDBC 驅動程式的 .jar 檔案。
為高可用性永久存放區建立資料庫模式。
針對叢集中每個代理程式的高可用性,設定相關特性。
啟動叢集中的每個代理程式。
如需有關高可用性的概念性說明,以及它與傳統業集的對比,請參閱「Sun Java System Message Queue 4.1 Technical Overview」中的第 4 章「Broker Clusters」。如需有關高可用性的程序性資訊與參考資訊,請參閱「Sun Java System Message Queue 4.1 Administration Guide」中的第 8 章「Broker Clusters」與「Sun Java System Message Queue 4.1 Administration Guide」中的「Cluster Configuration Properties」。
如果您搭配 Message Queue 4.0 版使用 HADB 資料庫,且需要使用高可用性叢集,您可以使用 dbmgr 公用程式升級為共用 HADB 存放區。請參閱代理程式叢集,以取得更多資訊。
除了內建檔案式和 LDAP 式認證機制,Message Queue 也支援 Java 認證與授權服務 (JAAS),可讓您將各種服務外掛到代理程式,以認證 Message Queue 用戶端。本節說明代理程式提供給 JAAS 相容認證服務的資訊,並說明如何配置代理程式使用這類服務。
JAAS API 不在本文件的論述範疇內。如需瞭解更多資訊,請參閱下列資訊來源。
如需有關 JAAS API 的完整資訊,請參閱「Java Authentication and Authorization Service (JAAS) Reference Guide」。
http://java.sun.com/j2se/1.5.0/docs/guide/security/jaas/JAASRefGuide.html
如需有關撰寫 LoginModule 的資訊,請參閱「Java Authentication and Authorization Service (JAAS) LoginModule Developer's Guide」。
http://java.sun.com/j2se/1.5.0/docs/guide/security/jaas/JAASLMDevGuide.html
JAAS API 是 J2SE 的核心 API,因此是 Message Queue 執行階段環境不可或缺的一部分。JAAS 會在應用程式與認證機制之間定義一個抽象層,允許外掛所需的機制,而無須變更應用程式的程式碼。對於 Message Queue 服務而言,此抽象層位於代理程式 (應用程式) 與認證提供者之間。藉由設定某些代理程式特性,可以在不中斷或變更代理程式的程式碼情況下,外掛任何 JAAS 相容認證服務並升級此服務。
若使用 JAAS 式認證,便可使用 JMX 用戶端管理代理程式,但在啟動代理程式之前,必須手動設定 JAAS 支援 (藉由設定與 JAAS 相關的代理程式特性)。您無法使用 JMX API 變更這些特性。
圖 1–1 說明了 JAAS 的基本元素:JAAS 用戶端、JAAS 相容認證服務與 JAAS 配置檔案。
JAAS 用戶端是需要使用 JAAS 相容認證服務執行認證的應用程式。該用戶端使用 LoginModule 與此服務通訊,並負責提供 LoginModule 可呼叫的回呼處理程式,以取得使用者名稱、密碼與其他相關資訊。
JAAS 相容認證服務包含一或多個 LoginModule,以及執行所需認證的邏輯。LoginModule 可能包含認證邏輯,或可能使用私有通訊協定或 API 與提供該邏輯的模組通訊。
JAAS 配置檔案是文字檔,讓 JAAS 用戶端用來找出與 JAAS 相容服務通訊時所需的 LoginModule。
下一節說明 Message Queue 服務如何使用這些元素,以提供 JAAS 相容認證。
下圖說明 Message Queue 代理程式如何使用 JAAS。該圖說明的 JAAS 模型實作比上圖所示更為複雜。
如同較簡單的範例所示,此認證服務層與代理程式是分開的。認證服務包含一或多個登入模組 (LoginModule),並視需要包含其他認證模組。執行登入模組的 Java 虛擬機器與執行代理程式的 Java 虛擬機器相同。Message Queue 代理程式被登入模組視為 LogInContext,並藉由屬於代理程式執行階段程式碼的 CallBackHandler 與登入模組通訊。
認證服務也提供 JAAS 配置檔案 (包含登入模組的項目)。配置檔案會指定使用模組的順序,以及某些使用條件。啟動代理程式時,JAAS 會依 Java 系統特性 java.security.auth.login.config 或 Java 安全性特性檔案找出配置檔案。接著會根據代理程式特性 imq.user_repository.jaas.name 的值,選取 JAAS 配置檔案中的項目。此項目會指定認證將使用的登入模組。如圖所示,代理程式可使用多個登入模組。(圖 1–3 說明了配置檔案與登入模組以及代理程式之間的關係。)
Message Queue 用戶端完全不會感受到代理程式使用 JAAS 外掛認證服務。用戶端會如同往常繼續連線至代理程式,並傳遞使用者名稱與密碼。而代理程式會使用回呼處理程式將此資訊傳遞至認證服務,再由服務使用該資訊認證使用者並傳回結果。認證一旦成功,代理程式便會授權連線;如果失敗,用戶端執行階段會傳回用戶端必須處理的 JMS 安全性異常。
Message Queue 用戶端經過認證之後,如果需要進一步的授權,則代理程式會如同往常進行;它會參考存取控制檔案,決定是否授權已認證的用戶端以執行所負責的動作:存取目標、使用訊息、瀏覽佇列等。
設定 JAAS 相容認證的步驟,包含設定代理程式和系統特性以選取此認證類型、指定配置檔案的位置,以及指定將使用的登入模組項目。
本節說明 JAAS 用戶端、登入模組以及 JAAS 配置檔案之間如何相互關聯,接著說明設定 JAAS 相容認證所需的程序。下圖說明配置檔案、登入模組與代理程式之間的關係。
如圖所示,JAAS 配置檔案 MyJAASCFile.config 包含數個登入模組的參照,共同組成一個進入點。代理程式會藉由查詢 Java 系統特性 java.security.auth.login.config 或 Java 安全性特性檔案,以找出配置檔案。決定要使用的登入模組時須查詢代理程式特性 imq.user_repository.jaas.name,該特性會指定配置檔案中的所需項目。這些模組的類別位於 lib/ext 目錄中。
若要設定 JAAS 對 Message Queue 的支援,您必須完成下列步驟。(在開發環境中,這些步驟可能是由開發人員完成。在生產環境中,管理員會接管部分此類作業。)
建立可實作認證服務的一或多個登入模組類別。以下列出代理程式支援的 JAAS 回呼類型。
代理程式使用此回呼,將執行代理程式所在的語言環境傳遞給認證服務。此值可用於本土化。
代理程式使用此回呼,將請求連線時由 Message Queue 用戶端所指定的使用者名稱,傳遞至認證服務。
代理程式使用此回呼,在 TextInputCallback.getPrompt() 為 imq.authentication.type 時,將 imq.authentication.type 的值指定給認證服務。現在此欄位唯一可能的值為 basic。這表示 Base-64 密碼編碼。
代理程式使用此回呼,將請求連線時由 Message Queue 用戶端所指定的密碼,傳遞至認證服務。
代理程式使用此回呼將文字輸出記錄到代理程式記錄檔,以提供記錄服務給認證服務。回呼的訊息類型 ERROR、INFORMATION 和 WARNING 分別對映至代理程式的記錄層級 ERROR、INFO 和 WARNING。
建立包含參照登入模組類別之項目的 JAAS 配置檔案,並將此檔案的位置指定給 Message Queue 管理員。(該檔案可位於遠端,並可由 URL 指定其位置。)
記下 JAAS 配置檔案中參照登入實作類別的項目名稱。
將實作登入模組的類別歸檔為 jar 檔案,並將 jar 檔案置於 Message Queue 的 lib/ext 目錄中。
配置與 JAAS 支援相關的代理程式特性。這些特性說明於表 1–2 中。
設定下列系統特性,以指定 JAAS 配置檔案的位置。
java.security.auth.login.config= JAAS_Config_File_Location
例如,您可以在啟動代理程式時指定配置檔案。
imqbrokerd -Djava.security.auth.login.config=JAAS_Config_File_Location
還有其他方法可指定 JAAS 配置檔案的位置。如需其他資訊,請參閱
http://java.sun.com/j2se/1.5.0/docs/guide/security/jaas/tutorials/LoginConfigFile.html
下表列出設定 JAAS 支援所需的代理程式特性。
表 1–2 JAAS 支援的代理程式特性
特性 |
說明 |
---|---|
imq.authentication.type |
設定為 basic,以表示為 Base-64 密碼編碼。此為 JAAS 認證的唯一允許值。 |
imq.authentication.basic.user_repository |
設定為 jaas,以指定 JAAS 認證。 |
imq.accesscontrol.type |
設定為 file。 |
imq.user_repository.jaas.name |
設定為參照需要用做認證機制之登入模組的所需項目 (位於 JAAS 配置檔案中) 名稱。這是您在步驟 3 中記下的名稱。 |
imq.user_repository.jaas.userPrincipalClass |
此特性由 Message Queue 存取控制所使用,會指定登入模組中的 java.security.Principal 實作類別,讓代理程式用來擷取在 Message Queue 存取控制檔案中表示使用者實體的主體名稱。若未指定,則會改用請求連線時從 Message Queue 用戶端傳遞的使用者名稱。 |
imq.user_repository.jaas.groupPrincipalClass |
此特性由 Message Queue 存取控制所使用,會指定登入模組中的 java.security.Principal 實作類別,讓代理程式用來擷取在 Message Queue 存取控制檔案中表示使用者實體的主體名稱。若未指定,則會忽略 Message Queue 存取控制檔案中的群組規則 (若有的話)。 |
Message Queue 4.1 版將 JDBC 存放區變更為支援高可用性。因此,JDBC 存放區版本會增加為 410。JDBC 存放區版本 350、370 和 400 會自動遷移至 410 版本格式。
請注意,檔案式永久存放區版本由於沒有任何變更,因此還是 370。
特性 IMQ_DEFAULT_EXT_JARS 已增加至 imqenv.conf 檔案。您可以設定此特性,以指定在啟動代理程式時,將外部 .jar 檔案的路徑名稱納入 CLASSPATH。若使用此特性指定外部 .jar 檔案的位置,則不需要再將這些檔案複製到 lib/ext 目錄。外部 jar 可參照 JDBC 驅動程式或 JAAS 登入模組。下列指令範例指定 jdbc 驅動程式的位置。
IMQ_DEFAULT_EXT_JARS=/opt/SUNWhadb4/lib/hadbjdbc4.jar:/opt/SUNWjavadb/derby.jar
Message Queue 支援 Sun Java Enterprise System (JES) 監視架構,可使用常用圖形式介面監視 Java Enterprise System 元件。此介面利用名為「Sun Java System Monitoring Console」的網路型主控台實作。如果您執行 Message Queue 和其他 JES 元件,可能會發現使用單一介面管理所有元件比較方便。
JES 監視架構會定義所有 JES 元件產品所使用的共用資料模式 (Common Data Model, CMM)。此模式可以統一的方式集中檢視所有 JES 元件。Message Queue 可將以下物件交給 JES 監視架構:
已安裝的產品
代理程式實例名稱
代理程式連接埠對映器
每個連線服務
每個實體目標
永久存放區
使用者儲存庫
這些物件會各自對映一個 CMM 物件。您可使用 JES 監視主控台監視這些物件的屬性。在執行階段時,管理員可使用主控台檢視效能統計、建立自動監視的規則,以及確認警示。如需有關將 Message Queue 物件對映至 CMM 物件的詳細資訊,請參閱「Sun Java Enterprise System 監視指南」。
若要啟用 JES 監視,必須執行下列作業:
根據「Sun Java Enterprise System 安裝指南」中提供的指示,在部署中安裝並配置所有元件 (Message Queue 和其他元件)。
如「Sun Java Enterprise System 監視指南」中所述,為所有監視的元件啟用並配置監視架構。
如「Sun Java Enterprise System 監視指南」中所述,在一部單獨的主機上安裝監視主控台、啟動主代理程式,然後再啟動 Web 伺服器。
由於監視架構會從代理程式現有的監視資料基礎架構擷取資料,完成收集度量的所有工作,因此使用 JES 監視架構並不會影響代理程式的效能。
在舊版中,只有處於 PREPARED 狀態的作業事件可以由管理員回復。換言之,若屬於分散式作業事件的階段作業未正常終止,作業事件將繼續處於代理程式管理員無法清除的狀態。在 Message Queue 4.1 中,您可以使用 imqcmd 公用程式清除 (回復) 下列狀態的作業事件:STARTED、FAILED、INCOMPLETE、COMPLETE、PREPARED。
imqcmd 公用程式提供其他資料做為部分 imqcmd query txn 輸出,以協助您決定特定作業事件是否可回復 (特別是如果該作業事件不在 PREPARED 狀態時)。該公用程式提供啟動作業事件的連線 ID,並指定作業事件的建立時間。管理員可使用此資訊,決定是否需要回復作業事件。一般說來,管理員應避免提前回復作業事件。
C 用戶端可使用 MQ_SERVICE_PORT_PROPERTY 連線特性,指定要連線的固定連接埠。這在嘗試通過防火牆或需要略過代理程式的連接埠對映器服務 (動態指定連接埠) 時,會很有用。
請記住,您還需要在代理程式端配置 JMS 服務連接埠。例如,若需要透過 ssljms 將用戶端連線至連接埠 1756,請執行下列作業:
在用戶端:將 MQ_SERVICE_PORT_PROPERTY 設定為 1756,並將 MQ_CONNECTION_TYPE_PROPERTY 設定為 SSL。
在代理程式端:如下所示,將 imq.serviceNameType.protocol.port 特性設定為 1756。
imq.ssljms.ssl.port=1756
MQ_SERVICE_PORT_PROPERTY 連線特性是於 Message Queue 3.7 Update 2 中引入。
如需有關 4.1 版的硬體與軟體需求,請參閱「Sun Java System Message Queue 4.1 Installation Guide」。
Message Queue 4.0 是僅支援 Application Server 9 PE 的發行版本。此為包含一些新功能、次要增強功能和錯誤修正的次要發行版本。本節包含下列資訊。
Message Queue 4.0 包含下列新增功能:
這些資訊都會在下列小節中詳述。
4.0 版推出的其中一個變更極為次要,但可能會造成重大問題,亦即停用指定密碼的指令行選項。因此,您必須如已停用的密碼選項中所述,把所有密碼儲存在一個檔案中。
Message Queue 4.0 版增加兩個特性,停用的訊息佇列中所有的訊息都會設定這兩個特性。
JMS_SUN_DMQ_PRODUCING_BROKER 表示產生訊息的代理程式。
JMS_SUN_DMQ_DEAD_BROKER 表示將訊息標記為停用的代理程式。
Message Queue 4.0 版增加兩個特性,停用的訊息佇列中所有的訊息都會設定這兩個特性。
JMS_SUN_DMQ_PRODUCING_BROKER 表示產生訊息的代理程式。
JMS_SUN_DMQ_DEAD_BROKER 表示將訊息標記為停用的代理程式。
imqdbmgr 指令已增加 query 子指令。使用此子指令可顯示關於永久存放區的資訊,包含存放區版本、資料庫使用者,以及是否已建立資料庫表格。
以下是該指令所顯示之資訊的範例。
imqdbmgr query |
[04/Oct/2005:15:30:20 PDT] Using plugged-in persistent store: version=400 brokerid=Mozart1756 database connection url=jdbc:oracle:thin:@Xhome:1521:mqdb database user=scott Running in standalone mode. Database tables have already been created. |
Message Queue 3.7 UR1 版推出了永久存放區格式的兩項變更,可改善效能。其中一項變更針對檔案存放區,另一項則針對 JDBC 存放區。
存留在檔案存放區中的作業事件資料格式
Message Queue 檔案式永久存放區所儲存的作業事件狀態資訊已經變更其格式,可降低磁碟 I/O 並改善 JMS 作業事件的效能。
Oracle JDBC 存放區
在之前版本的 Message Queue 中,Oracle 的存放區模式使用 LONG RAW 資料類型來儲存訊息資料。在 Oracle 8 中,Oracle 引入了 BLOB 資料類型,並停用了 LONG RAW 類型。Message Queue 3.7 UR1 已改用 BLOB 資料類型,可改善效能與支援能力。
由於這些變更會影響存放區相容性,因此在 Message Queue 3.7 UR1 版中,檔案存放區和 JDBC 存放區的存放區版本皆已由 350 變更為 370。
Message Queue 4.0 版變更了 JDBC 存放區,以取得最佳效能並支援後續的增強功能。因此,JDBC 存放區版本已提昇為 400。請注意,在 4.0 版中,檔案式永久存放區版本沒有任何變更,因此還是 370。
Message Queue 4.0 支援將永久存放區自動轉換為檔案式和 JDBC 永久存放區的最新版本。初次啟動 imqbrokerd 時,如果公用程式偵測到舊版存放區,則會將該存放區遷移至新的格式,同時保留舊版存放區。
檔案式存放區版本 200 和 350 會遷移至 370 版本格式。
JDBC 存放區版本 350 和 370 會遷移至 400 版本格式。(如果您需要升級 200 存放區,則需要先升級到 3.5 或 3. 6 版。)
若要回復此升級動作,請解除安裝 Message Queue 4.0,然後重新安裝之前執行的版本。由於舊版的存放區副本保留不變,因此代理程式可利用舊版的存放區副本執行。
指令公用程式 (imqcmd) 已增加子指令和數個選項,可讓管理員靜止代理程式、在指定間隔時間後關閉代理程式、銷毀連線,或設定 Java 系統特性 (例如連線相關特性)
靜止代理程式會使其進入無訊息狀態,允許在關閉或重新啟動代理程式之前清空訊息。您無法向靜止中的代理程式建立新連線。若要靜止代理程式,請如下輸入指令。
imqcmd quiesce bkr -b Wolfgang:1756
若要在指定間隔後關閉代理程式,請如下輸入指令。(時間間隔會指定代理程式關閉前的等候秒數)。
imqcmd shutdown bkr -b Hastings:1066 -time 90
若指定時間間隔,代理程式就會記錄一則訊息,指示何時將會關閉。例如,
Shutting down the broker in 29 seconds (29996 milliseconds) (在 29 秒後關閉代理程式,29996 毫秒)
當代理程式等候關閉時,其運作方式會有以下影響。
會繼續接受管理 JMS 連線。
不會接受任何新的 JMS 連線。
現有的 JMS 連線會繼續運作。
代理程式無法接管高可用性叢集中的任何其他代理程式。
imqcmd 公用程式不會封鎖,它會向代理程式傳送關閉請求並立即返回。
若要銷毀連線,請如下輸入指令。
imqcmd destroy cxn -n 2691475382197166336
使用指令 imqcmd list cxn 或 imqcmd query cxn 以取得連線 ID。
若要透過 imqcmd 設定系統特性,請使用新的 –D 選項。這在設定或置換 JMS 連線工廠特性或連線相關的 Java 系統特性時,會很有用。例如:
imqcmd list svc -secure -DimqSSLIsHostTrusted=true imqcmd list svc -secure -Djavax.net.ssl.trustStore=/tmp/mytruststore -Djavax.net.ssl.trustStorePassword=mytrustword
如需有關 imqcmd 指令之語法的完整資訊,請參閱「Sun Java System Message Queue 4.1 Administration Guide」中的第 13 章「Command Line Reference」。
現在支援將 Apache Derby 10.1.1 版視為 JDBC 相容永久存放區的提供者。
自 4.0 版起,用戶端連線工廠特性 imqSSLIsHostTrusted 的預設值為 false。若應用程式相依於之前的預設值 true,您需要重新配置並將特性明確設定為 true。
當代理程式配置為使用自我簽署的憑證時,您可以選擇信任主機。此時,除了指定連線應使用基於 SSL 的連線服務 (使用 imqConnectionType 特性),還應該將 imqSSLIsHostTrusted 特性設定為 true。
例如,若要在代理程式使用自我簽署的憑證時安全地執行用戶端應用程式,請使用如下的指令。
java -DimqConnectionType=TLS -DimqSSLIsHostTrusted=true <ClientAppName>
若要在代理程式使用自我簽署的憑證時安全地執行管理工具 imqcmd,請使用如下的指令。
imqcmd list svc -secure -DimqSSLIsHostTrusted=true
已增加符合 Java Management Extensions (JMX) 規格,且可用於配置與監視 Message Queue 代理程式的新 API。您可以使用此 API,從 Message Queue 用戶端應用程式內以程式化方式配置並監視代理程式功能。在 Message Queue 的早期版本中,這些功能只能從指令行或管理主控台存取。
API 包含一組 JMX 受管理 Bean (MBean),以用於管理下列與 Message Queue 相關的資源:
訊息代理程式
連線服務
連線
目標
訊息產生器
訊息用戶
作業事件
代理程式叢集
記錄
Java 虛擬機器 (JVM)
這些 MBean 提供一些屬性和作業,以同步輪詢與處理基礎資源的狀態,並提供通知,以允許用戶端應用程式以非同步方式偵聽並回應狀態變更。用戶端應用程式可使用 JMX API,執行如下的配置與監視作業:
設定代理程式的連接埠號
設定代理程式的最大訊息容量
暫停連線服務
設定連線服務的最大執行緒數目
取得目前服務中的連線數目
銷毀連線
建立目標
銷毀目標
啟用或停用自動建立目標
清除所有來自目標的訊息
取得自啟動代理程式以來,目標所接收的訊息累積數目
取得佇列的目前狀態 (執行中或已暫停)
取得主題目前的訊息產生器數目
清除所有來自長期用戶的訊息
取得目前 JVM 堆疊大小
如需有關 JMX API 的簡介以及完整參考資訊,請參閱「Sun Java System Message Queue 4.1 Developer’s Guide for JMX Clients」。
增加了數個新的代理程式特性以支援 JMX API (請參閱表 1–3)。您無法使用 Message Queue 指令公用程式 (imqcmd) 從指令行設定這些特性;而是要使用代理程式公用程式 (imqbrokerd) 的 -D 選項設定,或是在代理程式的實例配置檔案 (config.properties) 中手動編輯。此外,其中的部分特性 (imq.jmx.rmiregistry.start、 imq.jmx.rmiregistry.use、 imq.jmx.rmiregistry.port) 可以透過表 1–4 中所述之新的代理程式公用程式選項進行設定。該表列出每個選項、指定其類型,並說明其用途。
表 1–3 JMX 支援功能的新代理程式特性
imq.jmx.connector.list 特性會定義一組在代理程式啟動時建立的已命名 JMX 連接器;imq.jmx.connector.activelist 會指定其中要啟動的連接器。每個已命名的連接器接著會有各自的特性集:
imq.jmx.connector.connectorName .urlpath |
imq.jmx.connector.connectorName .useSSL |
imq.jmx.connector.connectorName .brokerHostTrusted |
根據預設,會建立兩個 JMX 連接器,名為 jmxrmi 和 ssljmxrmi;第一個連接器會配置為不使用 SSL 加密 (imq.jmx.connector.jmxrmi.useSSL = false),第二個連接器則使用 (imq.jmx.connector.ssljmxrmi.useSSL = true)。根據預設,代理程式啟動時只會啟動 jmxrmi 連接器;請參閱JMX 用戶端的 SSL 支援,以取得有關如何啟動 ssljmxrmi 連接器進行安全通訊的資訊。
為方便使用,還在指令行代理程式公用程式 (imqbrokerd) 中增加了新的選項 (表 1–4),以控制 RMI 登錄的使用、啟動和連接埠。這些選項的用法和效果與其等效代理程式特性 (如表 1–3 中所述) 相同。該表列出每個選項、指定其等效代理程式特性,並說明其用法。
表 1–4 JMX 支援功能的新代理程式公用程式選項
選項 |
等效代理程式特性 |
說明 |
---|---|---|
-startRmiRegistry |
imq.jmx.rmiregistry.start |
指定是否在代理程式啟動時啟動 RMI 登錄。 |
-useRmiRegistry |
imq.jmx.rmiregistry.use |
指定是否使用外部 RMI 登錄。 |
-rmiRegistryPort |
imq.jmx.rmiregistry.port |
RMI 登錄的連接埠號 |
一個新的子指令 (表 1–5) 增加至指令行指令公用程式 (imqcmd),以列出在代理程式啟動時建立和啟動的 JMX 連接器之 JMX 服務 URL。JMX 用戶端若要不使用 Message Queue 簡易類別 AdminConnectionFactory 即取得其 JMX 連接器,就需要此資訊。此資訊也可用於透過 Java 監視與管理主控台 (jconsole) 等一般 JMX 瀏覽器,來管理與監視 Message Queue。
表 1–5 新指令公用程式子指令
子指令 |
說明 |
---|---|
list jmx |
列出 JMX 連接器的 JMX 服務 URL |
如上所述,預設會將 Message Queue 訊息代理程式配置為使用預先配置之 JMX 連接器 jmxrmi,進行不安全的通訊。應用程式若要使用安全傳輸層 (SSL) 進行安全通訊,則必須啟動另一個安全的 JMX 連接器 ssljmxrmi。此項作業需要下列步驟:
如「Message Queue Administration Guide」中所述,使用與 ssljms、ssladmin 或 cluster 連線服務相同的方式取得並安裝簽署的憑證。
視需要在信任清單存放區中安裝根憑證授權單位的憑證。
將 ssljmxrmi 連接器增加至要在代理程式啟動時啟動的 JMX 連接器清單:
imq.jmx.connector.activelist=jmxrmi,ssljmxrmi
使用 Message Queue 代理程式公用程式 (imqbrokerd) 啟動代理程式,然後傳遞密碼檔案中的金鑰庫密碼,或在提示時從指令行輸入。
根據預設,ssljmxrmi 連接器 (或任何其他基於 SSL 的連接器) 會配置為驗證所有提供給它的代理程式 SSL 憑證。若要避免此驗證 (例如,在軟體測試期間使用自我簽署的憑證時),請將代理程式特性 imq.jmx.connector.ssljmxrmi.brokerHostTrusted 設定為 true。
配置用戶端的管理員連線工廠 (AdminConnectionFactory) 時,內含的 URL 必須指定 ssljmxrmi 為喜好的連接器:
AdminConnectionFactory acf = new AdminConnectionFactory(); acf.setProperty(AdminConnectionConfiguration.imqAddress, "mq://myhost:7676/ssljmxrmi");
請視需要使用系統特性 javax.net.ssl.trustStore 和 javax.net.ssl.trustStorePassword,將 JMX 用戶端指向信任清單存放區。
本節說明 Message Queue 4.0 如何針對連線和階段作業相關事件,支援用戶端執行階段的記錄功能。
JDK 1.4 (及以上版本) 包含 java.util.logging 程式庫。此程式庫會實作可用於應用程式特定記錄的標準記錄程式介面。
Message Queue 用戶端執行階段使用 Java 記錄 API 實作其記錄功能。您可以使用所有 J2SE 1.4 記錄功能來配置記錄作業。例如,應用程式可使用下列 Java 記錄功能,配置 Message Queue 用戶端執行階段輸出其記錄資訊的方式:
記錄處理程式
記錄篩選器
記錄格式化程式
記錄層級
如需有關 Java 記錄 API 的更多資訊,請參閱「Java Logging Overview」,網址為 http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html
Message Queue 提供者會定義一組與記錄層級和記錄作業相關的記錄名稱空間,可在適當設定記錄配置時,讓 Message Queue 用戶端記錄連線與階段作業事件。
Message Queue 用戶端執行階段的根記錄名稱空間定義為 javax.jms。Message Queue 用戶端執行階段的所有記錄程式皆使用此名稱做為父系名稱空間。
Message Queue 用戶端執行階段使用的記錄層級與 java.util.logging.Level 類別中所定義的記錄層級相同。此類別會定義七個標準記錄層級,以及可用於啟動與關閉記錄的兩個其他設定。
關閉記錄。
最高優先權、最高值。由應用程式定義。
由應用程式定義。
由應用程式定義。
由應用程式定義。
由應用程式定義。
由應用程式定義。
最低優先權、最低值。由應用程式定義。
啟用所有訊息的記錄。
一般來說,Message Queue 用戶端執行階段中發生的異常與錯誤,皆由記錄程式使用 javax.jms 名稱空間所記錄。
從 JVM 丟出且由用戶端執行階段截獲的異常 (例如 IOException),是由記錄程式使用記錄名稱空間 javax.jms 記錄在 WARNING 層級。
從用戶端執行階段丟出的 JMS 異常 (例如 IllegalStateException),是由記錄程式使用記錄名稱空間 javax.jms 記錄在 FINER 層級。
從 JVM 丟出且由用戶端執行階段截獲的錯誤 (例如 OutOfMemoryError),是由記錄程式使用記錄名稱空間 javax.jms 記錄在 SEVERE 層級。
下表列出可記錄的事件,以及必須設定的記錄層級以記錄 JMS 連線與階段作業事件。
下表說明連線的記錄層級與事件。
表 1–6 javax.jms.connection 名稱空間的記錄層級與事件
記錄層級 |
事件 |
---|---|
FINE |
已建立連線 |
FINE |
已啟動連線 |
FINE |
已關閉連線 |
FINE |
已中斷連線 |
FINE |
已重新連線 |
FINER |
其他連線作業,例如 setClientID |
FINEST |
訊息、確認、Message Queue 動作與控制訊息 (如正在確定作業事件) |
下列階段作業資訊會記錄在記錄中。
傳送給用戶的每筆訊息記錄包含 ConnectionID、SessionID 和 ConsumerID。
由產生器傳送的每筆訊息記錄包含 ConnectionID、SessionID、ProducerID 和目標名稱。
下表說明階段作業的記錄層級與事件。
表 1–7 javax.jms.session 名稱空間的記錄層級與事件
記錄層級 |
事件 |
---|---|
FINE |
已建立階段作業 |
FINE |
已關閉階段作業 |
FINE |
已建立產生器 |
FINE |
已建立用戶 |
FINE |
已建立目標 |
FINER |
其他階段作業,例如正在確定階段作業。 |
FINEST |
已產生並使用訊息。(訊息特性與內文不會記錄在記錄中) |
根據預設,會從應用程式執行所在的 JRE 繼承輸出記錄層級。請檢查 JRE_DIRECTORY/lib/logging.properties 檔案以判斷該層級為何。
您可以程式化方式或藉由使用配置檔案來配置記錄功能,且可控制記錄發生的範圍。以下小節說明這些可能的作業。
下列範例說明如何在 JRE_DIRECTORY/lib/logging.properties 檔案中設定記錄名稱空間與層級,該檔案將用以設定 Java 執行階段環境的記錄層級。使用此 JRE 的所有應用程式會有相同的記錄配置。以下的配置範例會將 javax.jms.connection 名稱空間的記錄層級設定為 INFO,並指定將輸出寫入 java.util.logging.ConsoleHandler。
#logging.properties file. # "handlers" specifies a comma separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. # By default we only configure a ConsoleHandler, which will only # show messages at the INFO and above levels. handlers= java.util.logging.ConsoleHandler # Default global logging level. # This specifies which kinds of events are logged across # all loggers. For any given facility this global level # can be overriden by a facility-specific level. # Note that the ConsoleHandler also has a separate level # setting to limit messages printed to the console. .level= INFO # Limit the messages that are printed on the console to INFO and above. java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter # The logger with javax.jms.connection name space will write # Level.INFO messages to its output handler(s). In this configuration # the ouput handler is set to java.util.logging.ConsoleHandler. javax.jms.connection.level = INFO
您也可以從用於執行應用程式的 Java 指令行來定義記錄配置檔案。應用程式會使用指定的記錄檔中所定義之配置。在下列範例中,configFile 使用 JRE_DIRECTORY/lib/logging.properties 檔案中所定義的相同格式。
java -Djava.util.logging.config.file=configFile MQApplication
下列程式碼使用 java.util.logging API,將 javax.jms.connection 名稱空間記錄層級變更為 FINE,以記錄連線事件。您可以在應用程式中包含這類程式碼,從而以程式化方式設定記錄配置。
import java.util.logging.*; //construct a file handler and output to the mq.log file //in the system's temp directory. Handler fh = new FileHandler("%t/mq.log"); fh.setLevel (Level.FINE); //Get Logger for "javax.jms.connection" domain. Logger logger = Logger.getLogger("javax.jms.connection"); logger.addHandler (fh); //javax.jms.connection logger would log activities //with level FINE and above. logger.setLevel (Level.FINE);
連線事件通知可讓 Message Queue 用戶端偵聽關閉事件與重新連線事件,並根據通知類型與連線狀態採取適當的動作。例如,當發生容錯移轉且用戶端重新連線至其他代理程式時,應用程式最好清除作業事件狀態,並進行新的作業事件。
如果 Message Queue 提供者偵測到嚴重的連線問題,它會呼叫連線物件的已註冊之異常偵聽程式。它會呼叫偵聽程式的 onException 方法,並傳遞描述問題的 JMSException 引數給該方法。Message Queue 提供者亦可提供事件通知 API,讓用戶端執行階段將連線狀態的變更通知應用程式。通知 API 由下列元素所定義:
定義事件偵聽程式及通知事件物件的 com.sun.messaging.jms.notification 套裝模組。
定義 javax.jms.Connection 介面延伸的 com.sun.messaging.jms.Connection 介面。
以下小節說明可觸發通知的事件,並說明建立事件偵聽程式的方式。
下表列出並說明事件偵聽程式會傳回的事件。
請注意,發生連線事件時,不會呼叫 JMS 異常偵聽程式。只有在用戶端執行階段用盡重新連線的嘗試次數時,才會呼叫異常偵聽程式。用戶端執行階段一律會先呼叫事件偵聽程式,再呼叫異常偵聽程式。
表 1–8 通知事件
事件類型 |
意義 |
---|---|
ConnectionClosingEvent |
當 Message Queue 用戶端執行階段收到代理程式的通知,指出由於管理員請求關閉,因此連線即將關閉時,即會產生此事件。 |
ConnectionClosedEvent |
當連線由於代理程式錯誤或由於管理員請求關閉或重新啟動而關閉時,Message Queue 用戶端執行階段會產生此事件。 當事件偵聽程式收到 ConnectionClosedEvent 時,應用程式可使用已接收事件的 getEventCode() 方法取得指出關閉原因的事件代碼。 |
ConnectionReconnectedEvent |
Message Queue 用戶端執行階段已重新連線至代理程式。這可能是用戶端之前連線的同一個或不同的代理程式。 應用程式可使用已接收事件的 getBrokerAddress 方法取得重新連線的代理程式位址。 |
ConnectionReconnectFailedEvent |
Message Queue 用戶端執行階段無法重新連線至代理程式。每次重新連線嘗試失敗時,執行階段即會產生新的事件,並將其傳送到事件偵聽程式。 發生連線事件時,不會呼叫 JMS 異常偵聽程式。只有在用戶端執行階段用盡重新連線的嘗試次數時,才會呼叫。用戶端執行階段一律會先呼叫事件偵聽程式,再呼叫異常偵聽程式。 |
下列程式碼範例描述設定連線事件偵聽程式的方式。每次發生連線事件時,用戶端執行階段便會呼叫事件偵聽程式的 onEvent 方法。
//create an MQ connection factory. com.sun.messaging.ConnectionFactory factory = new com.sun.messaging.ConnectionFactory(); //create an MQ connection. com.sun.messaging.jms.Connection connection = (com.sun.messaging.jms.Connection )factory.createConnection(); //construct an MQ event listener. The listener implements //com.sun.messaging.jms.notification.EventListener interface. com.sun.messaging.jms.notification.EventListener eListener = new ApplicationEventListener(); //set event listener to the MQ connection. connection.setEventListener ( eListener );
在此範例中,應用程式選擇事件偵聽程式將連線事件記錄到應用程式的記錄系統:
public class ApplicationEventListener implements com.sun.messaging.jms.notification.EventListener { public void onEvent ( com.sun.messaging.jms.notification.Event connEvent ) { log (connEvent); } private void log ( com.sun.messaging.jms.notification.Event connEvent ) { String eventCode = connEvent.getEventCode(); String eventMessage = connEvent.getEventMessage(); //write event information to the output stream. } }
如需有關 4.0 版軟硬體需求的資訊,請參閱 Sun Java System Application Server Platform Edition 9 的版本說明。
下表說明 Message Queue 4.1 版中已修正的錯誤。
表 1–9 Message Queue 4.1 中已修正的錯誤
錯誤 |
說明 |
---|---|
6381703 |
已處理的遠端訊息可能在重新啟動產生訊息的代理程式時,再度確定。 |
6388049 |
無法清除未完成的分散式作業事件。 |
6401169 |
imqcmd 的確定與回復選項不會提示進行確認。 |
6473052 |
自動建立的佇列預設值應為循環。(MaxNumberConsumers = -1)。 |
6474990 |
代理程式記錄會顯示 imqcmd list dst 指令的 ConcurrentModificationException。 |
6487413 |
當運作方式為 REMOVE_OLDEST 或 REMOVE_LOWER_PRIORITY 時,記憶體會發生錯誤。 |
6488340 |
代理程式進行循環,而用戶端則等候確認的回覆。 |
6502744 |
代理程式不會遵循停用的訊息佇列的預設限制 (1000 則訊息)。 |
6517341 |
當用戶端連線至高可用性叢集時,用戶端執行階段需要改善重新連線邏輯,從而不論 imqReconnectEnabled 特性的值為何,皆允許用戶端重新連線。 |
6528736 |
Windows 自動啟動服務 (imqbrokersvc) 在啟動期間發生故障。 |
6561494 |
當兩則訊息共用一個階段作業時,訊息會傳送到錯誤的用戶。 |
6567439 |
PREPARED 作業事件中產生的訊息若在重新啟動代理程式之後確定,傳送順序可能會亂掉。 |
下表說明 Message Queue 4.0 中已修正的錯誤。
表 1–10 Message Queue 4.0 中已修正的錯誤
錯誤編號 |
說明 |
---|---|
4986481 |
在 Message Queue 3.5 中,呼叫 Session.recover 時,可能會在自動重新連線模式中當機。 |
4987325 |
在呼叫 Session.recover 之後,重新傳送訊息的重新傳送旗標會設定為 false。 |
6157073 |
將新的連線訊息變更為不僅包含總連線數,還包含服務中的連線數。 |
6193884 |
Message Queue 在使用非 ASCII 字元顯示訊息的語言環境中,會將垃圾字元訊息輸出至系統記錄。 |
6196233 |
無法使用 JMSMessageID 選取訊息。 |
6251450 |
叢集關機期間,遍歷 connectList 物件時發生 ConcurrentModificationException。 |
6252763 |
java.nio.HeapByteBuffer.putLong/Int 中發生 java.nio.BufferOverflowException。 |
6260076 |
使用 Oracle 儲存,自代理啟動第一則訊息發佈後,訊息發佈變慢。 |
6260814 |
處理 JMSXUserID 的選擇器一律視為 false。 |
6264003 |
佇列瀏覽器會顯示屬於未確定作業事件的訊息。 |
6271876 |
連線流量控制在關閉具有未使用訊息的用戶時,無法正常運作。 |
6279833 |
Message Queue 不應該允許兩個代理程式使用相同的 jdbc 表格。 |
6293053 |
如果變更系統的 IP 位址,則主代理程式不會正確啟動,除非存放區已被清除 (使用 —reset store。) |
6294767 |
Message Queue 代理程式需要在它開啟的網路通訊端上設定 SO_REUSEADDR。 |
6304949 |
無法設定 TopicConnectionFactory 的 ClientID 特性。 |
6307056 |
txn 記錄是效能瓶頸。 |
6320138 |
Message Queue C API 無法從回覆傳送標頭判斷佇列的名稱。 |
6320325 |
在 Solaris 上,即使同時安裝了 JDK 1.4 與 JDK 1.5 版本,代理程式有時仍會先選擇 JDK 1.4。 |
6321117 |
多個代理程式叢集初始化丟出 java.lang.NullPointerException。 |
6330053 |
用戶確定作業事件時,JMS 用戶端會丟出 java.lang.NoClassDefFoundError。 |
6340250 |
C-API 支援 MESSAGE 類型。 |
6351293 |
新增對 Apache Derby 資料庫的支援。 |
本節包含核心產品文件中所沒有的最新資訊。本節涵蓋下列主題:
請參閱「Sun Java System Message Queue 4.1 Installation Guide」,以取得有關在 Solaris、Linux 和 Windows 平台上安裝 Message Queue 的預先安裝指示、升級程序和所有其他資訊。
請參閱「Sun Java Enterprise System 安裝指南」,以取得有關在 Solaris、Linux 和 HPUX 平台上安裝 Message Queue Enterprise Edition 的預先安裝指示和所有其他資訊。
請參閱「Sun Java Enterprise System 升級與遷移指南」,以取得有關在 Solaris、Linux、HPUX 和 Windows 平台上升級至 Message Queue Enterprise Edition 的升級和遷移指示。
本節涵蓋 Message Queue 4.1 中的相容性問題。
Sun Java System Message Queue 使用許多介面,而這些介面可能會隨時間而有所變更。「Sun Java System Message Queue 4.1 Administration Guide」中的附錄 B「Stability of Message Queue Interfaces」根據介面的穩定性對其進行了分類。 介面愈穩定,在後續版本中變更的可能性愈小。
下一個主要 Message Queue 發行版本可能會引入新的變更導致您的用戶端與該版本不相容。現在提供這個資訊是為了讓您對這些變更做好準備。
Sun Java System Message Queue 連帶安裝的個別檔案位置可能會變更。這可能會造成使用目前位置的某些 Message Queue 檔案之應用程式無法執行。
3.5 以及更舊版本的代理程式可能無法繼續在具有新版代理程式的叢集中運作。
在未來發行版本的 Message Queue 用戶端中,可能無法使用 JDK 1.5 以前的版本。
Message Queue 4.1 除了此「版本說明」文件,僅包含一個新文件:「Sun Java System Message Queue 4.1 Developer’s Guide for JMX Clients」。此文件已於 Message Queue 4.0 版中推出。在 4.1 版中,增加了介紹 JMX 模型的概念性資訊。
Message Queue 3.6 SP3 2005Q4 所發佈的 Message Queue 文件,已針對 Application Server 9 PE 用戶端的需求而有所更新。此文件集可在下列位置取得。
http://docs.sun.com/app/docs/coll/1307.1
「Sun Java System Message Queue 4.1 Installation Guide」已更新,以反映平台特定的資訊。此文件現在包含與 Message Queue 4.1 相關的安裝及升級資訊。
「管理指南」已更新,以提供有關高可用性叢集、JAAS 支援與 JMX 支援的資訊。
「Java 用戶端的開發者指南」已更新,以反映所增加的用戶端執行階段記錄支援和連線事件通知。
「C 用戶端的開發者指南」已更新,以反映所增加的 MQGetDestinationName 功能、MQ_Message 訊息類型和固定的連接埠。
本節包含 Message Queue 4.1 的已知問題清單。涵蓋以下的產品區域:
如需目前錯誤的清單、這些錯誤的狀態與解決方法,Java Developer Connection™ 成員可參考 Java Developer Connection 網站上的「Bug Parade」頁面。在您報告新的錯誤之前,請先檢視此頁面。儘管此頁面未列出所有的 Message Queue 錯誤,但如果您想知道問題是否已報告,這是個不錯的起點。
http://bugs.sun.com/bugdatabase/index.jsp
可免費獲得 Java Developer Connection 成員資格,但需要註冊。Sun 的「For Developers」網頁上會提供有關如何成為 Java Developer Connection 成員的詳細資訊。
若要報告新的錯誤或提交功能請求,請將郵件傳送至 imq-feedback@sun.com。
本節說明與安裝 Message Queue 4.1 版相關的問題。
Message Queue 4.1 版由新的安裝程式所安裝,該安裝程式也會安裝及升級 Message Queue 所需的共用元件,例如 JDK、NSS 程式庫、JavaHelp 等。此安裝程式與 Java Enterprise System (JES) 安裝程式不會共用相同的產品登錄。如果 Message Queue 安裝程式把隨著 JES 安裝的 Message Queue 版本移除,然後升級至 Message Queue 4.1,則 JES 產品登錄的狀態可能會不一致。因此,執行 JES 解除安裝程式時,它可能會不慎移除 Message Queue 4.1 以及並非由其安裝的相依共用元件。
升級由 JES 安裝程式所安裝之軟體的最佳方式如下所示。
使用 JES 解除安裝程式移除 Message Queue 及其共用元件。
使用 Message Queue 安裝程式安裝 Message Queue 4.1。
Message Queue 4. 1 安裝程式的 [JDK Selection] 畫面可讓您選取系統上現有的 JDK/JRE,供 Message Queue 使用。不過所示的清單也會包含用於執行安裝程式應用程式的 JRE。此 JRE 是安裝程式的隨附軟體,並未實際安裝在系統上。(錯誤 6585911)
安裝程式所使用的 JRE 需透過其路徑加以辨識,此路徑應位於解壓縮後的安裝程式目錄之下,並應包含 mq4_1–installer 子目錄。例如:
some_directory/mq4_1–installer/usr/jdk/instances/jdk1.5.0/jre
請勿選取此 JRE 供 Message Queue 使用。請改選取系統上的其他 JDK。若不存在,請採用適用於您的平台的動作。
Solaris 或 Linux:選取 [安裝和使用預設 JDK]。
Windows:下載並安裝 JDK,再執行 Message Queue 4.1 安裝程式。
在 Windows 上安裝 Message Queue 時,請注意下列限制。
安裝程式並未將 Message Queue 的項目增加至 [開始]>[程式集] 功能表 (錯誤 6567258)。請依照「Sun Java System Message Queue 4.1 Administration Guide」中的「Starting the Administration Console」所述,使用指令行啟動管理主控台。
安裝程式並未將 IMQ_HOME\mq\bin 目錄增加至 PATH 環境變數。(錯誤 6567197)。當使用者呼叫 Message Queue 公用程式 (IMQ_HOME\mq\bin\command) 時,需要將此項目增加至其 PATH 環境變數,或提供完整的路徑名稱。
安裝程式未將項目增加至 Windows 登錄以表示已安裝 Message Queue。
當安裝程式以無訊息模式執行時,會立即返回。安裝會確實執行,但是使用者無法知道無訊息安裝究竟於何時完成。(錯誤 6586560)
Windows 不支援文字模式 (installer –t)。在 Windows 上以文字模式執行安裝程式會出現錯誤訊息。即使安裝程式在非英文的語言環境中執行,此訊息還是會以英文顯示。(錯誤 6594142)
即使安裝程式在非英文的語言環境中執行,安裝程式的 [安裝主目錄] 畫面上還是會以英文顯示字串「Install Home」。(錯誤 6592491)
錯誤訊息和「不完整」摘要狀態會誤導嘗試使用 installer-n 指令進行安裝的使用者。但指令實際上已成功執行。(錯誤 6594351)
下列問題會影響 Linux 平台上的安裝作業。
[JDK 選擇] 面板上的捲動清單僅會顯示一個項目。因此很難在清單中選取其他 JDK。(錯誤 6584735)
若 JDK 是最新的版本且使用者在 [JDK 選擇] 畫面上選取 [安裝預設 JDK],則安裝程式仍會嘗試安裝,並報告無法安裝套裝軟體。但即使發生此問題,安裝仍會成功完成。(錯誤 6581310)
當安裝程式以模擬測試模式 (installer –n ) 執行時,[摘要] 畫面會出現錯誤訊息,同時顯示安裝狀態為「不完整」。此為錯誤且有誤導之嫌;模擬測試不會在系統上進行任何安裝,而只會建立後續可用於安裝的回覆檔。(錯誤 6594351)
如果系統上存在舊版的 Message Queue 本土化 RPM,則在 [多語言套裝軟體] 畫面上選取 [安裝 Message Queue 多語言套裝軟體] 核取方塊時,進行 Message Queue 4.1 本土化 RPM 安裝會失敗。安裝失敗是因為與之前的 3.7 UR1 安裝之 Il8 套裝軟體發生衝突。(錯誤 6594381)
解決方法:使用 rpm –e 指令手動移除本土化 RPM,再執行4.1 安裝程式。若要判斷此處相關的 RPM,請參閱「Sun Java System Message Queue 4.1 Installation Guide」中的「Message Queue Packages (RPMs)」。
這些問題會影響所有平台上的安裝作業。
當安裝程式正在安裝 Message Queue 4.1 並顯示 [進度] 畫面時,可使用 [取消] 按鈕。此時選取 [取消] 按鈕會導致安裝不完整或中斷。(錯誤 6595578)
安裝程式的 [摘要] 畫面包含數個連結,按一下即可啟動記錄或摘要頁面檢視器。若使用視窗的關閉按鈕「X」而非標示為 [關閉] 的按鈕來關閉此檢視器視窗,將無法再次顯示此檢視器視窗。(錯誤 6587138)
解決方法:使用標示為 [關閉] 的按鈕關閉視窗。
當系統的 Message Queue 與 NSS/NSPR 均為舊版時,安裝程式的升級僅會列出 Message Queue 需要升級,而不會提及 NSS/NSPR 需要升級。僅 [更新] 畫面存在此問題,因為所有相關的軟體都將當做安裝程序的一部分進行升級 (如顯示正確資訊的 [準備好要安裝] 畫面所示)。(錯誤 6580696)
解決方法:不需要,因為如果 NSS/NSPR 檔案不是最新的檔案,便會解除安裝舊版並安裝新版。
當安裝程式或解除安裝程式以文字模式 (installer –t ) 執行時,[摘要] 畫面會顯示包含記錄/摘要檔案的目錄,但不會列出這些檔案的名稱。(錯誤 6581592)
指定不存在檔案的名稱時,會產生不一致且不清楚的錯誤訊息。(錯誤 6587127)
安裝程式會以不易理解的格式顯示 Message Queue 的版本資訊。(錯誤 6586507)
在 Solaris 平台上,請參照下表以判斷所安裝的版本。
表 1–11 版本格式
安裝程式所顯示的版本 |
Message Queue 的發行版本 |
---|---|
4.1.0.0 |
4.1 |
3.7.0.1 |
3.7 UR1 |
3.7.0.2 |
3.7 UR2 |
3.7.0.3 |
3.7 UR3 |
3.6.0.0 |
3.6 |
3.6.0.1 |
3.6 SP1 |
3.6.0.2 |
3.6 SP2 |
3.6.0.3 |
3.6 SP3 |
3.6.0.4 |
3.6 SP4 |
針對 3.6 SP4 的修補程式版本 (例如 3.6 SP4 Patch 1),安裝程式顯示的發行版本字串會維持不變。您需要執行指令 imqbrokerd –version 以判斷實際版本。
在 Linux 平台上無法提供簡易格式轉換。安裝程式顯示在 Linux 上的版本編號使用下列格式。
<majorReleaseNumber>.<minorReleaseNumber>-<someNumber>
例如,3.7–22。這表示其為 3.7 發行版本的其中之一,但未指定是哪一個特定版本。若要判斷特定版本,請執行指令 imqbrokerd —version。
下列問題與本土化問題相關。
當安裝程式在非英文語言環境中以文字模式 (installer –t ) 執行時,多位元組字元會顯示為亂碼。(錯誤 6586923)
安裝程式的 [摘要] 畫面可讓使用者檢視摘要報告。但是,若安裝程式執行於多位元組的語言環境中,則此報告 (HTML 頁面) 會顯示亂碼。(錯誤 6587112)
解決方法:編輯 HTML 檔案以修正其中指定的字元集。HTML 檔案應包含如下的內容。
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8
以 locale_name.UTF-8 取代「UTF-8」。例如,Solaris 上的 ja_JA.UTF-8 或 ko.UTF-8;Linux 上的 ja_JA.utf8 或 ko_KO.utf8。
安裝程式 [進度] 畫面上的進度列顯示亂碼。工具提示在非英文的語言環境中為程式內定。(錯誤 6591632)
Windows 上不支援文字模式 (installer –t)。在 Windows 上以文字模式執行安裝程式會出現錯誤訊息。即使安裝程式在非英文的語言環境中執行,此訊息還是不會本土化。(錯誤 6594142)
不論安裝程式執行的語言環境為何,安裝程式的 [授權] 畫面皆會顯示英文授權文字。(錯誤 6592399)
解決方法:若要存取本土化的授權檔案,請參閱 LICENSE_MULTILANGUAGE.pdf 檔案。
安裝程式用法說明文字並未本土化。(錯誤 6592493)
安裝程式摘要 HTML 頁面上顯示的字串「None」已程式內定為英文。(錯誤 6593089)
法語以外語言環境的版權頁未本土化。(錯誤 6590992)
當安裝程式在德文語言環境中執行時,[歡迎] 畫面無法顯示其他語言環境中所示的完整文字。(錯誤 6592666)
安裝程式的 [安裝主目錄] 畫面上所示的字串「Install Home」並未本土化。即使安裝程式在非英文的語言環境中執行,還是會顯示為英文。(錯誤 6592491)
當安裝程式以文字模式 (installer –t ) 執行時,不論安裝程式執行的語言環境為何,皆會使用英文回應選項「Yes」和「No」。(錯誤 6593230)
安裝程式的 [JDK 選擇] 畫面上的瀏覽按鈕工具提示已程式內定為英文。(錯誤 6593085)
在 Message Queue 之前的版本中,可以在下列指令中使用 —p 或 —password 選項,以互動方式指定密碼:imqcmd、imqbrokerd 和 imdbmgr。自 4.0 版起,這些選項已停用。您必須依下列方式提供密碼。
在僅用於儲存密碼的檔案中,將密碼特性設定為所需的值。
使用下列語法指定密碼檔案中的密碼。
PasswordPropertyName= MyPassword
使用 —passfile 選項傳遞密碼檔案的名稱。
密碼檔案可包含下列一或多個密碼。
用於開啟 SSL 金鑰庫的金鑰庫密碼。使用 imq.keystore.password 特性指定此密碼。
用來與 LDAP 目錄進行安全連線的 LDAP 儲存庫密碼 (若連線不是匿名)。使用 imq.user_repository.ldap.password 特性指定此密碼。
用來連線至 JDBC 相容資料庫的 JDBC 資料庫密碼。使用 imq.persist.jdbc.vendorName.password 特性指定此密碼。特性名稱的 vendorName 元件是指定資料庫供應商的變數。選項包含 hadb、derby、pointbase、oracle 或 mysql。
imqcmd 指令 (可執行代理程式管理作業) 的密碼。使用 imq.imqcmd.password 特性指定此密碼。
在下列範例中,JDBC 資料庫的密碼會設定為 abracadabra。
imq.persist.jdbc.mysql.password=abracadabra
您可以配置代理程式使用以下列方式建立的密碼檔案。
設定代理程式之 config.properties 檔案中的下列特性。
imq.passfile.enabled=true |
imq.passfile.dirpath=MyFileDirectory |
imq.passfile.name=MyPassfileName |
使用 imqbrokerd 指令的 —passfile 選項。
imqbrokerd —passfile MyPassfileName
本節涵蓋 Message Queue 4.1 中的一般問題。其中部分問題已在 Message Queue 之前的版本中出現。
當使用 HTTP 傳輸的 JMS 用戶端突然終止 (例如,使用 Ctrl-C) 時,代理程式將需要大約一分鐘來釋放用戶端連線以及所有相關的資源。
如果一分鐘內有其他用戶端實例啟動,且其嘗試使用相同的 ClientID、長期訂閱或佇列,則可能會收到「用戶端 ID 已在使用」異常。這不是實際發生的問題,它只是上述終止程序的副作用。如果用戶端在延遲大約一分鐘後啟動,則所有作業均可正常執行。
SOAP 用戶端。之前用以參照 mail.jar 和 mail.jar 的 SAAJ 1.2 實作 JAR 並不需要在 CLASSPATH 中。在 SAAJ 1.3 中已移除此參照;因此,Message Queue 用戶端必須將 mail.jar 明確置於 CLASSPATH 中。
下列問題與 Message Queue 的管理及配置相關。
Windows 機器上的 CLASSPATH 中若包含雙引號,則 imqadmin 和 imqobjmgr 公用程式會丟出錯誤 (錯誤 ID 5060769)。
解決方法:您可忽略此錯誤訊息;代理程式會正確地通知用戶所發生的任何錯誤。該錯誤不會影響系統的可靠性。
若提供的值包含空格,則所有 Solaris 與 Windows 程序檔中的 -javahome 選項均無法使用 (錯誤 ID 4683029)。
Message Queue 指令與公用程式使用 javahome 選項,以指定使用哪個替代的 Java 2 相容執行階段。但是,替代 Java 執行階段的路徑名稱不得包含空格。以下是路徑包含空格的範例。
Windows:C:/jdk 1.4
Solaris: /work/java 1.4
解決方法:將 Java 執行階段安裝在不包含空格的位置或路徑中。
imqQueueBrowserMaxMessagesPerRetrieve 屬性指定瀏覽佇列內容時,用戶端執行階段一次可擷取的最大訊息數。請注意,用戶端應用程式始終會擷取佇列上的所有訊息。因此,imqQueueBrowserMaxMessagesPerRetrieve 屬性會影響傳送到用戶端執行階段的佇列訊息分塊方式 (分成數目較少的大型資料塊,或數目較多的小型資料塊),但不會影響所瀏覽的總訊息數。變更此屬性的值可能會影響效能,但不會導致用戶端應用程式取得更多或更少的資料 (錯誤 ID 6387631)。
下列問題會影響 Message Queue 代理程式。
使代理程式執行循環傳送作業的配置方式有些混亂。解決方法很容易且可配置。
將目標屬性 maxNumActiveConsumers 設定為 -1。如此會啟用循環傳送。
將目標屬性 consumerFlowLimit 設定為 1。如此會指定傳送進行到下一個用戶之前,傳送到單一用戶的訊息數。如需不同的資料分塊方式,請將此屬性設定為所需的值。預設會傳送一百則訊息給每個用戶。
當永久存放區開啟過多目標時,代理程式會變得無法存取。(錯誤 ID 4953354)。
解決方法:這種情況是由於代理程式達到系統開啟檔案描述元限制引起的。在 Solaris 和 Linux 上使用 ulimit 指令來增加檔案描述元的限制。
目標若已銷毀,會孤立用戶 (錯誤 ID 5060787)。
目標若已銷毀,會孤立使用中的用戶。一旦使用者被孤立,則無法再接收訊息 (即使目標重新建立)。
解決方法:此問題沒有解決方法。
下列問題會影響叢集代理程式。
此版本僅支援完全連線的代理程式叢集。這意味著,叢集中的每個代理程式必須與叢集中的每個其他代理程式直接通訊。如果您要使用 imqbrokerd -cluster 指令行引數連線代理程式,請務必小心以確保包含叢集中的所有代理程式。
使用 HADB 的代理程式無法處理大於 10 MB 的訊息。(錯誤 6531734)
如果用戶端連線至高可用性代理程式,用戶端執行階段會嘗試重新連線直到成功為止 (不論 imqAddressListIterations 的值設定為何)
如果用戶端連線到屬於某個叢集的代理程式,則目前無法使用 QueueBrowser 瀏覽位於該叢集中遠端代理程式的佇列。用戶端僅能瀏覽與代理程式直接連線的佇列內容。用戶端仍可傳送訊息到任何佇列,或是自叢集中任何代理程式的佇列產生訊息;其限制僅會影響瀏覽。
在傳統叢集中,如果需要將 4.1 版代理程式和 3.x 版代理程式組成叢集,您必須為 4.1 版代理程式設定特性 imq.autocreate.queue.maxNumActiveConsumers=1。否則,代理程式將無法建立叢集連線。
轉換成高可用性叢集時,您可以使用 Message Queue 管理員公用程式 (imqdbmgr),將現有的獨立 HADB 永久性資料存放區轉換成共用 HADB 存放區。指令如下。
imqdbmgr upgrade hastore
您可以在下列情況中使用此公用程式。
從 4.0 版獨立 HADB 存放區改用 4.1 版共用 HADB 存放區。在此情況中,代理程式會自動升級存放區。您接著可執行 imqdbmgr 指令,將升級的資料存放區轉換成共用存放區。
從 4.1 版獨立 HADB 存放區改用共用 HADB 存放區。在此情況中,僅需要執行上述的 imqdbmgr 指令即可將資料存放區轉換成共用存放區。
由於此指令僅支援 HADB 存放區的轉換,因此無法用於將檔案式存放區或其他 JDBC 存放區轉換成共用 HADB 存放區。若之前執行 Message Queue 3.x 版,則為了使用高可用性功能,必須建立 HADB 存放區,然後手動將您的資料遷移至該存放區。
若存放區存留的訊息超出 10,000 則,則使用指令 imqdbmgr upgrade hastore 轉換成 HADB 存放區可能會失敗,並顯示訊息「設定太多鎖定」。(錯誤 ID 6588856)
(解決方法) 使用下列指令增加鎖定數。
hadbm set NumberOfLocks=<desiredNumber>
如需其他資訊,請參閱「Sun Java System Application Server 9.1 Enterprise Edition Troubleshooting Guide」中的「HADB Problems」。
如果某項作業事件確定了 500 則以上的遠端訊息,則代理程式可能會傳回錯誤訊息「HADB-E-12815:表格記憶體空間已用盡。」 (錯誤 ID 6550483)
如需其他資訊,請參閱「Sun Java System Application Server 9.1 Enterprise Edition Troubleshooting Guide」中的「HADB Problems」。
在代理程式叢集中,代理程式會將訊息排入尚未啟動之遠端連線的佇列中 (錯誤 ID 4951010)。
解決方法:只要啟動連線,用戶便會收到訊息。如果用戶連線關閉,訊息會重新傳送至其他的用戶。
在一項作業事件中使用多則遠端代理程式傳送的訊息時,代理程式可能會記錄下列錯誤訊息。該訊息無害,可以忽略:
[26/Jul/2007:13:18:27 PDT] WARNING [B2117]: Message acknowledgement failed from mq://129.145.130.95:7677/?instName=a&brokerSessionUID=3209681167602264320: ackStatus = NOT_FOUND(404)\ Reason = Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed. AckType = MSG_CONSUMED MessageBrokerSession = 3209681167602264320 TransactionID = 3534784765719091968 SysMessageID = 8-129.145.130.95(95:fd:93:91:ec:a0)-33220-1185481094690 ConsumerUID = 3534784765719133952\par [26/Jul/2007:13:18:27 PDT] WARNING Notify commit transaction [8-129.145.130.95(95:fd:93:91:ec:a0)-33220-1185481094690, [consumer:3534784765719133952, type=NONE]] TUID=3534784765719091968 got response: com.sun.messaging.jmq.jmsserver.util.BrokerException: Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed.: com.sun.messaging.jmq.jmsserver.util.BrokerException: Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed.r
在一項作業事件中,如果 imq.txn.reapLimit 特性的值比該作業事件的遠端訊息數小,則會在通知訊息主機代理程式確定該作業事件中的後續訊息時,記錄此訊息。(錯誤 6585449)
解決方法:若要避免此訊息,請增加 imq.txn.reapLimit 特性的值。
在 Windows 平台上,作業事件管理器監視 MBean 的 getTransactionInfo 方法,會傳回作業事件建立時間不正確的作業事件資訊 (錯誤 ID 6393359)。
解決方法:請改用作業事件管理器監視 MBean 的 getTransactionInfoByID 方法。
您必須瞭解與 SOAP 支援相關的兩個問題。
自 Message Queue 4.0 版發行以來,已停止對 SOAP 受管理物件的支援。
SOAP 開發相依於數個檔案:SUNWjaf、SUNWjmail、SUNWxsrt 和 SUNWjaxp。在 Message Queue 4.1 版中,只有使用 JDK 1.6.0 版或更新版本執行 Message Queue 時,才可使用這些檔案。
Sun Java System Message Queue 4.1 包含的下列檔案集,可讓您以二進位格式使用和隨意分發:
fscontext.jar |
jms.jar |
imq.jar |
libmqcrt.so (HPUX) |
imqjmx.jar |
libmqcrt.so (UNIX) |
imqxm.jar |
mqcrt1.dll (Windows) |
jaas.jar |
|
此外,您還可以重新分發 LICENSE 和 COPYRIGHT 檔案。
欲獲得此媒體發佈以來已發行的無障礙功能,請向 Sun 索取依據美國「Section 508」法規進行產品評估所得之結果文件,以便決定最適合佈署無障礙功能解決方案的版本。以下網址將提供應用程式的更新版本:
http://sun.com/software/javaenterprisesystem/get.html
如需有關 Sun 在無障礙功能方面之成果的資訊,請至 http://sun.com/access。
如果您對 Sun Java System Message Queue 存有任何疑問,請使用以下任一機制與 Sun 客戶支援中心連絡:
請至 Sun 軟體支援線上服務,網址為: http://www.sun.com/service/sunone/software
該網站可連結至知識庫、線上支援中心、ProductTracker 以及維護程式和支援連絡號碼。
維護合約上提供的電話派遣維修號碼。
為了讓我們能更有效地幫助您解決問題,當您與支援人員連絡時,請準備好以下資訊:
問題描述,包括問題發生時的情形以及對您作業的影響。
電腦類型、作業系統版本和產品版本,包括所有修補程式和其他可能導致問題的軟體。
用來再現問題的詳細步驟。
所有錯誤記錄或記憶體傾印。
Sun Java System Message Queue 的論壇位於:
http://swforum.sun.com/jive/forum.jspa?forumID=24
我們非常歡迎您的加入討論。
Java 技術論壇中有一個或許您會感興趣的 JMS 論壇。
Sun 致力於提高文件品質,因此誠心歡迎您提出意見與建議。
若要分享您的意見,請至 http://docs.sun.com,並按一下 [Send Comments (傳送您的意見)]。在線上表格中,請提供文件標題及文件號碼。文件號碼位於書本的標題頁或文件的頂部,通常是一組七位或九位數的數字。例如,本書的書名是「Sun Java System Message Queue 4.1 版本說明」,文件號碼為 820-3194。
在您提出意見時,可能需要在表單中輸入英文版書名和文件號碼,本書的英文版文件號碼和書名為:819-7753 和「Sun Java System MessageQueue 4.1 Release Notes」。
您可在下列網際網路位置找到有用的 Sun Java System 資訊:
文件
專業服務
軟體產品和服務
軟體支援服務
支援和知識庫
Sun 支援和培訓服務
諮詢和專業服務
開發者資訊
Sun 開發者支援服務
軟體培訓