Meta 物件配置

連接器會使用 Meta 物件項目來判斷要與訊息相關聯的商業物件。 事件訊息處理中使用的商業物件類型和動詞類型,是依據 WebSphere MQ 訊息標頭中包含的 FORMAT 欄位。 您建構 Meta 物件屬性來儲存商業物件名稱和動詞, 以建立與 WebSphere MQ 訊息標頭 FORMAT 欄位文字的關聯性。Meta 物件屬性也包含訊息處理準則。

從輸入佇列擷取訊息時,連接器會查閱 FORMAT 文字欄位相關的商業物件名稱。然後,訊息以及商業物件名稱會傳送至資料處理常式。若順利地將訊息內容輸入到商業物件,則連接器會檢查物件是否經過訂閱, 然後使用 gotApplEvents() 方法將其遞送至整合分配管理系統。

連接器可辨識和讀取兩種 Meta 物件:

動態子項 Meta 物件的屬性值會重複並置換靜態 Meta 物件的屬性值。

當您決定哪個 Meta 物件最適合您的實作方式時,注意事項如下:

Meta 物件內容

表 1 可提供 Meta 物件支援之內容的完整清單。 實作 Meta 物件時,請參閱這些內容。 您的 Meta 物件應該具有表 1 中顯示的一或多個內容。

並非所有內容都可供靜態及動態 Meta 物件使用。 同時,並非所有內容都可以從訊息標頭中讀取或寫入訊息標頭。 請參閱概觀中,有關處理事件及要求的適當章節, 來判斷連接器解譯及使用特定內容的方式。


表 1. WebSphere MQ 配接器 Meta 物件內容
內容名稱 可在靜態 Meta 物件中定義 可在動態 Meta 物件中定義 說明
CollaborationName CollaborationName 必須指定在商業物件/動詞組合之屬性的應用程式特有文字中。比方說, 如果使用者預期以動詞 Create 來處理商業物件 Customer 的同步事件遞送,則靜態 Meta 資料物件必須包含名為 Customer_Create 的屬性。

Customer_Create 屬性必須包含包括名稱-值配對的應用程式特有文字。例如CollaborationName=MyCustomerProcessingCollab。請參閱建立靜態 Meta 物件概觀一節,以取得語法的詳細資料。

若不如此做將會導致連接器在試圖同步處理與 Customer 商業物件相關的要求時,發生執行時期錯誤。

註:
此內容僅適用於同步要求。
DataHandlerConfigMO
 
傳送至資料處理常式以提供配置資訊的 Meta 物件。 若指定於靜態 Meta 物件中,則會置換 DataHandlerConfigMO 連接器內容中所指定的值。 如果需要不同的資料處理常式來處理不同的商業物件類型, 請使用這個 Meta 物件內容。當資料格式可能取決於實際商業資料時,請使用動態子項 Meta 物件來處理要求。連接器代理程式必須支援指定的商業物件。 請參閱附錄 B, 連接器配置程式中的說明。
DataHandlerMimeType
 
可讓您依據特定 MIME 類型以要求資料處理常式。 如果在 Meta 物件中指定此項目,它就會置換 DataHandlerMimeType 連接器內容中指定的值。如果需要不同的資料處理常式來處理不同的商業物件類型, 請使用這個 Meta 物件內容。當資料格式可能取決於實際商業資料時,請使用動態子項 Meta 物件來處理要求。DataHandlerConfigMO 中指定的商業物件應有一個屬性對映至這個內容的值。 請參閱附錄 B, 連接器配置程式中的說明。
DataHandlerClassName
 
請參閱附錄 B, 連接器配置程式中的說明。
InputFormat
 
要與給定商業物件相關聯的入埠 (事件) 訊息格式或類型。 這個值可協助您識別訊息內容,它是由產生訊息的應用程式所指定的。 擷取的訊息使用這種格式時,如果可能,會轉換成給定的商業物件。 如果未對商業物件指定此格式,則連接器不會為給定的商業物件處理訂閱遞送。 請勿使用預設 Meta 物件轉換內容來設定此內容;其值用於將送入的訊息與商業物件比對。 使用者可透過連接器特有內容 MessageFormatProperty,定義連接器所考量之訊息格式定義的欄位。
OutputFormat
 
要移入離埠訊息的格式。OutputFormat 名稱長度不可超過 16 個字元,否則 WebSphere MQ 可能產生錯誤。如果未指定 OutputFormat,則採用輸入格式(如果可用)。
InputQueue 連接器輪詢來偵測新訊息的輸入佇列。這個內容只能用來比對送入的訊息與商業物件。 請勿使用預設轉換內容來設定此內容;其值用於將送入的訊息與商業物件比對。
註:
連接器特有內容中的 InputQueue 內容會定義配接器輪詢哪些佇列。這是配接器用來決定要輪詢哪些佇列的唯一內容。在靜態 MO 中,InputQueue 內容及 InputFormat 內容可作為配接器的準則,以將給定的訊息與特定的商業物件對映。 若要實作這個功能,您可以使用連接器特有內容來配置多個輸入目標,並選擇是否根據送入訊息的輸入格式,為每個輸入目標對映不同的資料處理常式。 如需相關資訊,請參閱將資料處理常式對映到輸入佇列概觀
OutputQueue
 
從給定的商業物件衍生的訊息會傳遞至這個佇列。
ResponseTimeout
 
表示等待同步要求處理的回應時,在逾時之前的時間長度(毫秒)。 若未定義這個內容或指定的值小於零,則連接器不等待回應就立即傳回 SUCCESS。
TimeoutFatal
 
用於同步要求處理,可觸發連接器在未收到回應時,傳回錯誤訊息。 如果這個內容是 True,則如果未在 ResponseTimeout 指定的時間內收到回應,連接器就會將 APPRESPONSETIMEOUT 傳回分配管理系統。 如果尚未定義這個內容或是設為 False,則當回應逾時的時候, 連接器會使要求失效,但是不會終止。預設值 = False
DataEncoding

DataEncoding 是用來讀寫訊息的編碼。 若於靜態 Meta 物件中未指定這個內容,連接器會嘗試不使用任何特定編碼來讀取訊息。 動態子項 Meta 物件中定義的 DataEncoding 將置換靜態 Meta 物件中定義的值。 預設值是 Text。 此屬性的值格式為 messageType[:enc]。亦即,Text:ISO8859_1Text:UnicodeLittleTextBinary。 此內容與 DataEncoding 內容內部相關:每一 InputFormat 指定一個且僅一個 DataEncoding

以下是特別對映到 JMS 訊息標頭的欄位。如需特別解釋、 值的解譯等資訊,請參閱 JMS API 規格。JMS 提供者解譯部分欄位的方式可能會不同,所以如需任何其他解譯方式,請另外查閱您的 JMS 提供者文件
ReplyToQueue
要求的回應訊息傳送至這個佇列。
類型
訊息類型。通常是可由使用者定義的 (但根據 JMS 提供者而定)。
MessageID
訊息的唯一 ID (特定的 JMS 提供者)。
CorrelationID 用於回應訊息,指出起始這個回應的要求訊息 ID。
Delivery Mode 指定 MOM 系統中的訊息是否持續。可接受的值有:

1=不持續

2=持續

根據 JMS 提供者而定,也可以使用其他值。

Priority
訊息的數值優先順序。可接受的值有:0 到 9 (含) (優先順序從低到高)。
Destination
訊息在 MOM 系統中的目前或最後 (如果已移除) 位置。
Expiration
訊息存活時間。
Redelivered
指出 JMS 提供者稍早很可能已試圖將訊息遞送到用戶端,但尚未認可接收。
Timestamp
已將時間訊息傳給 JMS 提供者。
UserID
傳送訊息的使用者身分識別。
AppID
傳送訊息的應用程式身分識別。
DeliveryCount
試圖遞送的次數。
GroupID
訊息群組的身分識別。
GroupSeq
這個訊息在 GroupID 指定之訊息群組中的序列。
JMSProperties
請參閱JMS 內容

建立靜態 Meta 物件概觀

WebSphere MQ 配接器配置 Meta 物件包含為不同商業物件所定義的轉換內容清單。若要檢視範例靜態 Meta 物件, 請啟動「商業物件設計程式」,並開啟隨附於配接器的下列範例: connectors\WebSpereMQ\samples\LegacyContact\WebSpereMQ_MO_Config.xsd

連接器一次最多可支援一個靜態 Meta 物件。 您可以為連接器內容 ConfigurationMetaObject 指定靜態 Meta 物件的名稱,以實作此物件。

在靜態 Meta 物件的結構中,每個屬性都代表單一商業物件與動詞的組合, 以及與處理該物件相關聯的所有 Meta 資料。 每個屬性的名稱應該是商業物件類型的名稱及動詞 (以底線區隔),例如 Customer_Create。屬性應用程式特有資訊應該包含一或多個以分號區隔的名稱值組, 代表您想為這個唯一的物件動詞組合所指定的 Meta 資料內容。


表 2. 靜態 Meta 物件結構
屬性名稱 特定應用程式文字
<business object type>_<verb>
 
    property=value;property=value;...
 
<business object type>_<verb>
 
    property=value;property=value;...
 

例如,請考量下列 Meta 物件:


表 3. 範例靜態 Meta 物件結構
屬性名稱 應用程式特有資訊
Customer_Create
 
    OutputFormat=CUST;OutputDestination=QueueA
 
Customer_Update
 
OutputFormat=CUST;OutputDestination=QueueB
 
Order_Create
 
OutputFormat=ORDER;OutputDestination=QueueC
 

這個範例中的 Meta 物件會在接收類型為 Customer 且動詞為 Create 的「要求」商業物件時,通知連接器,並將它轉換成格式為 CUST 的訊息,然後將它放入目標 QueueA。如果客戶物件的動詞為 Update,則會將訊息放入 QueueB。如果物件類型為 Order 且動詞為 Create,則連接器就會加以轉換 (格式為 ORDER) 並遞送到 QueueC。傳遞到連接器的任何其他商業物件都會被視為未訂閱。

您可以選擇將一個屬性命名為 Default,然後為它指派 ASI 中的一或多個內容。對於 Meta 物件內含的所有屬性而言, 預設屬性的內容會與特定物件動詞屬性的內容結合。 當您要普遍套用一或多個內容 (無論物件動詞組合是什麼) 時,這就很有幫助。 在下列範例中,除了個別的 Meta 資料內容之外,連接器會將物件動詞組合 Customer_CreateOrder_Create 視為具有 OutputDestination=QueueA


表 4. 範例靜態 Meta 物件結構
屬性名稱 應用程式特有資訊
預設值
 
    OutputDestination=QueueA
 
Customer_Update
 
OutputFormat=CUST
 
Order_Create
 
OutputFormat=ORDER
 

表 1 說明您可以在靜態 Meta 物件中, 指定為應用程式特有資訊的內容。

註:
若未指定靜態 Meta 物件,則於輪詢期間,連接器無法將特定的 訊息格式對映至特定的商業物件類型。 此情況下,連接器會將訊息文字傳送至已配置的資料處理常式, 但不指定商業物件。 若資料處理常式無法僅依據文字來建立商業物件,連接器會報告錯誤,指出無法辨識這個訊息格式。

建立靜態 Meta 物件的步驟

若要實作靜態 Meta 物件,請執行下列動作:

  1. 啟動「商業物件設計程式」。如需進一步資訊,請參閱 Business Object Development Guide
  2. 開啟範例 Meta 物件 connectors\WebSphereMQ\samples\LegacyContact\Sample_WebSphereMQ _MO_Config.xsd
  3. 編輯屬性及 ASI 以反映您的需求 (請參閱表 1),然後儲存 Meta 物件檔案。
  4. 將這個 Meta 物件檔案的名稱指定為連接器內容 ConfigurationMetaObject 的值。

將資料處理常式對映到輸入佇列概觀

您可以使用靜態 Meta 物件的特定應用程式資訊中的 InputQueue 內容,來建立資料處理常式與輸入佇列的關聯性。

當處理具有不同格式和轉換需求的多個交易友機時,此功能很有幫助。

將資料處理常式對映到輸入佇列的步驟

若要將資料處理常式對映到 InputQueue,請執行下列動作:

  1. 使用連接器特有內容 (請參閱InputQueue) 來配置一或多個輸入佇列。
  2. 商業物件設計程式中開啟靜態 Meta 物件。
  3. 針對靜態 Meta 物件中的每一個輸入佇列, 在特定應用程式資訊中指定佇列管理程式和輸入佇列名稱,以及資料處理常式類別名稱和 MIME 類型。

例如,靜態 Meta 物件中的下列屬性可建立資料處理常式與 InputQueue (名稱為 CompReceipts) 的關聯性:

[Attribute]
 Name = Cust_Create
 Type = String
 Cardinality = 1
 MaxLength = 1
 IsKey = false
 IsForeignKey = false
 IsRequired = false
 AppSpecificInfo = InputQueue=queue://queue.manager/CompReceipts;
 DataHandlerClassName=com.crossworlds.DataHandlers.WBIMB.
 disposition_notification;DataHandlerMimeType=message/
 disposition_notification
 IsRequiredServerBound = false
 [End]
 

建立動態子項 Meta 物件概觀

如果難以透過靜態 Meta 物件來指定必要的 Meta 資料,或是這樣做並不可行, 則連接器可選擇是否接受於執行時期為每一個商業物件實例所遞送的 Meta 資料。

動態 Meta 資料可讓您根據每個要求,於要求處理期間,變更連接器用來處理商業物件的 Meta 資料,以及於事件處理期間擷取事件訊息相關資訊。

在傳送至連接器之最上層商業物件,新增動態 Meta 物件為子項後, 連接器將辨識並讀取動態 Meta 物件的轉換內容。 動態子項 Meta 物件的屬性值會重複轉換內容, 您可透過用來配置連接器的靜態 Meta 物件指定這些轉換內容。

因為動態子項 Meta 物件內容會置換靜態 Meta 物件中找到的內容, 所以若您指定動態子項 Meta 物件,則不必併入用來指定靜態 Meta 物件的連接器內容。 因此,您可自由地使用動態子項 Meta 物件, 不需考慮靜態 Meta 物件,反之亦然。

表 1 說明您可以在動態 Meta 物件中, 指定為應用程式特有資訊的內容。

下列屬性是在動態 Meta 物件中辨識,可反映 JMS 及 WebSphere MQ 標頭內容。


表 5. 動態 Meta 物件標頭屬性
標頭屬性名稱 模式 對應的 JMS 標頭
CorrelationID
 
讀寫 JMSCorrelationID
ReplyToQueue
 
讀寫 JMSReplyTo
DeliveryMode
 
讀寫 JMSDeliveryMode
Priority
 
讀寫 JMSPriority
Destination
 
讀取 JMSDestination
Expiration
 
讀取 JMSExpiration
MessageID
 
讀取 JMSMessageID
Redelivered
 
讀取 JMSRedelivered
TimeStamp
 
讀取 JMSTimeStamp
Type
 
讀取 JMSType
UserID
 
讀取 JMSXUserID
AppID
 
讀取 JMSXAppID
DeliveryCount
 
讀取 JMSXDeliveryCount
GroupID
 
讀取 JMSXGroupID
GroupSeq
 
讀取 JMSXGroupSeq
JMSProperties
 
讀寫

在事件通知期間,會從訊息標頭讀取唯讀屬性,並寫入動態 Meta 物件。 在要求處理期間發出回應訊息時,這些內容也會移入動態 MO。 在要求處理期間,會於訊息標頭上設定讀寫屬性。 在事件通知期間,會從訊息標頭讀取讀寫屬性以移入動態 Meta 物件。

在動態 Meta 物件的結構中,每個屬性都代表單一 Meta 資料內容及值: meta-object property name =meta-object property value

註:
所有標準 IBM WebSphere 資料處理常式都會辨識 cw_mo_ 標籤,來忽略這個動態 Meta 物件屬性。 當您開發自訂資料處理常式時,必須執行相同動作,才能搭配配接器使用。

輪詢期間動態子項 Meta 物件的移入

為了向協同作業提供更多輪詢期間所擷取的訊息資訊, 連接器會移入動態 Meta 物件的特定屬性(如果已經針對已建立的商業物件定義的話)。

表 6 顯示如何建構動態子項 Meta 物件以執行輪詢。


表 6. 用於輪詢的動態子項 Meta 物件結構
內容名稱 範例值
InputFormat CUST_IN
InputQueue MYInputQueue
OutputFormat CxIgnore
OutputQueue CxIgnore
ResponseTimeout CxIgnore
TimeoutFatal CxIgnore

表 6 所示, 您可於動態子項 Meta 物件中定義 Input_FormatInputQueue 這兩個額外的屬性。Input_Format 會輸入擷取的訊息格式,而 InputQueue 屬性則包含已從中擷取指定訊息的佇列名稱。 如果子項 Meta 物件中未定義這些內容,則不會輸入內容。

範例實務:

JMS 標頭及動態子項 Meta 物件屬性

您可將屬性新增到動態 Meta 物件,以取得訊息傳輸的詳細資訊及更多控制。 本節說明這些屬性,以及它們如何影響事件通知及要求處理。

JMS 內容

與動態 Meta 物件中的其他屬性不同,JMSProperties 必須定義單一基數子項物件。此子項物件中的每個屬性都必須定義單一的內容, 以在 JMS 訊息標頭的不同部份中讀取/寫入,如下所示:

  1. 屬性的名稱無語意值。
  2. 屬性的類型應該一律為 String,而不管 JMS 內容類型。
  3. 屬性的應用程式特有資訊必須包含兩個名稱-值配對,它們定義與屬性對映之 JMS 訊息內容的名稱及格式。名稱可由使用者定義。值類型必須是下列之一:

下表顯示您必須為 JMSProperties 物件中之屬性定義的應用程式特有資訊內容。


表 7. JMS 內容屬性的應用程式特有資訊
屬性 可能值 ASI 註解
名稱 任何有效的 JMS 內容名稱 (有效 = 與 ASI 中定義的類型相容) name=<JMS 內容名稱>;type=<JMS 內容類型> 部份供應商會保留某些內容,以提供延伸的功能。一般而言,使用者不應該定義以 JMS 開頭的自訂內容,除非他們要存取這些供應商特有的功能。
類型 String type=<請參閱註解> 這是 JMS 內容的類型。JMS API 提供在「JMS 訊息」中設定值的許多方法:setIntPropertysetLongPropertysetStringProperty 等等。指定於此處的 JMS 內容類型指出這些方法中的哪個方法用於設定訊息中的內容值。

在下列範例中,為 Customer 物件定義了 JMSProperties 子項物件, 以容許存取訊息標頭的使用者定義欄位:

Customer (ASI = cw_mo_conn=MetaData)
   |-- Id
   |-- FirstName
   |-- LastName
   |-- ContactInfo
   |-- MetaData
         |-- OutputFormat = CUST
         |-- OutputDestination = QueueA
         |-- JMSProperties
              |-- RoutingCode = 123 (ASI= name=RoutingCode;type=Int)
              |-- Dept = FD (ASI= name=RoutingDept;type=String)
 

圖 3 為了說明另一個範例,其顯示動態 Meta 物件中的屬性 JMSProperties,以及 JMS 訊息標頭中四個內容的定義:ID、GID、RESPONSE 及 RESPONSE_PERSIST。 屬性的應用程式特有資訊會定義每一個內容的名稱及類型。例如,屬性 ID 對映到類型 String 的 JMS 內容 ID

圖 3. 動態 Meta 物件中的 JMS 內容屬性


建立動態 Meta 物件的步驟

若要實作動態 Meta 物件,請執行下列動作:

  1. 啟動商業物件設計程式。如需進一步資訊,請參閱 Business Object Development Guide
  2. 開啟您想要動態 Meta 物件影響其處理程序的最上層商業物件。
  3. 將動態 Meta 物件新增為最上層物件的子項,並在最上層物件 ASI 中,包括名稱值組 cw_mo_conn=<MO attribute>,其中 <MO attribute> 是最上層物件,代表動態 Meta 物件的屬性名稱。 例如:
    Customer (ASI = cw_mo_conn=MetaData)
       |-- Id
       |-- FirstName
       |-- LastName
       |-- ContactInfo
       |-- MetaData
             |-- OutputFormat = CUST
             |-- OutputDestination = QueueA
     

    一旦連接器接收到已移入的要求 (如上所示),連接器就會將 Customer 物件轉換成格式為 CUST 的訊息,然後將訊息放入佇列 QueueA

  4. 儲存最上層商業物件。

註:
商業物件可以使用相同或不同的動態 Meta 物件,或完全不使用。

Copyright IBM Corp. 1997, 2004