MQ Integrator Broker 的連接器可辨識和讀取兩種 Meta 物件:
動態子項 Meta 物件的屬性值會重複並置換靜態 meta 物件的屬性值。
MQ Integrator Broker 配置 Meta 物件包含了針對不同商業物件所定義的轉換內容清單。若要定義商業物件的轉換內容,請先使用語法 busObj_verb 來建立字串屬性並且命名。 例如,若要針對具有動詞 Create 的 Customer 物件定義轉換內容, 請建立名為 Customer_Create 的屬性。 在屬性的應用程式特有資訊中,您再指定實際的轉換內容。
表 10 說明 meta 物件內容。
表 10. MQ Integrator Broker Meta 物件內容
內容名稱 | 說明 |
---|---|
InputFormat | InputFormat 為給定之商業物件相關的訊息格式。 如果可能,擷取的訊息使用這種格式時,會轉換成給定的商業物件。 如果未對商業物件指定此格式,則連接器不會為給定的商業物件處理訂閱遞送。 請勿使用預設轉換內容來設定此內容;其值用於將送入的訊息與商業物件比對。 |
InputQueue | 連接器輪詢來偵測新訊息的輸入佇列。
|
OutputFormat | OutputFormat 設定於所給定之商業物件所建立的訊息上。 如果未指定 OutputFormat,則採用輸入格式(如果可用)。 |
OutputQueue | 從給定的商業物件送出的訊息會傳遞至這個 OutputQueue 輸出佇列。 |
ResponseTimeout | 表示等待回應時,逾時之前的時間長度(毫秒)。 若保留成未定義或指定的值小於零,則連接器不等待回應就立即傳回 SUCCESS。 |
TimeoutFatal | 如果定義這個內容且值為 True,則當 ResponseTimeout 指定的時間內未收到回應時,連接器會傳回 APP_RESPONSE_TIMEOUT。 所有其他正在等待回應訊息的執行緒,會立即將 APP_RESPONSE_TIMEOUT 傳回到 InterChange Server。 這會導致 InterChange Server 終止連接器。 |
此外,於 Meta 物件中可定義一個名為 Default 的保留內容。當此內容出現時,其應用程式特有資訊會指定所有商業物件轉換內容的預設值。
表 11. Customer_Create 的 MQ Integrator Broker 靜態 Meta 物件結構
內容名稱 | 應用程式特有文字 |
---|---|
預設值 | OutputFormat=CUST_OUT; OutputQueue=QueueA; ResponseTimeout=10000; TimeoutFatal=False |
應用程式特有資訊的結構是名稱-值配對的格式,且以分號來區隔。例如:
InputFormat=CUST_IN;OutputFormat=CUST_OUT
您可以使用靜態 Meta 物件的特定應用程式資訊中的 InputQueue 內容,來建立資料處理常式與輸入佇列的關聯性。當處理具有不同格式和轉換需求的多個交易友機時,此功能很有幫助。 若要這麼做,您必須:
例如,靜態 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 物件將連接器配置成使用動詞 Create,Update、Delete 及 Retrieve 來轉換 Customer 商業物件 (請注意,其屬性 Default 在 Meta 物件中已定義)。相應地,連接器使用此屬性 (OutputQueue=CustomerQueue1;ResponseTimeout=5000;TimeoutFatal=true) 的轉換內容。因此,除非屬性另有指定,否則連接器會將所有的商業物件發出到佇列 CustomerQueue1,然後等待回應訊息。如果回應不在 5000 毫秒內到達,連接器則會立即終止。
屬性 Customer_Create 指示連接器,應該將格式 NEW 的任何訊息轉換為具有動詞 Create 的 Customer 商業物件。由於未定義輸出格式,連接器會使用為輸入定義的格式 (在本例中為 NEW), 傳送代表此物件動詞組合的訊息。
輸入格式 MODIFY 已超載 -- 為具有動詞 Update 的商業物件 Customer 及動詞 Delete 的商業物件 Customer 定義。為了順利地處理此格式的擷取訊息,商業物件名稱及動詞 (可能) 應該包含在訊息內容中,以讓資料處理常式識別 (請參閱超載輸入格式)。對於「要求」處理程序作業, 連接器會使用輸入格式 MODIFY 為每個動詞傳送訊息,因為沒有定義輸出格式。
屬性 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 物件,反之亦然。
表 11 和表 12 分別顯示商業物件 Customer_Create
的靜態和動態子項 Meta 物件範例。
請注意,應用程式特有資訊包含分號定界的名稱-值配對。
表 12. Customer_Create 的 MQ Integrator Broker 動態子項 Meta 物件結構
內容名稱 | 值 |
---|---|
OutputFormat | CUST_OUT |
OutputQueue | QueueA |
ResponseTimeout | 10000 |
TimeoutFatal | False |
連接器將檢查已接收之最上層商業物件的應用程式特有資訊,以判斷標籤 cw_mo_conn 是否指定子項 Meta 物件。若已指定,動態子項 Meta 物件值會置換靜態 meta 物件中指定的值。
為了向協同作業提供更多輪詢期間所擷取的訊息資訊, 連接器會移入動態 meta 物件的特定屬性(如果已經針對已建立的商業物件定義的話)。
表 13 顯示如何建構動態子項 meta 物件以執行輪詢。
表 13. 針對輪詢的 MQ Integrator Broker 動態子項 Meta 物件結構
內容名稱 | 範例值 |
---|---|
InputFormat | CUST_IN |
InputQueue | MYInputQueue |
OutputFormat | CxIgnore |
OutputQueue | CxIgnore |
ResponseTimeout | CxIgnore |
TimeoutFatal | CxIgnore |
如表 13 所示, 您可於動態子項 Meta 物件中定義 Input_Format 及 InputQueue 這兩個額外的屬性。Input_Format 會輸入擷取的訊息格式,而 InputQueue 屬性則包含已從中擷取指定訊息的佇列名稱。 如果子項 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]
您可將屬性新增到動態 Meta 物件,以取得訊息傳輸的詳細資訊及更多控制。新增此類屬性可讓您修改 JMS 內容、 控制每個要求的 ReplyToQueue (而不是使用指定在配接器內容中的預設 ReplyToQueue),及重設訊息 CorrelationID 為目標。本節說明以下屬性,以及它們如何影響同步及非同步模式的事件通知及要求處理。
在動態 Meta 物件中可以辨識反映 JMS 及 MQ Integrator Broker
標頭內容的下列屬性。
標頭屬性名稱 | 模式 | 對應的 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 物件。當在要求處理程序期間發出回應訊息時,這些內容也會移入動態 Meta 物件。讀取/寫入屬性會在要求處理程序期間,於建立的訊息標頭上設定。在事件通知期間, 讀取/寫入屬性從訊息標頭中讀取,以移入動態 Meta 物件。
這些屬性的解譯及使用會在下節中說明。
對於同步的事件處理程序,配接器會在將回應訊息傳回應用程式之前公佈事件,並等待整合分配管理系統回應。 在傳回的回應訊息中會反映商業資料的任何變更。在公佈事件之前,配接器會按照非同步事件通知的說明,將資料移入動態 Meta 物件。會在發出回應的標頭中反映動態 Meta 物件中設定的值,如下所述 (會忽略動態 Meta 物件中所有其他唯讀標頭屬性):
如果您沒有在 Meta 物件中定義屬性 CorrelationID,則連接器會自動處理 CorrelationID。
連接器會使用動態 Meta 物件 (若有的話) 在發出要求訊息之前將資料先移入要求訊息。連接器會在傳送要求訊息之前,執行下列步驟:
連接器會使用動態 Meta 物件 (若有的話) 在發出要求訊息之前將資料先移入要求訊息。如果動態 Meta 物件包含標頭屬性, 則連接器會將回應訊息中找到的對應新值移入其中。連接器會在收到回應訊息之後,執行下列步驟 (還有將與傳輸相關之資料移入 Meta 物件):
如果 JMS 內容無法從訊息中讀取,或無法寫入訊息,則連接器會記載錯誤,且要求或事件會失敗。如果使用者定義的 ReplyToQueue 不存在或無法存取它,則連接器會記載錯誤,且要求會失敗。如果 CorrelationID 無效或無法設定,則連接器會記載錯誤,且要求會失敗。在所有情況下,記載的訊息都來自連接器訊息檔。