Meta 物件屬性配置

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

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

靜態 Meta 物件

WebSphere MQ 靜態 Meta 物件包含為不同商業物件所定義的轉換內容清單。若要定義商業物件的轉換內容,請先使用語法 busObj_verb 來建立字串屬性並且命名。 例如,若要使用動詞 Create 來定義 Customer 物件的轉換內容, 請建立命名為 Customer_Create 的屬性。 於屬性的特定應用程式文字中,您再指定實際的轉換內容。

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

下表說明 Meta 物件的內容。
內容名稱 說明
CorrelationID 此內容僅會影響要求處理程序期間的配接器行為,且其處理方式與動態 Meta 物件中的 CorrelationID 內容一樣。如需詳細資訊,請參閱非同步要求處理程序
CollaborationName CollaborationName 必須指定在商業物件/動詞組合之屬性的應用程式特有文字中。比方說, 如果使用者預期以動詞 Create 處理商業物件 Customer 的同步要求,則靜態 Meta 資料物件必須包含名為 Customer_Create 的屬性。

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

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

註:
此內容僅適用於同步要求。
DataEncoding

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

DataHandlerConfigMO 傳送至資料處理常式以提供配置資訊的 Meta 物件。 若指定於靜態 Meta 物件中,則會置換 DataHandlerConfigMO 連接器內容中所指定的值。 當需要不同資料處理常式來處理不同的商業物件類型時,請使用此靜態 Meta 物件內容。若於動態子項 Meta 物件中定義這個內容, 則會置換連接器內容和靜態 Meta 物件內容。 當資料格式可能取決於實際商業資料時,請使用動態子項 Meta 物件來處理要求。指定的商業物件必須是連接器支援的物件。
DataHandlerMimeType 可讓您依據特定 MIME 類型以要求資料處理常式。 如果在靜態 Meta 物件中指定,則會置換 DataHandlerMimeType 連接器內容中所指定的值。當需要不同資料處理常式來處理不同的商業物件類型時,請使用此靜態 Meta 物件內容。若於動態子項 Meta 物件中定義這個內容, 則會置換連接器內容和靜態 Meta 物件內容。 當資料格式可能取決於實際商業資料時,請使用動態子項 Meta 物件來處理要求。DataHandlerConfigMO 中指定的商業物件應有一個屬性對映至這個內容的值。
DoNotReportBusObj 使用者可以選擇併入 DoNotReportBusObj 內容。 若將這個內容設為 true,則所有發出的 PAN 報告訊息有空白的訊息主體。 當要求者想要確認要求已順利處理,但不需要商業物件的變更通知時,建議採用這項設定。 這不影響 NAN 報告。

如果在靜態 Meta 物件中找不到此內容,則連接器將其預設為 false,並在訊息報告中輸入商業物件。

註:
此內容僅適用於同步要求。
InputFormat

InputFormat 為給定之商業物件相關的訊息格式。 如果可能,擷取的訊息使用這種格式時,會轉換成給定的商業物件。 此內容與 InputFormat 內容內部相關:每一 InputFormat 指定一個且僅一個 DataEncoding。請勿使用預設轉換內容來設定此內容;其值用於將送入的訊息與商業物件比對。

OutputFormat OutputFormat 設定於所給定之商業物件所建立的訊息上。 如果未指定 OutputFormat,則採用輸入格式(如果可用)。 動態子項 Meta 物件中定義的 OutputFormat 會置換靜態 Meta 物件中定義的值。
InputQueue 連接器輪詢來偵測新訊息的輸入佇列。
註:
連接器特有內容中的 InputQueue 內容會定義配接器輪詢哪些佇列。這是配接器用來決定要輪詢哪些佇列的唯一內容。在靜態 MO 中,InputQueue 內容及 InputFormat 內容可作為配接器的準則,以將給定的訊息與特定的商業物件對映。如需將資料處理常式與 InputQueues 對映的資訊,請參閱將資料處理常式對映到 InputQueues
OutputQueue 從給定的商業物件送出的訊息會傳遞至這個 OutputQueue 輸出佇列。 動態子項 Meta 物件中定義的 OutputQueue 會置換靜態 Meta 物件中定義的值。
ResponseTimeout 表示等待回應時,逾時之前的時間長度(毫秒)。 若保留成未定義或指定的值小於零,則連接器不等待回應就立即傳回 SUCCESS。動態子項 Meta 物件中定義的 ResponseTimeout 會置換靜態 Meta 物件中定義的值。
TimeoutFatal 如果定義這個內容且值為 True,則當 ResponseTimeout 指定的時間內未收到回應時,連接器會傳回 APP_RESPONSE_TIMEOUT。 所有其他正在等待回應訊息的執行緒,會立即將 APP_RESPONSE_TIMEOUT 傳回到 InterChange Server。 這會導致 InterChange Server 終止連接器。動態子項 Meta 物件中定義的 TimeoutFatal 會置換靜態 Meta 物件中定義的值。

此外,於 Meta 物件中可定義一個名為 Default 的保留內容。當此內容出現時,其應用程式特有資訊會指定所有商業物件轉換內容的預設值。

請考量下列 Meta 物件範例。
內容名稱 特定應用程式文字
預設值 DataEncoding=Text:UnicodeLittle;
OutputFormat=CUST_OUT;
OutputQueue=QueueA;ResponseTimeout=10000;
TimeoutFatal=False

應用程式特有資訊

應用程式特有資訊的結構是名稱-值配對的格式,且以分號來區隔。例如:

InputFormat=CUST_IN;OutputFormat=CUST_OUT

將資料處理常式對映到 InputQueues

您可以使用靜態 Meta 物件的特定應用程式資訊中的 InputQueue 內容,來建立資料處理常式與輸入佇列的關聯性。當處理具有不同格式和轉換需求的多個交易友機時,此功能很有幫助。 若要這麼做,您必須:

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

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

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

超載輸入格式

於擷取訊息時,連接器通常會比對輸入格式與一個特定商業物件和動詞組合。 然後,連接器會將商業物件名稱和訊息內容傳送至資料處理常式。此可讓資料處理常式驗證訊息內容是否對應於使用者預期的商業物件。

然而,若為多個商業物件定義相同輸入格式, 則連接器將資料傳送到資料處理常式之前,無法判斷資料所代表的商業物件。 在此情況下,連接器僅將訊息內容傳送到資料處理常式,然後依據已產生的商業物件來查閱轉換內容。因此,資料處理常式必須僅依據訊息內容來判斷商業物件。

若未設定已產生之商業物件的動詞,則連接器會使用任何動詞來 搜尋針對這個商業物件所定義的轉換內容。 如果只找到一組轉換內容,連接器會指派指定的動詞。 如果找到多個內容,連接器會讓訊息失敗,因為無法區別動詞。

Meta 物件範例

以下顯示的靜態 Meta 物件將連接器配置成使用動詞 Create、Update、Delete 及 Retrieve 來轉換 Customer 商業物件。請注意屬性 Default 定義在 Meta 物件中。連接器使用此屬性的轉換內容:

OutputQueue=CustomerQueue1;ResponseTimeout=5000;TimeoutFatal=true
 

作為所有其他轉換內容的預設值。因此,除非另外由屬性指定或由動態子項 Meta 物件值置換, 否則連接器會將所有的商業物件發出到佇列 CustomerQueue1,然後等待回應訊息。如果回應不在 5000 毫秒內到達,連接器則會立即終止。

具有動詞 Create 的 Customer 物件

屬性 Customer_Create 指示連接器,應該將格式 NEW 的任何訊息轉換為具有動詞 Create 的 Customer 商業物件。由於未定義輸出格式,連接器會使用為輸入定義的格式 (在本例中為 NEW), 傳送代表此物件動詞組合的訊息。

具有動詞 Update 及 Delete 的 Customer 物件

輸入格式 MODIFY 已超載 -- 為具有動詞 Update 的商業物件 Customer 及動詞 Delete 的商業物件 Customer 定義。為了順利地處理此格式的擷取訊息,商業物件名稱及動詞 (可能) 應該包含在訊息內容中,以讓資料處理常式識別 (請參閱超載輸入格式)。對於「要求」處理程序作業,因為沒有定義輸出格式, 連接器會使用輸入格式 MODIFY 為每個動詞傳送訊息。

具有動詞 Retrieve 的 Customer 物件

屬性 Customer_Retrieve 指定具有動詞 Retrieve 且類型為 Customer 的商業物件,應該以格式 Retrieve 作為訊息傳送。請注意已置換預設回應時間,因此連接器在逾時之前會等待最多 10000 毫秒 (如果未接收到回應,它仍然會終止)。

[ReposCopy]
 Version = 3.1.0
 Repositories = 1cHyILNuPTc=
 [End]
 [BusinessObjectDefinition]
 Name = Sample_MO
 Version = 1.0.0
  
 [Attribute]
 Name = Default
 Type = String
 Cardinality = 1
 MaxLength = 1
 IsKey = true
 IsForeignKey = false
 IsRequired = false
 AppSpecificInfo = OutputQueue=CustomerQueue1;ResponseTimeout=5000;TimeoutFatal=true
 IsRequiredServerBound = false
 [End]
 [Attribute]
 Name = Customer_Create
 Type = String
 Cardinality = 1
 MaxLength = 1
 IsKey = false
 IsForeignKey = false
 IsRequired = false
 AppSpecificInfo = InputFormat=NEW
 IsRequiredServerBound = false
 [End]
 [Attribute]
 Name = Customer_Update
 Type = String
 Cardinality = 1
 MaxLength = 1
 IsKey = false
 IsForeignKey = false
 IsRequired = false
 AppSpecificInfo = InputFormat=MODIFY
 IsRequiredServerBound = false
 [End]
 [Attribute]
 Name = Customer_Delete
 Type = String
 Cardinality = 1
 MaxLength = 1
 IsKey = false
 IsForeignKey = false
 IsRequired = false
 AppSpecificInfo = InputFormat=MODIFY
 IsRequiredServerBound = false
 [End]
 [Attribute]
 Name = Customer_Retrieve
 Type = String
 Cardinality = 1
 MaxLength = 1
 IsKey = false
 IsForeignKey = false
 IsRequired = false
 AppSpecificInfo = OutputFormat=RETRIEVE;ResponseTimeout=10000
 IsRequiredServerBound = false
 [End]
 [Attribute]
 Name = ObjectEventId
 Type = String
 MaxLength = 255
 IsKey = false
 IsForeignKey = false
 IsRequired = false
 IsRequiredServerBound = false
 [End]
  
 [Verb]
 Name = Create
 [End]
  
 [Verb]
 Name = Delete
 [End]
  
 [Verb]
 Name = Retrieve
 [End]
  
 [Verb]
 Name = Update
 [End]
 [End]
 

動態子項 Meta 物件

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

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

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

註:
連接器不支援動態子項 Meta 物件的使用,以在同步事件遞送期間供應協同作業名稱。

前一節中的表格及下面的表格,分別顯示商業物件 Customer_Create 的範例靜態和動態子項 Meta 物件。請注意,應用程式特有資訊包含分號定界的名稱-值配對。
內容名稱
DataEncoding Text:UnicodeLittle
DataHandlerMimeType* text/delimited
OutputFormat CUST_OUT
OutputQueue QueueA
ResponseTimeout 10000
TimeoutFatal False

*假設在連接器配置內容或靜態 Meta 物件中指定了 DataHandlerConfigMO。

連接器將檢查已接收之最上層商業物件的應用程式特有資訊,以判斷標籤 cw_mo_conn 是否指定子項 Meta 物件。若已指定,動態子項 Meta 物件值會置換靜態 Meta 物件中指定的值。

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

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

下表顯示如何建構動態子項 Meta 物件以執行輪詢。
內容名稱 範例值
InputFormat CUST_IN
InputQueue MYInputQueue
OutputFormat CxIgnore
OutputQueue CxIgnore
ResponseTimeout CxIgnore
TimeoutFatal CxIgnore

如上表所示,您可在動態子項 Meta 物件中定義 InputQueue 這個額外的屬性。這個屬性包含已從中擷取指定訊息的佇列名稱。 如果子項 Meta 物件中未定義這個內容,則不會輸入資料。

範例實務:

範例動態子項 Meta 物件

[BusinessObjectDefinition]
 Name = MO_Sample_Config
 Version = 1.0.0
  
    [Attribute]
    Name = OutputFormat
    Type = String
    MaxLength = 1
    IsKey = true
    IsForeignKey = false
    IsRequired = false
    DefaultValue = CUST
    IsRequiredServerBound = false
 [End]
    [Attribute]
    Name = OutputQueue
    Type = String
    MaxLength = 1
    IsKey = false
    IsForeignKey = false
    IsRequired = false
    DefaultValue = OUT
    IsRequiredServerBound = false
 [End]
    [Attribute]
    Name = ResponseTimeout
    Type = String
    MaxLength = 1
    IsKey = false
    IsForeignKey = false
    IsRequired = false
    DefaultValue = -1
    IsRequiredServerBound = false
 [End]
    [Attribute]
    Name = TimeoutFatal
    Type = String
    MaxLength = 1
    IsKey = false
    IsForeignKey = false
    IsRequired = false
    DefaultValue = false
    IsRequiredServerBound = false
 [End]
    [Attribute]
    Name = InputFormat
    Type = String
    MaxLength = 1
    IsKey = true
    IsForeignKey = false
    IsRequired = false
    IsRequiredServerBound = false
 [End]
    [Attribute]
    Name = InputQueue
    Type = String
    MaxLength = 1
    IsKey = false
    IsForeignKey = false
    IsRequired = false
    IsRequiredServerBound = false
 [End]
    [Attribute]
    Name = ObjectEventId
    Type = String
    MaxLength = 255
    IsKey = false
    IsForeignKey = false
    IsRequired = false
    IsRequiredServerBound = false
 [End]
  
    [Verb]
    Name = Create
 [End]
  
    [Verb]
    Name = Delete
 [End]
  
    [Verb]
    Name = Retrieve
 [End]
  
    [Verb]
    Name = Update
 [End]
 [End]
 [BusinessObjectDefinition]
 Name = Customer
 Version = 1.0.0
 AppSpecificInfo = cw_mo_conn=MyConfig
  
    [Attribute]
    Name = FirstName
    Type = String
    MaxLength = 1
    IsKey = true
    IsForeignKey = false
    IsRequired = false
    IsRequiredServerBound = false
 [End]
    [Attribute]
    Name = LastName
    Type = String
    MaxLength = 1
    IsKey = true
    IsForeignKey = false
    IsRequired = false
    IsRequiredServerBound = false
 [End]
    [Attribute]
    Name = Telephone
    Type = String
    MaxLength = 1
    IsKey = false
    IsForeignKey = false
    IsRequired = false
    IsRequiredServerBound = false
 [End]
    [Attribute]
    Name = MyConfig
    Type = MO_Sample_Config
    ContainedObjectVersion = 1.0.0
    Relationship = Containment
    Cardinality = 1
    MaxLength = 1
    IsKey = false
    IsForeignKey = false
    IsRequired = false
    IsRequiredServerBound = false
 [End]
    [Attribute]
    Name = ObjectEventId
    Type = String
    MaxLength = 255
    IsKey = false
    IsForeignKey = false
    IsRequired = false
    IsRequiredServerBound = false
 [End]
  
    [Verb]
    Name = Create
 [End]
  
    [Verb]
    Name = Delete
 [End]
  
    [Verb]
    Name = Retrieve
 [End]
  
    [Verb]
    Name = Update
 [End]
 [End]
 

JMS 標頭、WebSphere MQ 訊息內容及動態子項 Meta 物件屬性

您可將屬性新增到動態 Meta 物件,以取得訊息傳輸的詳細資訊及更多控制。新增此類屬性可讓您修改 JMS 內容、 控制每個要求的 ReplyToQueue (而不是使用指定在配接器內容中的預設 ReplyToQueue),及重設訊息 CorrelationID 為目標。本節說明以下屬性,以及它們如何影響同步及非同步模式的事件通知及要求處理。

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

表 1. 動態 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 物件。

JMS 內容

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

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

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

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

下面的圖例顯示動態 Meta 物件中的屬性 JMSProperties 及 JMS 訊息標頭中四個內容 (ID、GID、RESPONSE 及 RESPONSE_PERSIST) 的定義。屬性的應用程式特有資訊會定義每一個內容的名稱及類型。例如,屬性 ID 對映到類型 String 的 JMS 內容 ID

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


非同步事件通知

如果具有標頭屬性的動態 Meta 物件存在於事件商業物件中,則連接器會執行下列步驟 (還有將與傳輸相關的資料輸入 Meta 物件):

  1. 將指定在訊息之 JMSCorrelationID 標頭欄位內的值輸入 Meta 物件的 CorrelationId 屬性。
  2. 將指定在訊息之 JMSReplyTo 標頭欄位內的佇列輸入 Meta 物件的 ReplyToQueue 屬性。因為此標頭欄位以訊息中的 Java 物件表示,所以會以佇列的名稱 (通常為 URI) 輸入屬性。
  3. 將指定在訊息之 JMSDeliveryMode 標頭欄位內的值輸入 Meta 物件的 DeliveryMode 屬性。
  4. 將訊息之 JMSPriority 標頭欄位輸入 Meta 物件的 Priority 屬性。
  5. 將訊息之 JMSDestination 標頭欄位名稱輸入 Meta 物件的 Destination 屬性。因為 Destination 是以物件表示,所以會將 Destination 物件的名稱輸入屬性。
  6. 將訊息之 JMSExpiration 標頭欄位的值輸入 Meta 物件的 Expiration 屬性。
  7. 將訊息之 JMSMessageID 標頭欄位的值輸入 Meta 物件的 MessageID 屬性。
  8. 將訊息之 JMSRedelivered 標頭欄位的值輸入 Meta 物件的 Redelivered 屬性。
  9. 將訊息之 JMSTimeStamp 標頭欄位的值輸入 Meta 物件的 TimeStamp 屬性。
  10. 將訊息之 JMSType 標頭欄位的值輸入 Meta 物件的 Type 屬性。
  11. 將訊息之 JMSXUserID 內容欄位的值輸入 Meta 物件的 UserID 屬性。
  12. 將訊息之 JMSXAppID 內容欄位的值輸入 Meta 物件的 AppID 屬性。
  13. 將訊息之 JMSXDeliveryCount 內容欄位的值輸入 Meta 物件的 DeliveryCount 屬性。
  14. 將訊息之 JMSXGroupID 內容欄位的值輸入 Meta 物件的 GroupID 屬性。
  15. 將訊息之 JMSXGroupSeq 內容欄位的值輸入 Meta 物件的 GroupSeq 屬性。
  16. 查驗為 Meta 物件之 JMSProperties 屬性定義的物件。配接器會將訊息中對應內容的值輸入此物件的每個屬性。如果在訊息中未定義特定的內容, 配接器會將屬性的值設為 CxBlank。

同步事件通知

對於同步的事件處理程序,配接器會在將回應訊息傳回應用程式之前公佈事件,並等待整合分配管理系統回應。 在傳回的回應訊息中會反映商業資料的任何變更。在公佈事件之前,配接器會按照非同步事件通知的說明,將資料輸入動態 Meta 物件。會在發出回應的標頭中反映動態 Meta 物件中設定的值,如下所述 (會忽略動態 Meta 物件中所有其他唯讀標頭屬性):

非同步要求處理程序

連接器會使用動態 Meta 物件 (若有的話) 在發出要求訊息之前將資料先輸入要求訊息。連接器會在傳送要求訊息之前,執行下列步驟:

  1. 如果屬性 CorrelationID 存在於動態 Meta 物件中,則連接器會將離埠要求訊息的 CorrelationID 設為此值。
  2. 如果屬性 ReplyToQueue 在動態 Meta 物件指定,則連接器會透過要求訊息傳遞此值,並在此佇列上等待回應。 這可讓您置換在連接器配置內容中指定的 ReplyToQueue 值。如果您又指定了負的 ResponseTimeout (意味著連接器不應等待回應),則即使連接器實際上不等待回應,仍會設定回應訊息中的 ReplyToQueue
  3. 如果屬性 DeliveryMode 設為 2,則會持續傳送訊息。如果 DeliveryMode 設為 1,則不會持續傳送訊息。任何其他值可能會讓連接器失敗。如果未在 MO 中指定 DeliveryMode,則 JMS 提供程式會建立持續性設定。
  4. 如果指定了屬性 Priority,則連接器會設定送出要求中的值。Priority 屬性可以接受從 0 到 9 之間的值;任何其他值都可能會導致連接器終止。
  5. 如果在動態 Meta 物件中指定屬性 JMSProperties,則會在連接器傳送之離埠訊息中,設定子項動態 Meta 物件中指定的對應 JMS 內容。

註:
如果動態 Meta 物件中的標頭屬性未定義,或指定 CxIgnore,則連接器會遵循其預設值。

同步要求處理程序

連接器會使用動態 Meta 物件 (若有的話) 在發出要求訊息之前將資料先輸入要求訊息。如果動態 Meta 物件包含標頭屬性, 則連接器會將回應訊息中找到的對應新值輸入其中。連接器會在收到回應訊息之後,執行下列步驟 (還有將與傳輸相關之資料輸入 Meta 物件):

  1. 如果屬性 CorrelationID 存在於動態 Meta 物件中,則配接器會以指定在回應訊息中的 JMSCorrelationID 來更新此屬性。
  2. 如果屬性 ReplyToQueue 定義在動態 Meta 物件中,則配接器會以指定在回應訊息中的 JMSReplyTo 名稱來更新此屬性。
  3. 如果屬性 DeliveryMode 存在於動態 Meta 物件中,則配接器會以訊息的 JMSDeliveryMode 標頭欄位值來更新此屬性。
  4. 如果屬性 Priority 存在於動態 Meta 物件中,則配接器會以訊息的 JMSPriority 標頭欄位值來更新此屬性。
  5. 如果屬性 Destination 定義在動態 Meta 物件中,則配接器會以指定在回應訊息中的 JMSDestination 名稱來更新此屬性。
  6. 如果屬性 Expiration 存在於動態 Meta 物件中,則配接器會以訊息的 JMSExpiration 標頭欄位值來更新此屬性。
  7. 如果屬性 MessageID 存在於動態 Meta 物件中,則配接器會以訊息的 JMSMessageID 標頭欄位值來更新此屬性。
  8. 如果屬性 Redelivered 存在於動態 Meta 物件中,則配接器會以訊息的 JMSRedelivered 標頭欄位值來更新此屬性。
  9. 如果屬性 TimeStamp 存在於動態 Meta 物件中,則配接器會以訊息的 JMSTimeStamp 標頭欄位值來更新此屬性。
  10. 如果屬性 Type 存在於動態 Meta 物件中,則配接器會以訊息的 JMSType 標頭欄位值來更新此屬性。
  11. 如果屬性 UserID 存在於動態 Meta 物件中,則配接器會以訊息的 JMSXUserID 標頭欄位值來更新此屬性。
  12. 如果屬性 AppID 存在於動態 Meta 物件中,則配接器會以訊息的 JMSXAppID 內容欄位值來更新此屬性。
  13. 如果屬性 DeliveryCount 存在於動態 Meta 物件中,則配接器會以訊息的 JMSXDeliveryCount 標頭欄位值來更新此屬性。
  14. 如果屬性 GroupID 存在於動態 Meta 物件中,則配接器會以訊息的 JMSXGroupID 標頭欄位值來更新此屬性。
  15. 如果屬性 GroupSeq 存在於動態 Meta 物件中,則配接器會以訊息的 JMSXGroupSeq 標頭欄位值來更新此屬性。
  16. 如果屬性 JMSProperties 定義在動態 Meta 物件中,則配接器會以回應訊息中找到的值,來更新定義在子項物件中的任何內容。如果定義在子項物件中的內容不存在於訊息中,則會將值設為 CxBlank。

註:
使用動態 Meta 物件變更設定在要求訊息中的 CorrelationID, 並不會影響配接器識別回應訊息的方法-配接器依預設會預期任何回應訊息的 CorrelationID 等於配接器傳送之要求的訊息 ID。

錯誤處理

如果 JMS 內容無法從訊息中讀取,或無法寫入訊息,則連接器會記載錯誤,且要求或事件會失敗。如果使用者定義的 ReplyToQueue 不存在或無法存取它,則連接器會記載錯誤,且要求會失敗。如果 CorrelationID 無效或無法設定,則連接器會記載錯誤,且要求會失敗。在所有情況下,記載的訊息都來自連接器訊息檔。

Copyright IBM Corp. 1997, 2003