Sun Java System Message Queue 3.7 UR1 管理指南

第 4 部分 附錄

附錄 A Message QueueTM 資料的特定平台位置

Sun Java SystemTM Message Queue 資料在不同作業系統平台上會儲存在不同位置。下表顯示各式不同類型的 Message Queue 資料,在下列平台的位置:

下列表格中,instanceName 表示與資料相關的代理程式實例名稱。

Solaris

表 A–1 顯示 Solaris 作業系統上 Message Queue 資料的位置。如果您透過獨立版本的 Sun Java System Application Server 在 Solaris 上使用 Message Queue,其目錄結構將與Windows中所述的結構相似。

表 A–1 Solaris 平台上的 Message Queue 資料位置

資料種類 

位置 

代理程式實例配置特性

/var/imq/instances/instanceName /props/config.properties

代理程式配置檔案範本

/usr/share/lib/imq/props/broker/

永久性存放區 (訊息、目標、長期訂閱、作業事件)

/var/imq/instances/instanceName /fs350 或 JDBC 可存取的資料存放區

代理程式實例記錄檔目錄 (預設位置)

/var/imq/instances/instanceName /log/

受管理物件 (物件存放區)

您選擇的本機目錄或 LDAP 伺服器 

安全性:使用者儲存庫

/var/imq/instances/instanceName /etc/passwd 或 LDAP 伺服器

安全性:存取控制檔案 (預設位置)

/var/imq/instances/instanceName /etc/accesscontrol.properties

安全性:密碼檔案目錄 (預設位置)

/var/imq/instances/instanceName /etc/

安全性:範例密碼檔案

/etc/imq/passfile.sample

安全性:代理程式金鑰庫檔案位置 

/etc/imq/

JavaDoc API 文件

/usr/share/javadoc/imq/index.html

範例應用程式與配置

/usr/demo/imq/

Java 歸檔 (.jar)、Web 歸檔 (.war) 與資源介面歸檔 (.rar) 檔案

/usr/share/lib/

Linux

表 A–2 顯示 Linux 作業系統上 Message Queue 資料的位置。

表 A–2 Linux 平台上的 Message Queue 資料位置

資料種類 

位置 

代理程式實例配置特性

/var/opt/sun/mq/instances/instanceName /props/config.properties

代理程式配置檔案範本

/opt/sun/mq/private/share/lib/props/

永久性存放區 (訊息、目標、長期訂閱、作業事件)

/var/opt/sun/mq/instances/instanceName /fs350/ 或 JDBC 可存取的資料存放區

代理程式實例記錄檔目錄 (預設位置)

/var/opt/sun/mq/instances/instanceName /log/

受管理物件 (物件存放區)

您選擇的本機目錄或 LDAP 伺服器 

安全性:使用者儲存庫

/var/opt/sun/mq/instances/instanceName /etc/passwd 或 LDAP 伺服器

安全性:存取控制檔案 (預設位置)

/var/opt/sun/mq/instances/instanceName /etc/accesscontrol.properties

安全性:密碼檔案目錄 (預設位置)

/var/opt/sun/mq/instances/instanceName /etc/

安全性:範例密碼檔案

/etc/opt/sun/mq/passfile.sample

安全性:代理程式金鑰庫檔案位置 

/etc/opt/sun/mq/

JavaDoc API 文件

/opt/sun/mq/javadoc/index.html

範例應用程式與配置

/opt/sun/mq/examples/

Java 歸檔 (.jar)、Web 歸檔 (.war) 與資源介面歸檔 (.rar) 檔案

/opt/sun/mq/share/lib/

共用程式庫 (.so) 檔案

/opt/sun/mq/lib/

Windows

表 A–3 顯示 Windows 作業系統上 Message Queue 資料的位置。當 Message Queue 隨附於獨立版本的 Sun Java System Application Server 時,此表格也適用於 Solaris 平台。該版本的應用程式伺服器並不是隨附於 Solaris 或 Sun Java Enterprise System。使用表 A–3 中的路徑名稱,但將斜線字元的方向從 Windows 反斜線 (\) 變更為 Solaris 正斜線 (/)。請參閱目錄變數慣例以取得 IMQ_HOMEIMQ_VARHOME 目錄變數的定義。

表 A–3 Windows 平台上的 Message Queue 資料位置

資料種類 

位置 

代理程式實例配置特性

IMQ_VARHOME\instances\instanceName \props\config.properties

代理程式配置檔案範本

IMQ_HOME\lib\props\broker\

永久性存放區 (訊息、目標、長期訂閱、作業事件)

IMQ_VARHOME\instances\instanceName \fs350\ 或 JDBC 可存取的資料存放區

代理程式實例記錄檔目錄 (預設位置)

IMQ_VARHOME\instances\instanceName \log\

受管理物件 (物件存放區)

您選擇的本機目錄或 LDAP 伺服器 

安全性:使用者儲存庫

IMQ_VARHOME\instances\instanceName \etc\passwd 或 LDAP 伺服器

安全性:存取控制檔案 (預設位置)

IMQ_VARHOME\instances\instanceName \etc\accesscontrol.properties

安全性:密碼檔案目錄 (預設位置)

IMQ_HOME\etc\

安全性:範例密碼檔案

IMQ_HOME\etc\passfile.sample

安全性:代理程式金鑰庫檔案位置 

IMQ_HOME\etc\

JavaDoc API 文件

IMQ_HOME\javadoc\index.html

範例應用程式與配置

IMQ_HOME\demo\

Java 歸檔 (.jar)、Web 歸檔 (.war) 與資源介面歸檔 (.rar) 檔案

IMQ_HOME\lib\

附錄 B Message QueueTM 介面的穩定性

Sun Java SystemTM Message Queue 使用許多介面以協助管理員自動進行工作。本附錄可根據穩定性對介面進行分類。介面愈穩定,在後續版本中變更的可能性愈小。

附錄中沒有列出來的介面都是私有的介面,且不提供給客戶使用。

分類機制

附錄 BMessage QueueTM 介面的穩定性 中描述穩定性分類機制。

表 B–1 介面穩定性分類機制

分類 

說明 

私有 

不由客戶直接使用。可在任何版次中變更或移除。 

改進中 

由客戶使用。主要發行版本 (如 3.0、4.0) 或次要發行版本 (如 3.1、3.2) 可能會有不相容的變更。應謹慎而緩慢地進行變更。應進行適當的操作以確保所有的變更均相容,但是這點無法保證。 

穩定 

由客戶使用。僅主要發行版本 (如 3.0 或 4.0) 可能會有不相容的變更。 

標準 

由客戶使用。這些介面由正式標準定義,並由標準組織控制。幾乎沒有與這些介面不相容的變更。 

不穩定 

由客戶使用。主要發行版本 (如 3.0、4.0) 或次要發行版本 (如 3.1、3.2) 可能會有不相容的變更。通知客戶在未來版次中,這些介面可能會以不相容的方式進行大幅度移除或變更。建議客戶不要在不穩定的介面上建立明確的相依性。 

介面穩定性

附錄 BMessage QueueTM 介面的穩定性 列出各種介面和介面的分類。

表 B–2 Message Queue 介面的穩定性

介面 

分類 

指令行介面

 

imqbrokerd 指令行介面

改進中 

imqadmin 指令行介面

不穩定 

imqcmd 指令行介面

改進中 

imqdbmgr 指令行介面

不穩定 

imqkeytool 指令行介面

改進中 

imqobjmgr 指令行介面

改進中 

imqusermgr 指令行介面

不穩定 

imqbrokerdimqadmin imqcmdimqdbmgrimqkeytool imqobjmgrimqusermgr 的輸出

不穩定 

指令

 

imqobjmgr 指令檔案

改進中 

imqbrokerd 指令

穩定 

imqadmin 指令

不穩定 

imqcmd 指令

穩定 

imqdbmgr 指令

不穩定 

imqkeytool 指令

穩定 

imqobjmgr 指令

穩定 

imqusermgr 指令

不穩定 

API

 

JMS API (javax.jms)

標準 

JAXM API (javax.xml)

標準 

C-API 

改進中 

C-API 環境變數 

不穩定 

訊息型監視 API 

改進中 

受管理物件 API (com.sun.messaging)

改進中 

.jar 與 .war 檔案

 

imq.jar 位置和名稱

穩定 

jms.jar 位置和名稱

改進中 

imqbroker.jar 位置和名稱

私有 

imqutil.jar 位置和名稱

私有 

imqadmin.jar 位置和名稱

私有 

imqservlet.jar 位置和名稱

改進中 

imqhttp.war 位置和名稱

改進中 

imqhttps.war 位置和名稱

改進中 

imqjmsra.rar 位置和名稱

改進中 

imqxm.jar 位置和名稱

改進中 

jaxm-api.jar 位置和名稱

改進中 

saaj-api.jar 位置和名稱

改進中 

saaj-impl.jar 位置和名稱

改進中 

activation.jar 位置和名稱

改進中 

mail.jar 位置和名稱

改進中 

dom4j.jar 位置和名稱

私有 

fscontext.jar 位置和名稱

不穩定 

檔案

 

代理程式記錄檔的位置和內容格式 

不穩定 

密碼檔案 

不穩定 

accesscontrol.properties 檔案

不穩定 

系統目標

 

mq.sys.dmq 目標

穩定 

mq.metrics.* 目標

改進中 

配置特性

 

Message Queue JMS 資源介面配置特性 

改進中 

Message Queue JMS 資源介面 JavaBean 和 ActivationSpec 配置特性 

改進中 

訊息特性和格式

 

停用的訊息佇列訊息特性,JMSXDeliveryCount

標準 

停用的訊息佇列訊息特性,JMS_SUN_*

改進中 

Message Queue 用戶端訊息特性:JMS_SUN_*

改進中 

度量或監視訊息的 JMS 訊息格式 

改進中 

其他

 

Message Queue JMS 資源介面套裝軟體,com.sun.messaging.jms.ra

改進中 

儲存永久性訊息的 JDBC 模式 

改進中 

附錄 C HTTP/HTTPS 支援

Message QueueTM, Enterprise Edition 包含對 Java 用戶端的支援,以便藉由 HTTP 或安全 HTTP (HTTPS) 傳輸 (而不是直接透過 TCP 連線) 與代理程式進行通訊。C 用戶端不支援 HTTP/HTTPS。

本附錄描述用於啟用此支援的架構,並介紹讓用戶端使用 HTTP 型連線進行 Message Queue 訊息傳送所需的設定工作。它包含下面各節:

HTTP/HTTPS 支援架構

Message Queue 訊息傳送可在 HTTP/HTTPS 連線的上層執行。由於防火牆通常會允許 HTTP/HTTPS 連線通過防火牆,因此允許存在用戶端應用程式與代理程式被防火牆分隔的狀況。

圖 C–1 顯示提供 HTTP/HTTPS 支援所需的主要元件。

圖 C–1 HTTP/HTTPS 支援架構

圖表顯示 HTTP 代理伺服器和 HTTP 通道 Servlet 如何讓訊息通過防火牆。圖以文字介紹。

圖 C–1 中所示,HTTP 和 HTTPS 支援的架構非常相似。主要區別在於,對於 HTTPS (httpsjms 連線服務),通道 Servlet 與用戶端應用程式以及與代理程式兩者之間,都具有安全的連線。

與代理程式的安全連線是透過已啟用 SSL 的通道 Servlet (Message Queue 的 HTTPS 通道 Servlet) 所提供。此通道 Servlet 會將自我簽署的憑證傳送至請求連線的任何代理程式。代理程式使用此憑證來建立與 HTTPS 通道 Servlet 的加密連線。一旦建立此連線,用戶端應用程式和 Web 伺服器/應用程式伺服器即透過用戶端應用程式與通道 Servlet 之間的安全連線進行通訊。

啟用 HTTP 支援

以下各節描述啟用 HTTP 支援所需的步驟。

Procedure啟用 HTTP 支援

  1. 部署 HTTP 通道 Servlet。您可以在下列伺服器上部署 HTTP 通道 Servlet:

    • Sun Java SystemTM Web Server

      • Sun Java System Application Server

  2. 配置代理程式的 httpjms 連線服務,並啟動代理程式。

  3. 配置 HTTP 連線。

步驟 1. 部署 HTTP 通道 Servlet

您可以將 HTTP 通道 Servlet 部署為 Sun Java System Web Server 或 Sun Java System Application Server 上的 Web 歸檔 (.war) 檔案。

將 HTTP 通道 Servlet 部署為 .war 檔案,需要使用 Web 伺服器/應用程式伺服器所提供的部署機制。HTTP 通道 Servlet .war 檔案 (imqhttp.war ) 位於包含 .jar .war.rar 檔案的目錄中,此目錄的位置會因作業系統而異 (請參閱附錄 AMessage QueueTM 資料的特定平台位置)。

.war 檔案包括部署描述元,而該描述元會包含 Web 伺服器/應用程式伺服器載入和執行 Servlet 所需之基本配置資訊。因 Web 伺服器/應用程式伺服器的不同,您也可能必須指定 Servlet URL 的環境根目錄部分。

部署為 Web 歸檔檔案

如需在 Sun Java System Web Server 上進行部署的相關資訊,請參閱在 Sun Java System Web Server 上部署 HTTP 通道 Servlet

如需在 Sun Java System Application Server 上進行部署的相關資訊,請參閱在 Sun Java System Application Server 上部署 HTTP 通道 Servlet

在 Sun Java System Web Server 上部署 HTTP 通道 Servlet

以下說明是在 Sun Java System Web Server 上的部署。您可以透過使用 Web 瀏覽器存取 Servlet URL,來驗證 HTTP 通道 Servlet 是否已部署成功。它應顯示狀態資訊。

Procedure將 HTTP 通道 Servlet 部署為 .war 檔案

  1. 在瀏覽器型的管理 GUI 中,選擇 [虛擬伺服器類別] 標籤,然後選擇 [管理類別]。

  2. 選擇適當的虛擬伺服器類別名稱 (例如 defaultClass),然後按一下 [管理] 按鈕。

  3. 選擇 [管理虛擬伺服器]。

  4. 選取適當的虛擬伺服器名稱,然後按一下 [管理] 按鈕。

  5. 選擇 [Web 應用程式] 標籤。

  6. 按一下 [部署 Web 應用程式]。

  7. 為 [WAR 檔案開啟] 和 [WAR 檔案路徑] 欄位選擇適當的值,讓其指向 imqhttp.war 檔案,您可以在某個目錄 (目錄位置因作業系統而異) 中找到此檔案 (請參閱附錄 AMessage QueueTM 資料的特定平台位置)。

  8. 在 [應用程式 URI] 欄位中輸入路徑。

    [應用程式 URI] 欄位值為通道 Servlet URL 的 /contextRoot 部分:

    http://hostName :portNumber / contextRoot/tunnel

    舉例來說,如果您將 contextRoot 設定至 imq,則 [應用程式 URI] 欄位應為:

    /imq

  9. 輸入應部署 Servlet 的安裝目錄路徑 (通常位於 Sun Java System Web Server 安裝根目錄下)。

  10. 按一下 [確定]。

  11. 重新啟動 Web 伺服器實例。

    此時,即可從以下位址存取 Servlet:


    http://hostName:portNumber/
    contextRoot/tunnel

    現在,用戶端就可以使用此 URL 連線至使用 HTTP 連線的訊息服務。

停用伺服器存取記錄

您不必停用伺服器存取記錄,但是如果您停用記錄,將會獲得更好的效能。

Procedure停用伺服器存取記錄

  1. 選擇 [狀態] 標籤。

  2. 選擇 [記錄喜好設定頁面]。

    使用記錄用戶端存取控制來停用記錄。

在 Sun Java System Application Server 上部署 HTTP 通道 Servlet

本節描述如何在 Sun Java System Application Server 上將 HTTP 通道 Servlet 部署為 .war 檔案,接著再配置通道 Servlet,以便接受來自 Message Queue 代理程式的連線。

您需要執行下列兩個步驟:

使用部署工具

Procedure在應用程式伺服器環境中部署 HTTP 通道 Servlet

  1. 在網路型的管理 GUI 中,選擇

    [應用程式伺服器] > [實例] > [server1] > [應用程式] > [Web 應用程式]

  2. 按一下 [部署] 按鈕。

  3. 在 [檔案路徑:] 文字欄位輸入 HTTP 通道 Servlet .war 檔案 (imqhttp.war) 的位置,再按一下 [確定]。

    imqhttp.war 檔案的位置會因您的作業系統而異 (請參閱附錄 AMessage QueueTM 資料的特定平台位置)。

  4. 設定 [環境根目錄] 文字欄位的值,再按一下 [確定]。

    [環境根目錄] 欄位值為通道 Servlet URL 的 /contextRoot 部分:

    http:// hostName :portNumber / contextRoot/tunnel

    例如,您可以將 [環境根目錄] 欄位設定為 /imq

    此時會出現一個確認畫面,確認通道 Servlet 已成功部署並且依預設已啟用,以及該通道 Servlet 的位置。在本例中其位置如下:


    /var/opt/SUNWappserver8/domains/domain1/server1/applications/
    j2ee-modules/imqhttp_1

    此時,即可從以下 URL 存取 Servlet:


    http://hostName:portNumber/
    contextRoot/tunnel

    現在,用戶端就可以使用此 URL 連線至使用 HTTP 連線的訊息服務。

修改 server.policy 檔案

應用程式伺服器會實施一組預設的安全策略,除非將其修改,否則這組安全策略會阻止 HTTP 通道 Servlet 接受來自 Message Queue 代理程式的連線。

每個應用程式伺服器實例,皆有一個包含其安全策略或規則的檔案。例如在 Solaris 上,server1 實例的此檔案位置是:

/var/opt/SUNWappserver8/domains/domain1/server1/config/
server.policy

若要配置通道 Servlet 接受來自 Message Queue 代理程式的連線,則必須在此檔案中新增一個項目。

Procedure修改應用程式伺服器的 server.policy 檔案

  1. 開啟 server.policy 檔案。

  2. 增加以下項目:


    grant codeBase
    "file:/var/opt/SUNWappserver8/domains/domain1/server1/
                    applications/j2ee-modules/imqhttp_1/-”
    {
            permission java.net.SocketPermission "*",
                    “connect,accept,resolve";
    };

步驟 2. 配置 httpjms 連線服務

預設情況下,不會針對代理程式啟動 HTTP 支援,所以您必須重新配置代理程式,以啟動 httpjms 連線服務。重新配置後,便可如啟動代理程式中所述啟動代理程式。

Procedure啟動 httpjms 連線服務

  1. 開啟代理程式的實例配置檔案。

    實例配置檔案的儲存目錄名稱,與此配置檔案相關聯之代理程式實例名稱 (instanceName) 相同 (請參閱附錄 AMessage QueueTM 資料的特定平台位置):

    /instances/ instanceName /props/config.properties

  2. httpjms 值增加至 imq.service.activelist 特性:


    imq.service.activelist=jms,admin,httpjms

    啟動時,代理程式會尋找在其主機電腦上執行的 Web 伺服器/應用程式伺服器和 HTTP 通道 Servlet。但是,若要存取遠端通道 Servlet,您可以重新配置 servletHostservletPort 連線服務特性。

    您還可以重新配置 pullPeriod 特性,以提昇效能。步驟 2. 配置 httpjms 連線服務中詳細介紹了 httpjms 連線服務配置特性。

    特性 

    說明 

    imq.httpjms.http.servletHost

    如有必要,請變更此值以指定執行 HTTP 通道 Servlet 的主機之名稱 (主機名稱或 IP 位址)。(可以是遠端主機,或本地主機上的特定主機名稱。)預設值:localhost

    imq.httpjms.http. servletPort

    變更此值,以指定代理程式用於存取 HTTP 通道 Servlet 的連接埠號。(如果 Web 伺服器上的預設連接埠已變更,則您必須相應地變更此特性。)預設值:7675

    imq.httpjms.http. pullPeriod

    指定用戶端執行階段發出從代理程式取出訊息之 HTTP 請求的時間間隔 (以秒為單位)。(請注意,此特性於代理程式上進行設定,並傳播至用戶端執行階段。)如果值為零或負數,則用戶端將始終擱置一個 HTTP 請求,以便隨時做好準備從而儘快取出訊息。若用戶端數目過大,可能會導致耗用大量的 Web 伺服器/應用程式伺服器資源,造成伺服器無法回應。在此類情況下,您應將 pullPeriod 特性設定為正的秒數。此特性設定用戶端的 HTTP 傳輸驅動程式在發出後續取出請求之前,所需等待的時間。將此值設定為正數可節省 Web 伺服器/應用程式伺服器資源,但會影響用戶端所監視的回應次數。預設值:-1

    imq.httpjms.http. connectionTimeout

    指定丟出異常之前,用戶端執行階段等待來自 HTTP 通道 Servlet 之回應的時間 (以秒為單位)。(請注意,此特性於代理程式上進行設定,並傳播至用戶端執行階段。)此特性也會指定代理程式與 HTTP 通道 Servlet 進行通訊後,需等待多長時間後才釋放連線。因為在此情況下,代理程式與通道 Servlet 無法得知存取 HTTP Servlet 的用戶端是否已異常中斷,因此必須設定逾時時間。預設值:60

步驟 3. 配置 HTTP 連線

用戶端應用程式必須使用已適當配置的連線工廠受管理物件,以建立與代理程式的 HTTP 連線。本節說明 HTTP 連線配置問題。

配置連線工廠

若要啟用 HTTP 支援,您必須將連線工廠的 imqAddressList 屬性設定為 HTTP 通道 Servlet URL。HTTP 通道 Servlet URL 的一般語法如下:

http://hostName:portNumber

/contextRoot/tunnel

其中 hostName:portNumber 為託管 HTTP 通道 Servlet 之 Web 伺服器/應用程式伺服器的名稱和連接埠;contextRoot 為在 Web 伺服器/應用程式伺服器上部署通道的路徑設定。

如需連線工廠屬性的一般資訊與 imqAddressList 屬性的特定資訊,請參閱「Message Queue Developer's Guide for Java Clients」。

您可以透過以下方法之一設定連線工廠屬性:

使用單一 Servlet 存取多重代理程式

若要執行多個代理程式,您無需配置多個 Web 伺服器/應用程式伺服器和 Servlet 實例。您可以讓同時執行的代理程式,共用單一 Web 伺服器/應用程式伺服器和 HTTP 通道 Servlet 實例。如果多個代理程式實例共用一個通道 Servlet,您必須配置 imqAddressList 連線工廠屬性,配置內容如下:

http://hostName:portNumber

/contextRoot/tunnel?ServerName=
bkrHostName:instanceName

其中 bkrHostName 為代理程式實例主機名稱;instanceName 為用戶端所要存取的特定代理程式實例名稱。

若要檢查您為 bkrHostName instanceName 輸入的字串是否正確,請從瀏覽器存取 Servlet URL,並產生 HTTP 通道 Servlet 的狀態報告。此報告將列出 Servlet 所存取的所有代理程式:


HTTP tunnel servlet ready.
Servlet Start Time : Thu May 30 01:08:18 PDT 2005
Accepting TCP connections from brokers on port : 7675
Total available brokers = 2
Broker List :
   jpgserv:broker2
   cochin:broker1

使用 HTTP 代理伺服器

如果您要使用 HTTP 代理伺服器存取 HTTP 通道 Servlet:

您可以使用可啟動用戶端應用程式之指令的 -D 選項來設定這些特性。

啟用 HTTPS 支援

以下各節描述啟用 HTTPS 支援所需的步驟。這些步驟與啟用 HTTP 支援中的步驟相似,但是增加了產生和存取 SSL 憑證所需的步驟。

Procedure啟用 HTTPS 支援

  1. 為 HTTPS 通道 Servlet 產生自我簽署的憑證

  2. 修改 HTTP 通道 Servlet .war 檔案的部署描述元,使其:

    • 指向您放置憑證金鑰庫的位置

      • 指定憑證金鑰庫密碼

  3. 部署 HTTP 通道 Servlet。您可以在下列伺服器上部署 HTTP 通道 Servlet:

    • Sun Java System Web Server

      • Sun Java System Application Server

  4. 配置代理程式的 httpsjms 連線服務,並啟動代理程式。

  5. 配置 HTTPS 連線。

    以下各節中將更加詳細地說明這些步驟中的每一步。

步驟 1. 為 HTTPS 通道 Servlet 產生自我簽署的憑證

在假設用戶端正與已知且可信任的伺服器通訊的情況下,Message Queue 的 SSL 支援可保護線上資料。因此,僅使用自我簽署的伺服器憑證即可實施 SSL。在 httpsjms 連線服務架構中,HTTPS 通道 Servlet 所扮演的角色,就是代理程式與應用程式用戶端的伺服器。

執行 keytool 公用程式,以便為通道 Servlet 產生自我簽署的憑證。在指令提示符號下輸入以下內容:

JRE_HOME/bin/keytool -servlet keyStoreLocation

此公用程式將提示您提供所需的資訊。(在 Unix 系統上,需要以超級使用者 (root) 的身份執行 keytool,才擁有建立金鑰庫的權限。)

首先,keytool 會提示您提供金鑰庫密碼,以及某些組織資訊,然後提示您確認。接收到確認之後,它會在產生金鑰對時暫停。然後它會要求您提供密碼,以鎖定特定的金鑰對 (金鑰密碼);請按 Return 鍵以回應此提示:這會使金鑰密碼與金鑰庫密碼相同。


備註 –

請記住您提供的密碼:稍後您必須將此密碼提供給通道 Servlet,它才可開啟金鑰庫。


JDK keytool 公用程式會產生自我簽署的憑證,並將它放置在 Message Queue 的金鑰庫檔案中,該檔案位於 keyStoreLocation 引數所指定的位置。


備註 –

HTTPS 通道 Servlet 必須能夠查看此金鑰庫。請確定將位於 keyStoreLocation 中所產生的金鑰庫移動/複製到 HTTPS 通道 Servlet 可存取的位置 (請參閱步驟 3. 部署 HTTPS 通道 Servlet)。


步驟 2. 修改 HTTP 通道 Servlet .war 檔案的描述元檔案

HTTP 通道 Servlet 的 .war 檔案包括部署描述元,其中包含 Web 伺服器/應用程式伺服器載入和執行 Servlet 所需的基本配置資訊。

imqhttps.war 檔案的部署描述元無法知道您已將通道 Servlet 所需的金鑰庫檔案置於何處。所以您需要編輯通道 Servlet 的部署描述元 (XML 檔案),以便在部署 imqhttps.war 檔案之前指定金鑰庫的位置和密碼。

Procedure修改 HTTPS 通道 Servlet .war 檔案

  1. .war 檔案複製到暫存目錄。

    cp /usr/share/lib/imq/imqhttps.war /tmp (Solaris)

    cp /opt/sun/mq/share/lib/imqhttps.war /tmp (Linux)

    cp IMQ_HOME/lib/imqhttps.war /tmp (Windows)

  2. 將此暫存目錄變為您的目前目錄。

    $ cd /tmp

  3. 擷取 .war 檔案的內容。

    $ jar xvf imqhttps.war

  4. 列出 .war 檔案的部署描述元。

    $ ls -l WEB-INF/web.xml

  5. 編輯 web.xml 檔案,為 keystoreLocationkeystorePassword 引數 (如有必要,還包括 servletPortservletHost 引數) 提供正確的值。

  6. 重新組合 .war 檔案的內容。

    $ jar uvf imqhttps.war WEB-INF/web.xml

    此時,您就可以使用已修改的 imqhttps.war 檔案來部署 HTTPS 通道 Servlet。(如果您擔心金鑰庫密碼洩漏,則可以使用檔案系統權限來限制其他人對 imqhttps.war 檔案的存取。)

步驟 3. 部署 HTTPS 通道 Servlet

您可以將 HTTP 通道 Servlet 部署為 Sun Java System Web Server 或 Sun Java System Application Server 上的 Web 歸檔 (WAR) 檔案。

將 HTTPS 通道 Servlet 部署為 .war 檔案,需要使用 Web 伺服器/應用程式伺服器所提供的部署機制。HTTPS 通道 Servlet .war 檔案 (imqhttps.war ) 的所在目錄位置依作業系統而異 (請參閱附錄 AMessage QueueTM 資料的特定平台位置)。

您應確保已為 Web 伺服器啟動加密,從而讓用戶端與代理程式之間進行端對端安全通訊。

部署為 Web 歸檔檔案

如需在 Sun Java System Web Server 上進行部署的相關資訊,請參閱在 Sun Java System Web Server 上部署 HTTPS 通道 Servlet

如需在 Sun Java System Application Server 上進行部署的相關資訊,請參閱在 Sun Java System Application Server 上部署 HTTPS 通道 Servlet

在 Sun Java System Web Server 上部署 HTTPS 通道 Servlet

本節描述如何將 HTTPS 通道 Servlet 部署為 Sun Java System Web Server 上的 .war 檔案。您可以透過使用 Web 瀏覽器存取 Servlet URL,來驗證 HTTPS 通道 Servlet 是否已部署成功。它應顯示狀態資訊。

在部署 HTTPS 通道 Servlet 之前,請確保 JSSE .jar 檔案包含在 Web 伺服器的類別路徑中。執行此作業的最簡單方法是將 jsse.jarjnet.jar jcert.jar 檔案複製到 WebServer_TOPDIR/bin/https/jre/lib/ext

Procedure將 HTTPS 通道 Servlet 部署為 .war 檔案

  1. 在瀏覽器型的管理 GUI 中,選擇 [虛擬伺服器類別] 標籤。按一下 [管理類別]。

  2. 選擇適當的虛擬伺服器類別名稱 (例如 defaultClass),然後按一下 [管理] 按鈕。

  3. 選擇 [管理虛擬伺服器]。

  4. 選擇適當的虛擬伺服器名稱,然後按一下 [管理] 按鈕。

  5. 選擇 [Web 應用程式] 標籤。

  6. 按一下 [部署 Web 應用程式]。

  7. 為 [WAR 檔案開啟] 和 [WAR 檔案路徑] 欄位選擇適當的值,讓其指向已修改的 imqhttps.war 檔案 (請參閱步驟 2. 修改 HTTP 通道 Servlet .war 檔案的描述元檔案。)

  8. 在 [應用程式 URI] 欄位中輸入路徑。

    [應用程式 URI] 欄位值為通道 Servlet URL 的 /contextRoot 部分:

    https://hostName :portNumber / contextRoot/tunnel

    舉例來說,如果您將 contextRoot 設定為 imq,則 [應用程式 URI] 欄位應為:

    /imq

  9. 輸入應部署 Servlet 的安裝目錄路徑 (通常位於 Sun Java System Web Server 安裝根目錄下)。

  10. 按一下 [確定]。

  11. 重新啟動 Web 伺服器實例。

    此時,即可從以下 URL 存取 Servlet:


    https://hostName:portNumber/imq/tunnel

    現在,用戶端就可以使用此 URL 連線至使用安全 HTTPS 連線的訊息服務。

停用伺服器存取記錄

您不必停用伺服器存取記錄,但是如果您停用記錄,將會獲得更好的效能。

Procedure停用伺服器存取記錄

  1. 選擇 [狀態] 標籤。

  2. 選擇 [記錄喜好設定頁面]。

    使用記錄用戶端存取控制來停用記錄。

在 Sun Java System Application Server 上部署 HTTPS 通道 Servlet

本節描述如何將 HTTPS 通道 Servlet 部署為 Sun Java System Application Server 上的 .war 檔案。

您需要執行下列兩個步驟:

使用部署工具

以下程序顯示如何在應用程式伺服器環境中部署 HTTPS 通道 Servlet。

Procedure在應用程式伺服器環境中部署 HTTPS 通道 Servlet

  1. 在網路型的管理 GUI 中,選擇

    [應用程式伺服器] > [實例] > [server1] > [應用程式] > [Web 應用程式]

  2. 按一下 [部署] 按鈕。

  3. 在 [檔案路徑:] 文字欄位輸入 HTTPS 通道 Servlet .war 檔案 (imqhttps.war) 的位置,再按一下 [確定]。

    imqhttps.war 檔案的位置會因您的作業系統而異 (請參閱附錄 AMessage QueueTM 資料的特定平台位置)。

  4. 設定 [環境根目錄] 文字欄位的值,再按一下 [確定]。

    [環境根目錄] 欄位值為通道 Servlet URL 的 /contextRoot 部分:

    https://hostName :portNumber / contextRoot/tunnel

    例如,您可以將 [環境根目錄] 欄位設定為:

    /imq

    接下來的畫面會顯示,通道 Servlet 已成功部署並且依預設已啟用,以及該通道 Servlet 的位置。在本例中其位置如下:


    /var/opt/SUNWappserver8/domains/domain1/server1/applications/
    j2ee-modules/imqhttps_1

    此時,即可從以下 URL 存取 Servlet:


    https://hostName:portNumber/
    contextRoot/tunnel

    現在,用戶端就可以使用此 URL 連線至使用 HTTPS 連線的訊息服務。

修改 server.policy 檔案

應用程式伺服器會實施一組預設的安全策略,除非將其修改,否則這組安全策略會阻止 HTTPS 通道 Servlet 接受來自 Message Queue 代理程式的連線。

每個應用程式伺服器實例,皆有一個包含安全策略或規則的檔案。例如在 Solaris 上,server1 實例的此檔案位置是:

/var/opt/SUNWappserver8/domains/domain1/server1/config/
server.policy

若要讓通道 Servlet 接受來自 Message Queue 代理程式的連線,則必須在此檔案中新增一個項目。

Procedure修改應用程式伺服器的 server.policy 檔案

  1. 開啟伺服器策略檔案。

  2. 增加以下項目:


    grant codeBase
    "file:/var/opt/SUNWappserver8/domains/domain1/server1/
                    applications/j2ee-modules/imqhttps_1/-”
    {
            permission java.net.SocketPermission "*",
                    “connect,accept,resolve";
    };

步驟 4. 配置 httpsjms 連線服務

預設情況下,不會針對代理程式啟動 HTTPS 支援,所以您必須重新配置代理程式,以啟動 httpsjms 連線服務。重新配置後,便可如啟動代理程式中所述啟動代理程式。

Procedure啟動 httpsjms 連線服務

  1. 開啟代理程式的實例配置檔案。

    實例配置檔案的儲存目錄名稱,與此配置檔案相關聯之代理程式實例名稱 (instanceName) 相同 (請參閱附錄 AMessage QueueTM 資料的特定平台位置):

    /instances/ instanceName /props/config.properties

  2. httpsjms 值增加至 imq.service.activelist 特性:


    imq.service.activelist=jms,admin,httpsjms

    啟動時,代理程式會尋找在其主機電腦上執行的 Web 伺服器和 HTTPS 通道 Servlet。但是,若要存取遠端通道 Servlet,您可以重新配置 servletHostservletPort 連線服務特性。

    您還可以重新配置 pullPeriod 特性,以提昇效能。步驟 4. 配置 httpsjms 連線服務中詳細介紹了 httpsjms 連線服務配置特性。

    特性 

    說明 

    imq.httpsjms.https.servletHost

    如有必要,請變更此值以指定執行 HTTPS 通道 Servlet 的主機之名稱 (主機名稱或 IP 位址)。(可以是遠端主機,或本地主機上的特定主機名稱。)預設值:localhost

    imq.httpsjms.https. servletPort

    變更此值,以指定代理程式用於存取 HTTPS 通道 Servlet 的連接埠號。(如果 Web 伺服器上的預設連接埠已變更,則您必須相應地變更此特性。)預設值:7674

    imq.httpsjms.https. pullPeriod

    指定每個用戶端發出從代理程式取出訊息之 HTTP 請求的時間間隔 (以秒為單位)。(請注意,此特性於代理程式上進行設定,並傳播至用戶端執行階段。)如果值為零或負數,則用戶端將始終擱置一個 HTTP 請求,以便隨時做好準備從而儘快取出訊息。若用戶端數目過大,可能會導致耗用大量的 Web 伺服器/應用程式伺服器資源,造成伺服器無法回應。在此類情況下,您應將 pullPeriod 特性設定為正的秒數。此特性設定用戶端的 HTTP 傳輸驅動程式在發出後續取出請求之前,所需等待的時間。將此值設定為正數可節省 Web 伺服器資源,但會影響用戶端所監視的回應次數。預設值:-1

    imq.httpsjms.https. connectionTimeout

    指定丟出異常之前,用戶端執行階段等待來自 HTTPS 通道 Servlet 之回應的時間 (以秒為單位)。(請注意,此特性於代理程式上進行設定,並傳播至用戶端執行階段。)此特性也會指定代理程式與 HTTPS 通道 Servlet 進行通訊後,需等待多長時間後才釋放連線。因為在此情況下,代理程式與通道 Servlet 無法得知存取 HTTPS Servlet 的用戶端是否已異常中斷,因此必須設定逾時時間。預設值:60

步驟 5. 配置 HTTPS 連線

用戶端應用程式必須使用已適當配置的連線工廠受管理物件,以建立與代理程式的 HTTPS 連線。

然而,用戶端必須能夠存取 Java Secure Socket Extension (JSSE) 所提供的 SSL 程式庫,而且必須具有根憑證。SSL 程式庫隨附於 JDK 1.4。如果您使用較舊的 JDK 版本,請參閱配置 JSSE,否則請繼續執行匯入超級使用者憑證

解決這些問題後,就可以繼續配置 HTTPS 連線。

配置 JSSE

Procedure配置 JSSE

  1. 將 JSSE .jar 檔案複製到 JRE_HOME/lib/ext 目錄。


    jsse.jar, jnet.jar, jcert.jar
  2. 以靜態方式增加 JSSE 安全性提供者:將


    security.provider.n=com.sun.net.ssl.internal.ssl.Provider

    增加至 JRE_HOME/lib/security/java.security 檔案 (其中 n 為安全性提供者套裝軟體的下一個可用優先權號碼)。

  3. 如果未使用 JDK1.4,則您需要使用可啟動用戶端應用程式之指令的 -D 選項,來設定以下 JSSE 特性:


    java.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

匯入超級使用者憑證

如果 CA (簽署 Web 伺服器憑證的單位) 的根憑證依預設不在信任資料庫中,或者您使用的是專用 Web 伺服器/應用程式伺服器憑證,則必須將此憑證增加至信任資料庫。如果是此情況,請遵循以下說明,否則請移至配置連線工廠

假設此憑證儲存在 certFile 中,且 trustStoreFile 為您的金鑰庫,請執行以下指令:

JRE_HOME/bin/keytool -import -trustcacerts
 -alias aliasForCertificate -file certFile

-keystore trustStoreFile

對以下問題回答 YESTrust this certificate?

您還需要使用可啟動用戶端應用程式之指令的 -D 選項,來指定以下 JSSE 特性:

javax.net.ssl.trustStore=trustStoreFile
javax.net.ssl.trustStorePassword=trustStorePasswd

配置連線工廠

若要啟用 HTTPS 支援,您必須將連線工廠的 imqAddressList 屬性設定為 HTTPS 通道 Servlet URL。HTTPS 通道 Servlet URL 的一般語法如下:

https://hostName:portNumber

/contextRoot/tunnel

其中 hostName:portNumber 為託管 HTTPS 通道 Servlet 之 Web 伺服器名稱和連接埠;contextRoot 為在 Web 伺服器上部署通道 Servlet 時的路徑設定。

如需連線工廠屬性的一般資訊與 imqAddressList 屬性的特定資訊,請參閱「Message Queue Developer's Guide for Java Clients」。

您可以透過以下方法之一設定連線工廠屬性:

使用單一 Servlet 存取多重代理程式

若要執行多個代理程式,您無需配置多個 Web 伺服器和 Servlet 實例。您可以讓同時執行的代理程式,共用單一 Web 伺服器和 HTTPS 通道 Servlet 實例。如果多個代理程式實例共用一個通道 Servlet,您必須配置 imqAddressList 連線工廠屬性,配置內容如下:

https://hostName:portNumber

/contextRoot/tunnel?ServerName=
bkrHostName:instanceName

其中 bkrHostName 為代理程式實例主機名稱;instanceName 為用戶端所要存取的特定代理程式實例名稱。

若要檢查您為 bkrhostName instanceName 輸入的字串是否正確,請從瀏覽器存取 Servlet URL,並產生 HTTPS 通道 Servlet 的狀態報告。此報告將列出 Servlet 所存取的所有代理程式:


HTTPS tunnel servlet ready.
Servlet Start Time : Thu May 30 01:08:18 PDT 2002
Accepting secured connections from brokers on port : 7674
Total available brokers = 2
Broker List :
   jpgserv:broker2
   cochin:broker1

使用 HTTP 代理

如果您要使用 HTTP 代理伺服器存取 HTTPS 通道 Servlet:

您可以使用可啟動用戶端應用程式之指令的 -D 選項來設定這些特性。

疑難排解

本節描述 HTTP 或 HTTPS 連線可能發生的問題,並提供處理這些問題的方法。

伺服器或代理程式發生故障

如果 Web 伺服器發生故障並重新啟動,則所有連線均會復原且不會影響用戶端。但是,如果代理程式發生故障並重新啟動,則系統會丟出異常,且用戶端必須重新建立它們的連線。

如果 Web 伺服器與代理程式均發生故障,且未重新啟動代理程式,則 Web 伺服器會復原用戶端連線並繼續等待代理程式連線,而不通知用戶端。若要避免這種情況,請確定代理程式已重新啟動。

用戶端無法透過通道 Servlet 進行連線

如果 HTTPS 用戶端無法透過通道 Servlet 連線至代理程式,請執行以下作業:

Procedure如果用戶端無法連線

  1. 啟動 Servlet 和代理程式。

  2. 使用瀏覽器,透過 HTTPS 通道 Servlet URL 以手動方式存取 Servlet。

  3. 使用以下管理指令暫停並重新繼續連線:


    imqcmd pause svc -n httpsjms -u admin
    imqcmd resume svc -n httpsjms -u admin

    當服務重新繼續時,HTTPS 用戶端應該就能透過通道 Servlet 連線至代理程式。

附錄 D 常用指令公用程式指令

本附錄列出常用之 Message QueueTM 指令公用程式 (imqcmd) 指令。如需指令行可用之指令選項和屬性的詳細清單,請參閱指令公用程式中的指令公用程式

語法

imqcmd subcommand argument [
options]
imqcmd -h|H
imqcmd -v

-H-h 會提供詳細的說明。-v 子命令提供版本資訊。

當您使用 imqcmd 時,指令公用程式會提示您輸入密碼。若要避免出現提示 (同時增加安全性),您可以使用 -passfile pathToPassfile 選項,將公用程式指向包含管理員使用者名稱和密碼的密碼檔案。

範例:imqcmd query bkr -u adminUserName -passfile pathToPassfile -b myServer:7676

代理程式和叢集管理

imqcmd query bkr
imqcmd pause bkr
imqcmd restart bkr
imqcmd resume bkr
imqcmd shutdown bkr -b myBroker:7676
imqcmd update bkr -o "imq.system.max_count=1000"
imqcmd reload cls

代理程式配置特性 (-o 選項)

代理程式配置特性 (-o 選項)中列出常用的代理程式配置特性。如需代理程式配置特性及其說明的完整清單,請參閱第 14 章, 代理程式特性參照

表 D–1 代理程式配置特性 ( -o 選項)

特性 

備註 

imq.autocreate.queue

 

imq.autocreate.queue.maxNumActiveConsumers

指定 -1 表示無限制

imq.autocreate.queue.maxNumBackupConsumers

指定 -1 表示無限制

imq.autocreate.topic

 

imq.cluster.url

 

imq.destination.DMQ.truncateBody

 

imq.destination.logDeadMessages

 

imq.log.file.rolloverbytes

指定 -1 表示無限制

imq.log.file.rolloversecs

指定 -1 表示無限制

imq.log.level

NONEERRORWARNINGINFO

imq.message.max_size

指定 -1 表示無限制

imq.portmapper.port

 

imq.system.max_count

指定 -1 表示無限制

imq.system.max_size

指定 -1 表示無限制

服務和連線管理

imqcmd list svc
imqcmd query svc
imqcmd update svc -n jms -o "minThreads=200" -o "maxThreads=400" -o "port=8995"
imqcmd pause svc -n jms
imqcmd resume svc -n jms
imqcmd list cxn -svn jms
imqcmd query cxn -n 1234567890

長期訂閱者管理

imqcmd list dur -d MyTopic
imqcmd destroy dur -n myDurSub -c "clientID-111.222.333.444"
imqcmd purge dur -n myDurSub -c "clientID-111.222.333.444"

作業事件管理

imqcmd list txn
imqcmd commit txn -n 1234567890
imqcmd query txn -n 1234567890
imqcmd rollback txn -n 1234567890

目標管理

imqcmd create dst -n MyQueue -t q -o "maxNumMsgs=1000" -o "maxNumProducers=5"
imqcmd update dst -n MyTopic -t t -o "limitBehavior=FLOW_CONTROL|REMOVE_OLDEST|REJECT_NEWEST|REMOVE_LOW_PRIORITY"
imqcmd compact dst -n MyQueue -t q
imqcmd purge dst -n MyQueue -t q
imqcmd pause dst -n MyQueue -t q -pst PRODUCERS|CONSUMERS|ALL
imqcmd resume dst -n MyQueue -t q
imqcmd destroy dst -n MyQueue -t q
imqcmd query dst -n MyQueue -t q
imqcmd list dst -tmp

目標配置特性 (-o 選項)

目標配置特性 (-o 選項)中列出常用的目標配置特性。如需目標配置特性及其說明的完整清單,請參閱第 15 章, 實體目標特性參照

表 D–2 目標配置特性 (-o 選項)

特性 

備註 

consumerFlowLimit

指定 -1 表示無限制

isLocalOnly (僅限建立時使用)

 

limitBehavior

FLOW_CONTROLREMOVE_OLDESTREJECT_NEWESTREMOVE_LOW_PRIORITY

localDeliveryPreferred (僅限佇列)

 

maxNumActiveConsumers (僅限佇列)

指定 -1 表示無限制

maxNumBackupConsumers (僅限佇列)

指定 -1 表示無限制

maxBytesPerMsg

指定 -1 表示無限制

maxNumMsgs

指定 -1 表示無限制

maxNumProducers

指定 -1 表示無限制

maxTotalMsgBytes

指定 -1 表示無限制

useDMQ

 

度量

imqcmd metrics bkr -m cxn|rts|ttl -int 5 -msp 20
imqcmd metrics svc -m cxn|rts|ttl
imqcmd metrics dst -m con|dsk|rts|ttl