連接器會使用 Meta 物件項目來判斷要與訊息相關聯的商業物件。 事件訊息處理中使用的商業物件類型和動詞類型,是依據 WebSphere MQ 訊息標頭中包含的 FORMAT 欄位。 您建構 Meta 物件屬性來儲存商業物件名稱和動詞, 以建立與 WebSphere MQ 訊息標頭 FORMAT 欄位文字的關聯性。Meta 物件屬性也包含訊息處理準則。
從輸入佇列擷取訊息時,連接器會查閱 FORMAT 文字欄位相關的商業物件名稱。然後,訊息以及商業物件名稱會傳送至資料處理常式。若順利地將訊息內容輸入到商業物件,則連接器會檢查物件是否經過訂閱, 然後使用 gotApplEvents() 方法將其遞送至整合分配管理系統。
連接器可辨識和讀取兩種 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 | 是 | 是 | 連接器輪詢來偵測新訊息的輸入佇列。這個內容只能用來比對送入的訊息與商業物件。
請勿使用預設轉換內容來設定此內容;其值用於將送入的訊息與商業物件比對。
|
OutputQueue | 是 | 是 | 從給定的商業物件衍生的訊息會傳遞至這個佇列。 |
ResponseTimeout | 是 | 是 | 表示等待同步要求處理的回應時,在逾時之前的時間長度(毫秒)。 若未定義這個內容或指定的值小於零,則連接器不等待回應就立即傳回 SUCCESS。 |
TimeoutFatal | 是 | 是 | 用於同步要求處理,可觸發連接器在未收到回應時,傳回錯誤訊息。 如果這個內容是 True,則如果未在 ResponseTimeout 指定的時間內收到回應,連接器就會將 APPRESPONSETIMEOUT 傳回分配管理系統。 如果尚未定義這個內容或是設為 False,則當回應逾時的時候, 連接器會使要求失效,但是不會終止。預設值 = False。 |
DataEncoding | 是 | 是 |
DataEncoding 是用來讀寫訊息的編碼。 若於靜態 Meta 物件中未指定這個內容,連接器會嘗試不使用任何特定編碼來讀取訊息。 動態子項 Meta 物件中定義的 DataEncoding 將置換靜態 Meta 物件中定義的值。 預設值是 Text。 此屬性的值格式為 messageType[:enc]。亦即,Text:ISO8859_1、Text:UnicodeLittle、Text 或 Binary。 此內容與 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 內容。 |
WebSphere MQ 配接器配置 Meta 物件包含為不同商業物件所定義的轉換內容清單。若要檢視範例靜態 Meta 物件, 請啟動「商業物件設計程式」,並開啟隨附於配接器的下列範例: connectors\WebSpereMQ\samples\LegacyContact\WebSpereMQ_MO_Config.xsd
連接器一次最多可支援一個靜態 Meta 物件。 您可以為連接器內容 ConfigurationMetaObject 指定靜態 Meta 物件的名稱,以實作此物件。
在靜態 Meta 物件的結構中,每個屬性都代表單一商業物件與動詞的組合, 以及與處理該物件相關聯的所有 Meta 資料。 每個屬性的名稱應該是商業物件類型的名稱及動詞 (以底線區隔),例如 Customer_Create。屬性應用程式特有資訊應該包含一或多個以分號區隔的名稱值組, 代表您想為這個唯一的物件動詞組合所指定的 Meta 資料內容。
屬性名稱 | 特定應用程式文字 |
---|---|
<business object type>_<verb> |
property=value;property=value;... |
<business object type>_<verb> |
property=value;property=value;... |
例如,請考量下列 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_Create 及 Order_Create 視為具有 OutputDestination=QueueA:
屬性名稱 | 應用程式特有資訊 |
---|---|
預設值 |
OutputDestination=QueueA |
Customer_Update |
OutputFormat=CUST |
Order_Create |
OutputFormat=ORDER |
表 1 說明您可以在靜態 Meta 物件中, 指定為應用程式特有資訊的內容。
若要實作靜態 Meta 物件,請執行下列動作:
您可以使用靜態 Meta 物件的特定應用程式資訊中的 InputQueue 內容,來建立資料處理常式與輸入佇列的關聯性。
當處理具有不同格式和轉換需求的多個交易友機時,此功能很有幫助。
若要將資料處理常式對映到 InputQueue,請執行下列動作:
例如,靜態 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 物件,反之亦然。
表 1 說明您可以在動態 Meta 物件中, 指定為應用程式特有資訊的內容。
下列屬性是在動態 Meta 物件中辨識,可反映 JMS 及 WebSphere MQ 標頭內容。
標頭屬性名稱 | 模式 | 對應的 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
為了向協同作業提供更多輪詢期間所擷取的訊息資訊, 連接器會移入動態 Meta 物件的特定屬性(如果已經針對已建立的商業物件定義的話)。
表 6 顯示如何建構動態子項 Meta 物件以執行輪詢。
內容名稱 | 範例值 |
---|---|
InputFormat | CUST_IN |
InputQueue | MYInputQueue |
OutputFormat | CxIgnore |
OutputQueue | CxIgnore |
ResponseTimeout | CxIgnore |
TimeoutFatal | CxIgnore |
如表 6 所示, 您可於動態子項 Meta 物件中定義 Input_Format 及 InputQueue 這兩個額外的屬性。Input_Format 會輸入擷取的訊息格式,而 InputQueue 屬性則包含已從中擷取指定訊息的佇列名稱。 如果子項 Meta 物件中未定義這些內容,則不會輸入內容。
範例實務:
您可將屬性新增到動態 Meta 物件,以取得訊息傳輸的詳細資訊及更多控制。 本節說明這些屬性,以及它們如何影響事件通知及要求處理。
與動態 Meta 物件中的其他屬性不同,JMSProperties 必須定義單一基數子項物件。此子項物件中的每個屬性都必須定義單一的內容, 以在 JMS 訊息標頭的不同部份中讀取/寫入,如下所示:
下表顯示您必須為 JMSProperties 物件中之屬性定義的應用程式特有資訊內容。
屬性 | 可能值 | ASI | 註解 |
---|---|---|---|
名稱 | 任何有效的 JMS 內容名稱 (有效 = 與 ASI 中定義的類型相容) | name=<JMS 內容名稱>;type=<JMS 內容類型> | 部份供應商會保留某些內容,以提供延伸的功能。一般而言,使用者不應該定義以 JMS 開頭的自訂內容,除非他們要存取這些供應商特有的功能。 |
類型 | String | type=<請參閱註解> | 這是 JMS 內容的類型。JMS API 提供在「JMS 訊息」中設定值的許多方法:setIntProperty、setLongProperty、setStringProperty 等等。指定於此處的 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。
若要實作動態 Meta 物件,請執行下列動作:
Customer (ASI = cw_mo_conn=MetaData) |-- Id |-- FirstName |-- LastName |-- ContactInfo |-- MetaData |-- OutputFormat = CUST |-- OutputDestination = QueueA
一旦連接器接收到已移入的要求 (如上所示),連接器就會將 Customer 物件轉換成格式為 CUST 的訊息,然後將訊息放入佇列 QueueA。