連接器依據每一個商業物件的動詞來處理協同作業傳送給它的商業物件。連接器使用商業物件處理常式和 doForVerb() 方法來處理連接器支援的商業物件。連接器支援下列商業物件動詞:
對於搭配 create、update 及 delete 動詞的商業物件, 其處理程序視物件是同步或非同步發出而定。
這是具有 Create、Update 及 Delete 動詞之商業物件的預設遞送模式。訊息是透過資料處理常式從商業物件中建立,然後寫入輸出佇列中。 如果訊息順利遞送,則連接器傳回 SUCCESS,否則傳回 FAIL。
如果 ReplyToQueue 已在連接器特有內容中定義且 responseTimeout 存在於商業物件的轉換內容中,連接器會以同步模式發出要求。然後,連接器將等待回應以驗證接收之應用程式已採取適當的動作。
對於 WebSphere MQ,連接器最初會發出含有下表中顯示之標頭的訊息。
欄位 | 說明 | 值 |
---|---|---|
Format | 格式名稱 | 轉換內容中所定義的輸出格式,並截斷成 8 個字元以符合 IBM 基本需求 (例如:MQSTR) |
MessageType | 訊息類型 | MQMT_DATAGRAM* 如果不期望從接收的應用程式得到回應。
MQMT_REQUEST* 如果期望得到回應 |
Report | 所要求之報告訊息的選項。 | 當期望有回應訊息時,將此欄位輸入資料如下:MQRO_PAN* 表示如果順利完成,則需要正面動作報告。MQRO_NAN* 表示如果處理失敗,則需要負面動作報告。MQRO_COPY_MSG_ID_TO_CORREL_ID* 表示已產生之報告的相互關係 ID 應該等於最初所發出之要求的訊息 ID。 |
ReplyToQueue | 回覆佇列的名稱 | 當預期為回應訊息時,此欄位中會輸入連接器內容 ReplyToQueue 的值。 |
Persistence | 訊息持續性 | MQPER_PERSISTENT* |
Expiry | 訊息生命週期 | MQEI_UNLIMITED* |
*表示 IBM 所定義的常數。
上面的表格中所說明的訊息標頭後面接著訊息主體。訊息主體為已透過資料處理常式來序列化的商業物件。
Report 欄位的設定指出預期從接收之應用程式傳回正面和負面的動作報告。發出訊息的執行緒將等待回應訊息, 此回應訊息指出接收之應用程式是否能夠處理要求。
當應用程式收到來自連接器的同步要求時,它會處理商業物件,並發出下表中說明的報告訊息。
欄位 | 說明 | 值 |
---|---|---|
Format | 格式名稱 | 轉換內容中所定義的 busObj 輸入格式。 |
MessageType | 訊息類型 | MQMT_REPORT* |
*表示 IBM 所定義的常數。
動詞 | 回饋欄位 | 訊息主體 |
---|---|---|
Create、Update 或 Delete | SUCCESS VALCHANGE | (選用)反映變更的序列化商業物件。 |
| VALDUPES FAIL | (選用)錯誤訊息。 |
WebSphere MQ 回饋碼 | 相等的回應* |
---|---|
MQFB_NONE (如果沒有指定回饋碼,則它就是預設值) | VALCHANGE |
MQFB_PANor MQFB_APPL_FIRST | SUCCESS |
MQFB_NAN或 MQFB_APPL_FIRST + 1 | FAIL |
MQFB_APPL_FIRST + 2 | VALCHANGE |
MQFB_APPL_FIRST + 3 | VALDUPES |
MQFB_APPL_FIRST + 4 | MULTIPLE_HITS |
MQFB_APPL_FIRST + 5 | FAIL_RETRIEVE_BY_CONTENT |
MQFB_APPL_FIRST + 6 | BO_DOES_NOT_EXIST |
MQFB_APPL_FIRST + 7 | UNABLE_TO_LOGIN |
MQFB_APPL_FIRST + 8 | APP_RESPONSE_TIMEOUT (導致立即終止連接器代理程式) |
*詳細資料請參閱 Connector Development Guide for Java。
若可處理商業物件,則應用程式會建立報告訊息, 並將回饋欄位設為 MQFB_PAN (或特定的 WebSphere Business Integration 系統值)。 (可選用的)應用程式將於訊息主體中輸入含有任何變更的序列化商業物件。 若無法處理商業物件,應用程式則會建立報告訊息, 並將回饋欄位設為 MQFB_NAN (或特定的 WebSphere Business Integration 系統值), 然後在訊息主體中選擇性地併入錯誤訊息。 於任何一種情況下,應用程式會將訊息的 correlationID 欄位設為連接器訊息的 messageID,並發出至 replyTo 欄位所指定的佇列。
在擷取回應訊息時,依預設連接器會比對回應的 correlationID 與要求訊息的 messageID。 然後,連接器會通知發出要求的執行緒。依據回應的回饋欄位,連接器會預期訊息主體中包含商業物件或錯誤訊息。如果回饋碼是 MQFB_NONE (如果沒有指定回饋碼,則它就是預設值),則連接器依預設會將回覆碼視為 VALCHANGE。然後連接器就會將回應訊息傳遞到資料處理常式,並更新商業物件。 若原預期為商業物件,但訊息主體中並未輸入資料,則連接器只是傳回 InterChange Server 最初發出的相同商業物件來滿足「要求」作業。若原預期為錯誤訊息,但訊息主體中並未輸入資料, 則一般錯誤訊息伴隨著回應碼會傳回至 InterChange Server。 然而,您還可以使用訊息選取元,以識別、過濾或控制配接器如何為給定的要求識別回應訊息。此訊息選取元功能是一個 JMS 特性。它僅應用於同步的要求處理,說明如下。
根據接收同步要求處理程序的商業物件,連接器會檢查動詞之應用程式特有資訊中的 response_selector 字串是否存在。如果未定義 response_selector,連接器會使用上面介紹的 correlationID 識別回應訊息。
如果定義了 response_selector,連接器會期望具有下列語法的名稱值組:
response_selector=JMSCorrelationID LIKE'selectorstring'
訊息 selectorstring 必須唯一地識別回應,並且其值必須像下面範例顯示的一樣用單引號括上:
response_selector=JMSCorrelationID LIKE 'Oshkosh'
在上面的範例中,在發出要求訊息之後,配接器會為等同於 "Oshkosh" 之相互關係 ID 的回應訊息監視 ReplyToQueue。配接器會擷取符合此訊息選取元的第一個訊息,然後將其作為回應分派。
選擇性地,配接器執行可讓您為每一個要求產生唯一訊息選取元的執行時期替代。不指定訊息選取元, 你可以大括弧括起的整數形式指定位置保留區,例如:'{1}'。然後跟上一個冒號及以逗點區隔清單屬性, 來使用於替代。會將位置保留區中的整數作為屬性的索引,使用於替代。例如,下列的訊息選取元:
response_selector=JMSCorrelationID LIKE '{1}': MyDynamicMO.CorrelationID
會通知配接器用緊跟選取元的第一屬性值取代 {1} 在這種情況下係指,MyDynamicMO 子項物件的 CorrelationId 屬性。如果屬性 CorrelationID 具有值 123ABC,配接器會產生並使用用下列準則建立的訊息選取元:
JMSCorrelation LIKE '123ABC'
識別回應訊息。
您還可以指定多重替代,如下所示:
response_selector=PrimaryId LIKE '{1}' AND AddressId LIKE '{2}' : PrimaryId, Address[4].AddressId
在此範例中,配接器會用最上層商業物件之屬性 PrimaryId 替代 {1},從子儲存區物件 Address 的第五個位置用值 AddressId 替代 {2}。以這種方式,您可以參照商業物件中的任何屬性及回應訊息選取元中的 Meta 物件。如需如何使用 Address[4].AddressId 執行深層擷取的詳細資訊,請參閱 JCDK API 手動 (getAttribute 方法)
當執行時期發生下列任一情況時,都會報告錯誤:
例如,如果您在訊息選取元中併入文字值 '{' 或 '}',則可以分別使用 '{{' 或 "{}"。您還可以將這些字元放置在屬性值中,在這種情況下,不需要第一個 "{"。使用跳離字元來考量下列範例:response_selector=JMSCorrelation LIKE '{1}' 及 CompanyName='A{{P': MyDynamicMO.CorrelationID
連接器會解析此訊息選取元,如下所示:
JMSCorrelationID LIKE '123ABC' and CompanyName='A{P'
當連接器遇到屬性值中的特殊字元 (如 '{'、'}'、':' 或 ';') 時,會將它們直接插入查詢字串。這可讓您併入還作為應用程式特有資訊定界字元之查詢字串中的特殊字元。
下一個範例說明如何從屬性值擷取文字字串替代:
response_selector=JMSCorrelation LIKE '{1}' 及 CompanyName='A{{P': MyDynamicMO.CorrelationID
若 MyDynamicMO.CorrelationID 內含值 {A:B}C;D,連接器會解析下面的訊息選取元: JMSCorrelationID LIKE '{A:B}C;D' 及 CompanyName='A{P'
如需回應選取元程式碼的詳細資訊,請參閱 JMS 1.0.1 規格。
針對 WebSphere MQ 的配接器,提供支援作為商業物件內容的雙向轉換。 在連接器與外部 WebSphere MQ 應用程式交換 Meta 資料,並使用同步遞送過濾機制尋找 ReplyToQueue 中的回應訊息時, 也會提供雙向支援。 在這些情況下,會套用雙向轉換, 如此 Windows 標準格式會轉換成 WebSphere MQ 應用程式的雙向格式。這可以使用 BiDi.Application 標準配置內容的屬性設定完成。
當 response_selector 以下列語法指定
response_selector=JMSCorrelationID LIKE'selectorstring'
且當雙向字元出現在 'selectorstring' 時, 配接器可配置為轉換 'selectorstring' 為外部應用程式的雙向格式, 此應用程式負責傳送配接器建立之要求的回應訊息。 當外部應用程式的雙向格式與應用程式特定資訊的預設 Windows 格式不同時 (一開始在 Connector Designer 應用程式中定義), 這會是必要的。在此情況下, BiDi.Application 標準配置內容需要以外部應用程式的雙向格式配置; 然後,配接器會將訊息選取字元串用來過濾回應訊息之前先轉換它。
您可指定連接器內容 FeedbackCodeMappingMO,延伸 WebSphere MQ 回饋碼來置換預設解譯。這個內容可使您建立一個 Meta 物件,其中所有 WebSphere Business Integration 系統特定傳回狀態值皆對映至 WebSphere MQ 回饋碼。(使用 Meta 物件) 指定給回饋碼的傳回狀態會傳送至 InterChange Server。如需詳細資訊,請參閱"FeedbackCodeMappingMO"。
搭配 Retrieve、Exists 及 Retrieve By Content 動詞的商業物件僅支援同步遞送。連接器處理這些動詞的商業物件,就如同處理 create、update 及 delete 定義的同步遞送一樣。 然而,使用 Retrieve、Exists 及 Retrieve By Content 動詞時,responseTimeout 和 replyToQueue 是必要的。 再者,對於 Retrieve By Content 和 Retrieve 動詞,訊息主體中必須輸入序列化商業物件才能完成交易。
下面的表格會顯示這些動詞的回應訊息。
動詞 | 回饋欄位 | 訊息主體 |
---|---|---|
Retrieve 或 RetrieveByContent | FAIL FAIL_RETRIEVE_BY_CONTENT | (選用)錯誤訊息。 |
| MULTIPLE_HITS SUCCESS | 已序列化的商業物件。 |
Exist | FAIL | (選用)錯誤訊息。 |
| SUCCESS |
|