連接器會使用 Meta 物件項目來決定要將哪個商業物件與訊息產生關聯。 用來處理事件訊息的商業物件類型和動詞類型,是依據 WebSphere MQ 訊息標頭中包含的 FORMAT 欄位。 您可建構 Meta 物件屬性來儲存商業物件名稱和動詞, 以建立與 WebSphere MQ 訊息標頭 FORMAT 欄位文字的關聯性。Meta 物件屬性也包含訊息處理準則。
從輸入佇列擷取訊息時,連接器會查閱與 FORMAT 文字欄位相關聯的商業物件名稱。 然後訊息與商業物件名稱就會傳遞到資料處理常式。 若順利地將訊息內容輸入到商業物件,則連接器會檢查並查看物件是否經過訂閱, 然後再使用 gotApplEvents() 方法,將它遞送至整合分配管理系統。
配接器可辨識和讀取兩種 Meta 物件:
動態子 meta 物件的屬性值會重複並置換靜態 meta 物件的屬性值。
當您決定哪個 Meta 物件會最適合您的實作方式時,請注意:
表 13 提供 Meta 物件中支援之內容的完整清單。 實作 Meta 物件時,請參閱這些內容。您的 Meta 物件應該具有表 13 所示的一或多個內容。
並非所有內容都可以在靜態及動態 Meta 物件中使用。 也不是所有內容都可以從訊息標頭中讀取或寫入訊息標頭。 請參閱概觀中有關事件及要求處理的適當小節, 以決定連接器如何解譯及使用特定內容。
內容名稱 | 可在靜態 Meta 物件中定義 | 可在動態 Meta 物件中定義 | 說明 |
---|---|---|---|
CollaborationName | 是 | 否 | CollaborationName
必須在商業物件/動詞組合屬性的應用程式特定文字中指定。
例如,如果使用者預期處理商業物件 Customer 與 Create 動詞的同步事件遞送,
則靜態 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,則採用輸入格式(如果可用)。 |
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。這個內容與 InputFormat 內容內部相關: 請只指定一個
DataEncoding per InputFormat。
|
以下是特別對映到 JMS 訊息標頭的欄位。如需特定說明、對於值的解釋等,請參閱 JMS API 規格。JMS 提供者解譯部份欄位的方式可能會有不同,所以若有差異,請同時參考您的 JMS 提供者文件。 | |||
ReplyToQueue |
| 是 | 要求的回應訊息會傳送到這個佇列。 |
Type |
| 是 | 訊息類型。根據 JMS 提供者而定,這通常是使用者定義的。 |
MessageID |
| 是 | 訊息的唯一 ID (JMS 提供者特定的)。 |
CorrelationID | 是 | 是 | 在回應訊息中用來指出起始此回應的要求訊息 ID。 |
Delivery Mode | 是 | 是 | 指定訊息是否持續存在,或是不在 MOM 系統中。可接受的值有:
1=不持續存在 2=持續存在 根據 JMS 提供者而定,也可能有其他值。 |
Priority |
| 是 | 訊息的優先順序數值。可接受的值有: 0 到 9 (含) (優先順序從低到高)。 |
Destination |
| 是 | MOM 系統中,訊息的目前或上次 (如果已移除) 的位置。 |
Expiration |
| 是 | 訊息的存活時間。如果指定為零,則期限設定為零。 零可向 JMS 提供者指出訊息不會到期。 |
Redelivered |
| 是 | 指出 JMS 提供者很可能曾經試圖將訊息遞送到用戶端,但尚未確認接收。 |
Timestamp |
| 是 | 將訊息傳送到 JMS 提供者的時間。 |
UserID |
| 是 | 傳送訊息的使用者身分識別。 |
AppID |
| 是 | 傳送訊息的應用程式身分識別。 |
DeliveryCount |
| 是 | 試圖遞送的次數。 |
GroupID |
| 是 | 訊息群組的身分識別。 |
GroupSeq |
| 是 | 此訊息在訊息群組中的序列 (由 GroupID 指定)。 |
JMSProperties |
| 是 | 請參閱JMS 內容。 |
WebSphere MQ 配接器配置 Meta 物件包含為不同商業物件所定義的轉換內容清單。 連接器通常一次可支援一個靜態 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 中。如果 customer 物件的動詞為 Update,則訊息會放在 QueueB 中。如果物件類型為 Order 且動詞為 Create,則連接器會進行轉換,並以 ORDER 格式將它遞送到 QueueC。傳遞到連接器的任何其他商業物件都會被視為未訂閱。
您也可以選擇性地將一個屬性命名為 Default,並在 ASI 中為它指定一或多個內容。 對於 Meta 物件包含的所有屬性來說,預設屬性的內容會與特定物件動詞屬性的內容結合。 如果您要普遍套用一或多個內容 (無論物件動詞組合是什麼),這就很有幫助。 在下列範例中,連接器會將 Customer_Create 及 Order_Create 物件動詞組合視為具有 OutputDestination=QueueA (除了它們的個別 Meta 資料內容之外):
屬性名稱 | 應用程式特有資訊 |
---|---|
預設值 |
OutputDestination=QueueA |
Customer_Update |
OutputFormat=CUST |
Order_Create |
OutputFormat=ORDER |
表 13 說明可以在靜態 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.manager/CompReceipts;DataHandlerClassName= com.crossworlds.DataHandlers.WBIMB.disposition_notification;DataHandlerMimeType= message/ disposition_notification IsRequiredServerBound = false [End]
於擷取訊息時,連接器通常會比對輸入格式與一個特定商業物件和動詞組合。 然後,配接器將商業物件名稱和訊息內容傳送至資料處理常式。 此可讓資料處理常式驗證訊息內容是否對應於使用者預期的商業物件。
然而,若為多個商業物件定義相同輸入格式, 則連接器將資料傳送到資料處理常式之前,無法判斷資料所代表的商業物件。 此情況下,配接器僅將訊息內容傳送到資料處理常式, 然後依據已產生的商業物件來查閱轉換內容。 因此,資料處理常式必須僅依據訊息內容來判斷商業物件。
若未設定已產生之商業物件的動詞,則連接器會使用任何動詞來 搜尋針對這個商業物件所定義的轉換內容。 如果只找到一組轉換內容,連接器會指派指定的動詞。 如果找到多個內容,連接器會讓訊息失敗,因為無法區別動詞。
以下顯示的 meta 物件將連接器配置成使用動詞 Create 來轉換 Customer 商業物件。
[BusinessObjectDefinition] Name = MO_WebSphereCommerceConfig Version = 3.0.0 [Attribute] Name = Default Type = String MaxLength = 1 IsKey = true IsForeignKey = false IsRequired = false AppSpecificInfo = OutputQueue=queue://<Queue Manager Name>/WCS_Serial_Inbound?targetClient=1; OutputFormat=MQSTR IsRequiredServerBound = false [End] [Attribute] Name = WCS_Create_WCS_Customer_Create Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = OutputQueue=queue://<Queue Manager Name>/WCS_Serial_Inbound?targetClient=1; OutputFormat=MQSTR IsRequiredServerBound = false [End] [Attribute] Name = WCS_Report_NC_PurchaseOrder_Create Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = InputFormat=MQSTR 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 物件,反之亦然。
表 13 說明可以在動態 Meta 物件中指定為應用程式特有資訊的內容。
動態 Meta 物件的結構可讓每個屬性代表單一 Meta 資料內容及值:meta-object property name =meta-object property value
為了向協同作業實例提供更多輪詢期間所擷取的訊息資訊, 連接器會移入動態 meta 物件的特定屬性(如果已經針對已建立的商業物件定義的話)。
表 17 顯示如何建構動態子 Meta 物件以執行輪詢。
內容名稱 | 範例值 |
---|---|
InputFormat | CUST_IN |
InputQueue | MYInputQueue |
OutputFormat | CxIgnore |
OutputQueue | CxIgnore |
ResponseTimeout | CxIgnore |
TimeoutFatal | CxIgnore |
如表 17 所示, 您可於動態子 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 物件,以取得訊息傳輸的詳細資訊及更多控制權。 本節說明這些屬性,以及它們影響事件通知及要求處理的方式。
與動態 Meta 物件中的其他屬性不同之處在於,JMSProperties 必須定義單一基數子物件。這個子物件中的每個屬性都必須在 JMS 訊息標頭的變數部份,將單一內容定義為可讀寫,如下所示:
下列表格顯示您必須針對 JMSProperties 物件中的屬性所定義的應用程式特有資訊內容。
在下列範例中,JMSProperties 子物件是針對 Customer 物件定義, 允許存取訊息標頭的使用者定義的欄位。
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)
為了要說明另一個範例,圖 4 顯示動態 Meta 物件中的屬性 JMSProperties,以及 JMS 訊息標頭中的四個內容的定義:ID、GID、RESPONSE 及 RESPONSE_PERSIST。 屬性的應用程式特有資訊可定義每一個屬性的名稱和類型。 例如,屬性 ID 對映到類型 String 的 JMS 內容 ID。