Meta 物件配置

連接器會使用 Meta 物件項目來決定要將哪個商業物件與訊息產生關聯。 用來處理事件訊息的商業物件類型和動詞類型,是依據 WebSphere MQ 訊息標頭中包含的 FORMAT 欄位。 您可建構 Meta 物件屬性來儲存商業物件名稱和動詞, 以建立與 WebSphere MQ 訊息標頭 FORMAT 欄位文字的關聯性。Meta 物件屬性也包含訊息處理準則。

從輸入佇列擷取訊息時,連接器會查閱與 FORMAT 文字欄位相關聯的商業物件名稱。 然後訊息與商業物件名稱就會傳遞到資料處理常式。 若順利地將訊息內容輸入到商業物件,則連接器會檢查並查看物件是否經過訂閱, 然後再使用 gotApplEvents() 方法,將它遞送至整合分配管理系統。

配接器可辨識和讀取兩種 Meta 物件:

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

當您決定哪個 Meta 物件會最適合您的實作方式時,請注意:

Meta 物件內容

表 13 提供 Meta 物件中支援之內容的完整清單。 實作 Meta 物件時,請參閱這些內容。您的 Meta 物件應該具有表 13 所示的一或多個內容。

並非所有內容都可以在靜態及動態 Meta 物件中使用。 也不是所有內容都可以從訊息標頭中讀取或寫入訊息標頭。 請參閱概觀中有關事件及要求處理的適當小節, 以決定連接器如何解譯及使用特定內容。


表 13.
WebSphere Commerce 配接器 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 連接器輪詢來偵測新訊息的輸入佇列。這個內容只可用來比對送入的訊息與商業物件。 請不要使用預設轉換內容來設定這個內容;它的值是用來比對送入的訊息與商業物件。
註:
連接器特有內容中的 InputQueue 內容可定義配接器要輪詢哪些佇列。 這是配接器用來決定要輪詢哪些佇列的唯一內容。 在靜態 MO 中,InputQueue 內容及 InputFormat 內容可作為配接器將給定的訊息對映到特定商業物件時的準則。 若要實作這個特性,請使用連接器特有內容來配置多重輸入目標, 並根據送入的訊息的輸入格式,選擇性地將不同資料處理常式對映到每個輸入目標。 如需相關資訊,請參閱將資料處理常式對映到輸入佇列的概觀
OutputQueue
 
從給定的商業物件衍生的訊息會遞送到這個佇列。
ResponseTimeout
 
指出在同步要求處理中等待回應時,逾時之前的等待時間長度 (毫秒)。若保留成未定義或指定的值小於零,則連接器不等待回應就立即傳回 SUCCESS。
TimeoutFatal
 
在同步要求處理中,用來觸發連接器在未接收回應時,傳回錯誤訊息。 如果這個內容是 True,則當 ResponseTimeout 在指定的時間內未收到回應時,連接器就會將 APPRESPONSETIMEOUT 傳回分配管理系統。 如果未定義這個內容或是設定為 False,則在回應逾時時,連接器就會使要求失效,但是不會終止。 預設值 = False
DataEncoding

DataEncoding 是用來讀寫訊息的編碼。 若於靜態 meta 物件中未指定這個內容,連接器會嘗試不使用任何特定編碼來讀取訊息。 動態子 meta 物件中定義的 DataEncoding 將置換靜態 meta 物件中定義的值。 預設值是 Text。 此屬性的值格式為 messageType[:enc]。亦即,Text:ISO8859_1Text:UnicodeLittleTextBinary。這個內容與 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 內容

建立靜態 Meta 物件概觀

WebSphere MQ 配接器配置 Meta 物件包含為不同商業物件所定義的轉換內容清單。 連接器通常一次可支援一個靜態 Meta 物件。 為連接器內容 ConfigurationMetaObject 指定靜態 Meta 物件名稱,即可加以實作。

靜態 Meta 物件的結構可讓每個屬性代表單一商業物件及動詞組合, 以及與處理該物件所有 Meta 資料產生關聯。 每個屬性的名稱應該是商業物件類型名稱及動詞,並以底線區隔,如 Customer_Create。屬性應用程式特有資訊應該由一或多個以分號區隔的名稱值組所組成, 而這些名稱值組代表您要針對這個唯一物件動詞組合指定的 Meta 資料內容。


表 14.
靜態 Meta 物件結構
屬性名稱 特定應用程式文字
<business object type>_<verb>
 
property=value;property=value;...
 
<business object type>_<verb>
 
property=value;property=value;...
 

例如,請考量下列 Meta 物件:

表 15. 範例靜態 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_CreateOrder_Create 物件動詞組合視為具有 OutputDestination=QueueA (除了它們的個別 Meta 資料內容之外):


表 16.
範例靜態 Meta 物件結構
屬性名稱 應用程式特有資訊
預設值
 
OutputDestination=QueueA
 
Customer_Update
 
OutputFormat=CUST
 
Order_Create
 
OutputFormat=ORDER
 

表 13 說明可以在靜態 Meta 物件中指定為應用程式特有資訊的內容。

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

將資料處理常式對映到輸入佇列的概觀

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

將資料處理常式對映到輸入佇列的步驟

若要將資料處理常式對映到 InputQueue,請執行下列動作:

  1. 使用連接器特有內容 (請參閱InputQueue) 來配置一或多個輸入佇列。
  2. 針對靜態 Meta 物件中的每一個輸入佇列, 在特定應用程式資訊中指定佇列管理程式和輸入佇列名稱,以及資料處理常式類別名稱和 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.WBIMB.disposition_notification;DataHandlerMimeType=
 message/
 disposition_notification
    IsRequiredServerBound = false
 [End]
 

超載輸入格式

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

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

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

範例 Meta 物件

以下顯示的 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 物件, 不需考慮靜態 meta 物件,反之亦然。

表 13 說明可以在動態 Meta 物件中指定為應用程式特有資訊的內容。

動態 Meta 物件的結構可讓每個屬性代表單一 Meta 資料內容及值:meta-object property name =meta-object property value

註:
所有標準 IBM WebSphere 資料處理常式都會利用辨識 cw_mo_ 標籤, 來設計為忽略這個動態 Meta 物件屬性。當您自訂資料處理常式來搭配配接器時, 必須進行相同動作。

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

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

表 17 顯示如何建構動態子 Meta 物件以執行輪詢。

表 17. 要輪詢的動態子 Meta 物件結構
內容名稱 範例值
InputFormat CUST_IN
InputQueue MYInputQueue
OutputFormat CxIgnore
OutputQueue CxIgnore
ResponseTimeout CxIgnore
TimeoutFatal CxIgnore

表 17 所示, 您可於動態子 Meta 物件中定義 Input_FormatInputQueue 額外屬性。Input_Format 是以所擷取之訊息的格式來移入,而 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 標頭及動態子 Meta 物件屬性

您可以將屬性新增到動態 Meta 物件,以取得訊息傳輸的詳細資訊及更多控制權。 本節說明這些屬性,以及它們影響事件通知及要求處理的方式。

JMS 內容

與動態 Meta 物件中的其他屬性不同之處在於,JMSProperties 必須定義單一基數子物件。這個子物件中的每個屬性都必須在 JMS 訊息標頭的變數部份,將單一內容定義為可讀寫,如下所示:

  1. 屬性名稱沒有語意值。
  2. 無論 JMS 內容類型是什麼,屬性類型都應該一律是 String
  3. 屬性的應用程式特有資訊必須包含兩個名稱值組,以用來定義 JMS 訊息內容 (由屬性對映) 之名稱及格式。名稱可由使用者定義。值類型必須是下列之一:

下列表格顯示您必須針對 JMSProperties 物件中的屬性所定義的應用程式特有資訊內容。


表 18.
JMS 內容屬性的應用程式特有資訊
屬性 可能值 ASI 註解
名稱 任何有效的 JMS 內容名稱 (有效 = 與 ASI 中定義的類型相容) name=<JMS 內容名稱>;type=<JMS 內容類型> 部份供應商會保留某些內容以提供延伸功能。 一般說來,除非使用者想要存取這些供應商特定功能,否則不應該自訂以 JMS 開頭的內容。
類型 String type=<請參閱註解> 這是 JMS 內容的類型。JMS API 提供數種方法以在 JMS 訊息中設定值: setIntPropertysetLongPropertysetStringProperty 等。此處指定的 JMS 內容類型可指出在訊息中使用了哪些方法來設定內容值。

在下列範例中,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

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


Copyright IBM Corp. 1997, 2004