Sun Java System Message Queue 3.5 SP1 管理指南 |
第 7 章
管理受管理物件使用受管理物件可允許對移植到其他 JMS 提供者的用戶端應用程式進行開發。受管理物件是指封裝提供者特定的配置和命名資訊的物件。這些物件通常由 Message Queue 管理員建立並由用戶端應用程式使用,以便與代理程式建立連接,這些連接用來向實體目標傳送訊息並從實體目標接收訊息。
如需受管理物件的簡介,請參閱「Message Queue受管理物件」。
Message Queue 提供兩種管理工具,用於建立和管理受管理物件:指令行物件管理員公用程式 (imqobjmgr) 和 GUI 管理主控台。這些工具可讓您執行以下工作:
本章介紹如何使用物件管理員公用程式 (imqobjmgr) 以執行這些工作。因為這些工作涉及您使用的物件倉庫與您建立的受管理物件之屬性理解,在描述如何使用 imqobjmgr 管理受管理物件前,本章會先提供這兩個主題的背景。
如需使用管理主控台的資訊,請參閱第 4 章「管理主控台指導」。
關於物件倉庫受管理物件放在即時可用的物件倉庫中,用戶端應用程式可透過 JNDI 查找來存取此處的受管理物件。您可以使用兩種類型的物件倉庫︰標準的 LDAP 目錄伺服器或檔案系統物件倉庫。
LDAP 伺服器物件倉庫
LDAP 伺服器是用於生產訊息傳送系統的建議物件倉庫。LDAP 實施可從一些供應商處獲得,並設計為在分散式系統中使用。LDAP 伺服器也在生產環境中提供有利的安全性功能。
Message Queue 管理工具可管理 LDAP 伺服器上的物件倉庫。然而,依 LDAP 伺服器說明文件規定,您可能必須先配置 LDAP 伺服器,以便儲存 Java 物件與執行 JNDI 查找。
使用 LDAP 伺服器作為物件倉庫時,您必須指定表 7-1 中顯示的屬性。這些屬性分為以下幾個種類:
- 初始環境:此屬性的值針對 LDAP 伺服器物件倉庫進行修正。
- 位置:指定 LDAP 伺服器中,設定用來儲存您受管理物件的 URL 與目錄路徑。要特別注意的是,您必須檢查指定的路徑是否存在。
- 安全性資訊:根據 LDAP 提供者而異。您應查閱 LDAP 實施隨附的說明文件,以確定是否在所有作業上還是僅在變更已儲存資料的作業上需要安全性資訊。
檔案系統物件倉庫
Message Queue 還支援檔案系統物件倉庫實施。當檔案系統物件倉庫未經過完全測試並因此不建議用於生產系統時,它的優點是易於在開發環境中使用。您所要做的是在您的本機檔案系統上建立目錄,而不是設定 LDAP 伺服器。
但是,檔案系統倉庫不可作為部署在多重電腦節點之用戶端的集中物件倉庫,除非這些用戶端可以存取物件倉庫所在的目錄。除此之外,任何對此目錄擁有存取權的使用者均可使用 Message Queue 管理工具,以建立並管理受管理物件。
使用檔案系統物件倉庫時,您必須指定表 7-2 中顯示的屬性。這些屬性分為以下幾個種類:
受管理物件如需受管理物件的簡介,請參閱「Message Queue受管理物件」。
Message Queue 受管理物件有兩種基本類型:連線工廠和目標。連線工廠受管理物件可由用戶端應用程式使用,以建立與代理程式的連接。目標受管理物件可由用戶端應用程式使用,以識別生產者傳送訊息或使用者擷取訊息的目標。(特殊的 SOAP 終點受管理物件用於 SOAP 訊息傳送 - 請參閱「Message Queue Java Client Developer Guide」,以獲得更多資訊。)
依據訊息發送模型 (點對點或出版/訂閱) 來使用特定類型的連線工廠和目標。例如,在點對點程式設計中,可使用佇列連線工廠和佇列目標。同樣,在出版和訂閱程式設計中,可使用主題連線工廠和主題目標。還有非特定的連線工廠和目標受管理物件類型可用,如支援分散式異動的連線工廠類型 (請參閱表 1-1,以獲得所有支援的類型)。
使用屬性值對指定的受管理物件的屬性。以下各節將描述這些屬性。
連線工廠受管理物件屬性
連線工廠(和 XA 連線工廠) 受管理物件具有表 7-3 中列出的屬性。與您有主要關係的屬性為 imqAddressList,它可用於指定用戶端將與其建立連接的代理程式。「新增連線工廠」一節介紹當您將連線工廠受管理物件新增至您的物件倉庫時,如何指定屬性。
如需連線工廠屬性的更多說明與有關如何使用它們的資訊,請參閱「Message Queue Java Client Developer Guide」和用於 Message Queue 類別的 JavaDoc API 說明文件:com.sun.messaging.ConnectionConfiguration。
目標受管理物件屬性
目標受管理物件識別實體主題或佇列目標,其具有表 7-4 中列出的屬性。「新增主題佇列」一節介紹當您將目標受管理物件新增至您的物件倉庫時,如何指定這些屬性。
與您有主要關係的屬性為 imqDestinationName。這是您指定給符合主題或佇列受管理物件的實體目標的名稱。您還可以提供目標描述,這會幫助您將此目標與您可能建立以支援許多應用程式的其他目標區分開來。
如需更多資訊,請參閱用於 Message Queue 類別 com.sun.messaging.DestinationConfiguration 的 JavaDoc API 說明文件。
表 7-4 目標受管理物件屬性
屬性/特性名稱
類型
預設
imqDestinationDescription
字串
目標物件的說明
imqDestinationName
字串1
Untitled_Destination_Object
1目標名稱僅能包含字母數字字元 (無空格),並且必須以字母字元或字元「_」和/或「$」開頭。
物件管理員公用程式 (imqobjmgr)物件管理員公用程式可讓您建立並管理 Message Queue 受管理物件。本節描述基本的 imqobjmgr 指令語法、提供子指令的清單,並總結 imqobjmgr 指令選項。後續各節介紹如何使用 imqobjmgr 子指令完成特定的工作。
imqobjmgr 指令的語法
imqobjmgr 指令的一般語法如下:
imqobjmgr subcommand [options]
imqobjmgr -h|H
imqobjmgr -v請注意,如果您指定 -v、-h 或 -H 選項,則系統不會執行指令行上指定的子指令。例如,如果您輸入以下指令,則系統會顯示版本資訊但不會執行 list 子指令。
imqobjmgr list -v
imqobjmgr 子指令
物件管理員公用程式 (imqobjmgr) 包括表 7-5 中列出的子指令:
表 7-5 imqobjmgr 子指令
子指令
說明
add
將受管理物件新增至物件倉庫。
delete
從物件倉庫刪除受管理物件。
list
列出物件倉庫中的受管理物件。
query
顯示有關指定的受管理物件的資訊。
update
修改物件倉庫中的現有受管理物件。
imqobjmgr 指令選項摘要
表 7-6 列出 imqobjmgr 指令的選項。如需它們用法的說明,請參閱以下基於工作的各節。
表 7-6 imqobjmgr 選項
選項
說明
-f
未經使用者確認即執行動作。
-h
顯示用法說明。不執行指令行上的其他任何指令。
-H
顯示用法說明、屬性清單和範例。不執行指令行上的其他任何指令。
-i fileName
指定指令檔的名稱,此檔案包含所有或部分子指令子句,可指定物件類型、查找名稱、物件屬性、物件倉庫屬性或其他選項。通常用於重複資訊,如物件倉庫屬性。
-j attribute=value
指定識別和存取 JNDI 物件倉庫所需的屬性。請參閱「LDAP 伺服器物件倉庫」 和「檔案系統物件倉庫」。
-javahome path
指定要使用的替代 Java 2 相容運行時間 (預設為使用系統上的運行時間,或 Message Queue 隨附的運行時間)。
-l lookupName
指定受管理物件的 JNDI 查找名稱。此名稱在物件倉庫的環境中必須唯一。
-o attribute=value
指定受管理物件的屬性。請參閱「連線工廠受管理物件屬性」 和「目標受管理物件屬性」
-pre
預覽模式。表示在不執行指令的情況下將進行的動作。
-r read-only_state
指定受管理物件是否為唯讀物件。值 true 表示受管理物件為唯讀物件。用戶端無法修改唯讀受管理物件的屬性。依預設,唯讀狀態設定為 false。
-s
無訊息模式。不顯示輸出。
-t objectType
指定 Message Queue 受管理物件的類型:
q = 佇列
t = 主題
cf = 連線工廠
qf = 佇列連線工廠
tf = 主題連線工廠
xcf = XA 連線工廠(分散式異動)
xqf = XA 佇列連線工廠(分散式異動)
xtf = XA 主題連線工廠(分散式異動)
e = SOAP 終點1
-v
顯示版本資訊。不執行指令行上的其他任何指令。
1此受管理物件類型用於支援 SOAP 訊息 (請參閱「Message Queue Java Client Developer Guide」)。
下節描述使用任何 imqobjmgr 子指令時需要提供的資訊。
需要的資訊
當執行與受管理物件相關的大部分工作時,您必須將以下資訊指定為 imqobjmgr 子指令的選項:
表 7-6 中顯示了允許的類型。
- 受管理物件屬性 (add 與 update 子指令特別需要):
- 對於目標:代理程式上實體目標的名稱。這是使用 imqcmd create dst 子指令的 -n 選項指定的名稱。如果您沒有指定此名稱,則將使用 Untitled_Destination_Object 的預設名稱。
- 對於連線工廠:大部分的通用屬性為位址清單 (imqAddressList),它可指定用戶端嘗試連接的訊息伺服器位址 (一個或多個)。如果您沒有指定此資訊,則會使用本地主機與預設連接埠號 (7676),這表示用戶端將會連接到本地主機連接埠 7676 上的代理程式。「新增連線工廠」一節介紹如何指定物件屬性。
如需其他屬性,請參閱「連線工廠受管理物件屬性」。
- 物件倉庫屬性:
此資訊取決於您要使用檔案系統倉庫還是 LDAP 伺服器,但必須包括以下屬性:
如需有關物件倉庫屬性的更多資訊,請參閱「LDAP 伺服器物件倉庫」 和「檔案系統物件倉庫」。
使用指令檔
imqobjmgr 指令可讓您指定使用 Java 特性檔案語法的指令檔的名稱,以表示所有或部分 imqobjmgr 子指令子句。
將指令檔與物件管理員公用程式 (imqobjmgr) 配合使用,對指定物件倉庫屬性極為有用,這可能與跨 imqobjmgr 的多重呼叫一樣,並且一般需要大量的鍵入。使用指令檔還可讓您避免鍵入可能超出指令行所允許的最大字元數的情況。
imqobjmgr 指令檔的一般語法如下 (版本內容會反映指令檔版本,但不會反映 Message Queue 產品的版本 - 它不是指令行選項且其值必須設定為 2.0):
作為如何使用指令檔的範例,請考量以下 imqobjmgr 指令:
imqobjmgr add
-t qf
-l "cn=myQCF"
-o "imqAddressList=mq://foo:777/jms"
-j "java.naming.factory.initial=
com.sun.jndi.ldap.LdapCtxFactory"
-j "java.naming.provider.url=
ldap://mydomain.com:389/o=imq"
-j "java.naming.security.principal=
uid=fooUser, ou=People, o=imq"
-j "java.naming.security.credentials=fooPasswd"
-j "java.naming.security.authentication=simple"
此指令可封裝在檔案 (如 MyCmdFile) 中,此檔案具有以下內容:
version=2.0
cmdtype=add
obj.type=qf
obj.lookupName=cn=myQCF
obj.attrs.imqAddressList=mq://foo:777/jms
objstore.attrs.java.naming.factory.initial=\
com.sun.jndi.ldap.LdapCtxFactory
objstore.attrs.java.naming.provider.url=\
ldap://mydomain.com:389/o=imq
objstore.attrs.java.naming.security.principal=\
uid=fooUser, ou=People, o=imq
objstore.attrs.java.naming.security.credentials=fooPasswd
objstore.attrs.java.naming.security.authentication=simple
然後,您可以使用 -i 選項將此檔案傳送至物件管理員公用程式 (imqobjmgr):
imqobjmgr -i MyCmdFile
您還可以使用指令檔指定某些選項,同時使用指令行指定其他選項。這可讓您使用指令檔指定部分子指令子句,這與跨公用程式的許多呼叫一樣。例如,以下指令指定新增連線工廠受管理物件所需的所有選項 (指定要在何處儲存受管理物件的那些選項除外)。
在此例中,檔案 MyCmdFile 將包含以下定義:
version=2.0
objstore.attrs.java.naming.factory.initial=\
com.sun.jndi.ldap.LdapCtxFactory
objstore.attrs.java.naming.provider.url=\
ldap://mydomain.com:389/o=imq
objstore.attrs.java.naming.security.principal=\
uid=fooUser, ou=People, o=imq
objstore.attrs.java.naming.security.credentials=fooPasswd
objstore.attrs.java.naming.security.authentication=simple
指令檔的其他範例可在以下位置找到︰
IMQ_HOME/demo/imqobjmgr
新增和刪除受管理物件本節介紹如何將連線工廠和主題或佇列目標的受管理物件新增至物件倉庫。
備註
物件管理員公用程式 (imqobjmgr) 僅列出並顯示 Message Queue 受管理物件。如果物件倉庫應包含的非 Message Queue 物件與您想新增的受管理物件具有相同的查找名稱,那麼當您嘗試新增作業時會出現錯誤。
新增連線工廠
若要啟用用戶端應用程式以便與代理程式建立連接,您需要新增表示用戶端應用程式所需連接類型的受管理物件:主題連線工廠或佇列連線工廠
若要新增佇列連線工廠,請使用以下指令:
imqobjmgr add
-t qf
-l "cn=myQCF"
-o "imqAddressList=mq://myHost:7272/jms"
-j "java.naming.factoryinitial=
com.sun.jndi.ldap.LdapCtxFactory"
-j "java.naming.provider.url=ldap://mydomain.com:389/o=imq"
-j "java.naming.security.principal=
uid=fooUser, ou=People, o=imq"
-j "java.naming.security.credentials=fooPasswd"
-j "java.naming.security.authentication=simple"
上述指令建立查找名稱為 cn=myQCF 的受管理物件,此物件將連接至在 myHost 上執行的代理程式,並偵聽連接埠 7272。此受管理物件儲存在 LDAP 伺服器中。您可以透過將指令檔指定為 imqobjmgr 指令的引數來完成相同的作業。如需更多資訊,請參閱「使用指令檔」。
備註
命名慣例:如果您要使用 LDAP 伺服器儲存受管理物件,則指定字首為「cn=」的查找名稱很重要 (如上述範例所示:cn=myQCF)。您可以使用 -l 選項指定查找名稱。如果您正在使用檔案系統物件倉庫,那麼您不需使用 cn 字首,但請勿使用包含 "/" 的查找名稱。請參閱表 7-7。
新增主題佇列
若要啟用用戶端應用程式以存取代理程式上的實體目標,您需要將可識別這些目標的受管理物件新增至物件倉庫。
在將相應的受管理物件新增至物件倉庫前,最好先建立實體目標。使用指令公用程式 (imqcmd) 以在代理程式上建立實體目標,這些實體目標可由物件倉庫中的目標受管理物件識別。如需有關建立實體目標的資訊,請參閱「取得連接資訊」。
以下指令新增可識別主題目標的受管理物件,此主題目標的查找名稱為 myTopic,實體目標名稱為 TestTopic。受管理物件儲存在 LDAP 伺服器中。
imqobjmgr add
-t t
-l "cn=myTopic"
-o "imqDestinationName=TestTopic"
-j "java.naming.factory.initial=
com.sun.jndi.ldap.LdapCtxFactory"
-j "java.naming.provider.url=
ldap://mydomain.com:389/o=imq"
-j "java.naming.security.principal=
uid=fooUser, ou=People, o=imq"
-j "java.naming.security.credentials=fooPasswd"
-j "java.naming.security.authentication=simple"
這是相同的指令,只是受管理物件儲存在 Solaris 檔案系統中:
imqobjmgr add
-t t
-l "cn=myTopic"
-o "imqDestinationName=TestTopic"
-j "java.naming.factory.initial=
com.sun.jndi.fscontext.RefFSContextFactory"
-j "java.naming.provider.url=
file:///home/foo/imq_admin_objects"
例如,在 LDAP 伺服器一例中,您可以使用指令檔 MyCmdFile 以指定子指令子句。此檔案將包含以下文字:
version=2.0
cmdtype=add
obj.type=t
obj.lookupName=cn=myTopic
obj.attrs.imqDestinationName=TestTopic
objstore.attrs.java.naming.factory.initial=
com.sun.jndi.fscontext.RefFSContextFactory
objstore.attrs.java.naming.provider.url=
file:///home/foo/imq_admin_objects
objstore.attrs.java.naming.security.principal=
uid=fooUser, ou=People, o=imq
objstore.attrs.java.naming.security.credentials=fooPasswd
objstore.attrs.java.naming.security.authentication=simple
使用 -i 選項將檔案傳送至 imqobjmgr 指令:
imqobjmgr -i MyCmdFile
除了為 -t 選項指定 q,新增佇列物件的方法完全相同。
刪除受管理物件
使用 delete 子指令以刪除受管理物件。您必須指定物件的查找名稱、類型和位置。
以下指令刪除某主題的受管理物件,此主題的查找名稱為 cn=myTopic,並儲存在 LDAP 伺服器上。
imqobjmgr delete
-t t
-l "cn=myTopic"
-j "java.naming.factory.initial=
com.sun.jndi.ldap.LdapCtxFactory"
-j "java.naming.provider.url=
ldap://mydomain.com:389/o=imq"
-j "java.naming.security.principal=
uid=fooUser, ou=People, o=imq"
-j "java.naming.security.credentials=fooPasswd"
-j "java.naming.security.authentication=simple"
取得資訊使用 list 和 query 子指令以列出物件倉庫中的受管理物件,並顯示有關個別物件的資訊。
列出受管理物件
使用 list 子指令以取得所有受管理物件的清單,或取得特定類型的所有受管理物件的清單。以下範例程式碼假設受管理物件儲存在 LDAP 伺服器中。
以下指令列出所有物件。
imqobjmgr list
-j "java.naming.factory.initial=
com.sun.jndi.ldap.LdapCtxFactory"
-j "java.naming.provider.url=
ldap://mydomain.com:389/o=imq"
-j "java.naming.security.principal=
uid=fooUser, ou=People, o=imq"
-j "java.naming.security.credentials=fooPasswd"
-j "java.naming.security.authentication=simple"
以下指令列出類型 queue 的所有物件。
imqobjmgr list
-t q
-j "java.naming.factory.initial=
com.sun.jndi.ldap.LdapCtxFactory"
-j "java.naming.provider.url=
ldap://mydomain.com:389/o=imq"
-j "java.naming.security.principal=
uid=fooUser, ou=People, o=imq"
-j "java.naming.security.credentials=fooPasswd"
-j "java.naming.security.authentication=simple"
有關單一物件的資訊
使用 query 子指令,以取得有關受管理物件的資訊。您必須指定物件的查找名稱和包含受管理物件的物件倉庫的屬性 (如初始環境和位置)。
在以下範例中,query 子指令用來顯示有關查找名稱為cn=myTopic 之物件的資訊。
imqobjmgr query
-l "cn=myTopic"
-j "java.naming.factory.initial=
com.sun.jndi.ldap.LdapCtxFactory"
-j "java.naming.provider.url=
ldap://mydomain.com:389/o=imq"
-j "java.naming.security.principal=
uid=fooUser, ou=People, o=imq"
-j "java.naming.security.credentials=fooPasswd"
-j "java.naming.security.authentication=simple"
更新受管理物件您可以使用 update 指令修改受管理物件的屬性。您必須指定物件的查找名稱和位置。您可以使用 -o 選項修改屬性值。
此指令變更表示主題連線工廠受管理物件的屬性:
imqobjmgr update
-t tf
-l "cn=MyTCF"
-o imqReconnectAttempts=3
-j "java.naming.factory.initial=
com.sun.jndi.ldap.LdapCtxFactory"
-j "java.naming.provider.url=
ldap://mydomain.com:389/o=imq"
-j "java.naming.security.principal=
uid=fooUser, ou=People, o=imq"
-j "java.naming.security.credentials=fooPasswd"
-j "java.naming.security.authentication=simple"