从 V2.1 迁移消息集

要将消息集从 V2.1 迁移至 V6.0,使用 mqsimigratemsgsets 命令。V5.0 迁移至 V6.0 时不必使用该命令。

使用 mqsimigratemsgsets 命令的条件

不要在从 V2.1 导出和导入 WebSphere Message Broker V6.0 期间手工修改消息集文件,因为这会导致出现错误,以下报告:BIP0141BIP0142BIP0157BIP0163 中的警告和错误消息表明了这些错误。

每个新的消息定义文件 .mxsd 是一个有注解的 XML 模式模型,且将重新创建消息集中的每个助诊文件并在此新的模型中保留它的现有属性,除了下列例外:
  • WebSphere Message Broker V6.0 模型中的名称是来自 V2.1 模型的标识。如果对象是带有前缀标识的元素,前缀会被除去,因为前缀在 V2.1 是表明该元素是本地的方法。
  • 标签, 简短详细描述历史记录将合并到 WebSphere Message Broker V6.0的单个文档属性中
  • 每个复合类型将成为 WebSphere Message Broker V6.0 中的 xsd:complexType 和关联 xsd:group。
    用此方法创建的 xsd:complexType 可以是本地或全局的。缺省值是本地,但如果下面任何条件之一为真,缺省值将成为全局的:
    • 没有引用复合类型
    • 复合类型有 V2.1 MRM 基本类型
    • 多个元素引用了复合类型
    • 消息基于复合类型
    • 指定了 -g 参数
    用此方法创建的 xsd:group 可以是本地或全局的。缺省值是本地,但如果下面任何条件之一为真,缺省值将成为全局的:
    • 复合类型直接嵌入另一个复合类型中。
    • 复合类型有 V2.1 MRM 基本类型
    • 符合类型有 simpleUnorderedSetV2.1 类型构成和关闭V2.1类型内容。
    simpleUnorderedSet 的类型组合将从 WebSphere Message Broker V6.0 的模型中删除。
    • 如果类型内容是关闭,则它将被组合 all 替代,并发出 BIP0191 警告消息。
    • 否则,它将被组合 unorderedSet 替代,并发出 BIP0192 警告消息。
    • empty 类型组合由空的 sequence 替代,并发出 BIP0193 警告消息。

  • minOccursmaxOccurs 不等于 1 的嵌入式消息的出现次数更正为 1,且发出 BIP0162 警告消息。
  • 每个元素成为一个 xsd:element。用此方法创建的 xsd:element 可以是本地或全局的,取决于按指定的顺序应用的下列标准:
    1. 如果没有引用元素,它是全局的。
    2. 如果元素具有带前缀的标识并且正好是一个符合类型的成员,则它是本地的。
    3. 如果元素具有带前缀的标识并且指定了 -pl 参数,则它是本地的。
    4. 如果元素是带有 V2.1 MRM 基本类型的复合类型,则它是本地的。
    5. 如果元素是多个复合类型的成员,则它是全局的。
    6. 如果指定了 -g 参数,则它是全局的。
    7. 否则,元素是本地的。
    用此方法创建的 xsd:element 的类型可以是:
  • 属于元素的任何值约束按如下所示处理:
    • 缺省约束设置 xsd:element 的缺省属性。
    • 允许为空的约束设置 xsd:element 的 nillable 属性。
    • 日期模板约束更改 xsd:elementxsd:simpleType(请参阅将 MRM 简单类型映射到模式简单类型。)
    • 所有其他方式都通过应用程序 xsd:facets 限制 xsd:elementxsd:simpleType

    会废弃未引用的值约束,并发出 BIP0158BIP0159BIP0160 警告消息。

    不会迁移导致非法 xsd:facet 的任何值约束,并发出 BIP0165 警告消息。
    注: 仅对于 STRING 类型,导入值约束 MinInclusiveMaxInclusive,以用作文档的隐藏注释,因为没有等价的 xsd:facet
  • 元素限定符会废弃,且只发出一次 BIP0167 警告消息。
  • 每条消息将成为消息关联的全局 xsd:element
  • 使用元素限定符的消息其限定符被废弃且发出 BIP0166 警告消息。
  • 有些在 V2.1 中多余的物理格式属性已从新的模型中除去。如果这些属性之一遇到非缺省值,将发出 BIP0164(或者其他更具体的)警告消息。
  • TDS 消息集级别属性世纪窗口缺省值在 V2.1 中总是设置为 53。 对于消息传递标准 SWIFT,这是不正确的,因此只将 SWIFT 的缺省值更改为 80。这反映在导入的模型中。

mqsimigratemsgsets 命令所能创建的内容

对于遇到的每个 .mrp 文件,将创建一个新的消息集项目,项目的名称是从 V2.1 中的消息集名称和级别派生而来的。实用程序通过对除 1 之外的所有级别值的消息集名称添加后缀来完成此操作。此处理恢复了一对一映射,并使代理只能定位一个给定名称的消息集。

例如,名称为 SWIFT 且级别为 1 的 V2.1 消息集迁移到 V6.0 后,消息集名称变为 SWIFT,而名称为 SWIFT 且级别为 2 的 V2.1 消息集迁移到 V6.0 后,名称变为 SWIFT_2。

在新的项目中创建消息集文件夹和关联的 messageSet.mset 文件。下列要点适用于消息集的内容:
  • 消息集文件夹名称与新的项目的名称相同。
  • 消息集标识是原来的 V2.1 消息集的标识。
  • 创建的消息集指定了不支持的名称空间。
  • 在新的消息集中重新创建所有物理格式层。
  • 废弃任何 COBOL 语言绑定层,且发出 BIP0174 警告消息。
  • 废弃任何 C 语言绑定层,且发出 BIP0173 警告消息。
  • 废弃任何最终化状态,且发出 BIP0170 警告消息。
  • 废弃任何基本信息,且发出 BIP0172 警告消息。
  • 废弃任何冻结时间戳记,且发出 BIP0169 警告消息。注意,您总是接收到此消息,因为 V2.1 导出操作将冻结此消息集。
.mrp 文件中遇到的每个消息类别导致创建一个新的 .category 文件。注:
  • 每个事务由等价的消息类别替换,包括事务中的所有消息。
  • 每个事务类别由等价的消息类别替换,包括事务类别引用的所有事务中的所有消息。

在消息集中创建名称与消息集相同的单个消息定义 .mxsd 文件且在缺省(notarget)名称空间中,除非出现了 -part 参数。

如果指定了 -part,可以创建多个 .mxsd 文件,条件是:
  • 文件中的消息、元素和复合类型的数目超过 1000,且
  • .mrp 文件可分割为完全不相关的子集。

V2.1 中,所有元素和复合类型都是全局的。在 V6.0 中,xsd:elementsxsd:complex types 可以是全局或本地。迁移 V2.1 消息集时,可能会发现许多在 V2.1 中是全局的元素和复合类型已经根据上面所述的规则转换成了 V6.0 中的局部 xsd:elementsxsd:complex types

覆盖此行为可能由两个原因:
  • 您更偏好于消息集的 V2.1 组织,里面的所有对象都是全局的。如果指定了 -g 参数,会将组织保留为最接近实际的程度。
  • 利用符合类型类型内容以及开放定义的值。

这意味着复合类型的有效内容可以是消息集中的任何对象,但要符合类型构成属性规则。尤其是在本案例中,没有用任何明确的内容对复合类型建模。

这可能导致 mqsimigratemsgsets 命令 错误的将某些元素设置成本地的而不是全局的。如果使用开放定义并且发现在迁移后出现运行时验证错误 BIP5372E,则重新运行之前未运行的 mqsimigratemsgsets 命令及参数 -g

带有前缀的标识

V2.1 中,带前缀的标识用于表明元素是本地的。但是,带有前缀的标识的元素实际上在多个复合类型中使用而使它是全局的,这是可能的。如果是这样,将根据前述的规则创建全局 xsd:element。还发出 BIP0195 警告消息,因为这是前缀标识的错误使用,且可能导致创建重复的全局 xsd:elements。例如,A^X 和 B^X,但它们都使用多次,导致得到两个名称为 X 的全局 xsd:elements

如果创建了重复元素,再次运行 mqsimigratemsgsets 命令,指定 -pl 参数。这样会迫使所有带有前缀标识的引用元素创建为本地 xsd:elements

嵌入式简单类型

复合类型中的嵌入式简单类型需要特殊的对待,因为模式模型无法处理此构造。由于嵌入式简单类型是不推荐的,需要使用包含 xsd:complex 类型的混合属性来替换它们。

嵌入式简单类型主要用于建模包含散布在子元素之间的数据值的复杂 XML 元素。嵌入式简单类型对每个这样的数据值显式地建模,它充当值的占位符,还提供它的简单类型。

在 XML 模式中,没有完全的等价。最接近它的是 xsd:complexType 的混和属性。但是,这仅说明文本可以出现在子元素之前和之间。它不暗示任何有关文本的位置或数据类型的信息。

要保留此语义,引入了模型扩展,它称为嵌入式简单类型。这是 相应简单类型的未命名本地 xsd:element。类型本身是真实底层 xsd:simple type 的局限性,具有特殊名称(以 ComIbmMrm_Anon 开始)。

带 MRM 基本类型的复合类型

这种情况产生 BIP0161 警告消息,且需要特殊的对待,因为模式模型无法处理此复合构造。复合元素是不推荐的, 因此使用引用全局 xsd:complexType(在下面的1中描述)的常规元素来替代使用复合元素,并利用混合属性的优点。

引入这样的复合类型主要用于建模包含数据值和子元素的复杂 XML 元素。因此,这样的复杂类型的元素有类似正常复杂元素的复杂内容,还有来势简单元素的值(MRM 基本类型信息)。

在 XML 模式中,没有完全的等价。最接近它的是使用 xsd:complexType 的混合属性。但是,这只说明文本可以出现在子元素之前和之间(或仅子元素之间)。它不暗示任何有关文本的位置或数据类型的信息。

XML 模式中没有完全的等价元素,因此执行下列步骤:
  1. 使用常规方法创建全局 xsd:complexType 和全局 xsd:groupxsd:complexType 另外具有混合属性集,且它的内容只是全局 xsd:group 的引用。这建模复杂内容,但丢失了 MRM 基本类型信息。
  2. 引入特定的模式扩展 - 复合元素。这是一个复杂元素和简短元素的合并。它在作为匿名复杂类型的元素的模式术语中实现,类型的内容为:
    • 相应简单类型的本地 xsd:element(以建模 MRM 基本类型信息)。类型本身是真实底层 xsd:simple type 的局限性,具有特殊名称(以 ComIbmMrm_BaseValue 开始)。
    • 以上 1 中创建的全局 xsd:group 的组引用。

为引用复合类型的每个元素创建复合元素。注意,仅当元素自身是另一个复合类型的成员时,才能这样做。

这两项的组合表明正确使用消息中这样的复合类型是受保护的,因为仅当不再在消息中积极地使用它时,MRM 基本类型信息会丢失。

特殊数据类型是根据前面章节中描述的情形创建的,从 ComIbmMrm 开始特殊数据类型在称为 .wmq21.mxsd 的 XML 模式中定义,该模式包括在由 mqsimigratemsgsets 命令创建的每个消息定义文件中。

将 MRM 简单类型映射到模式简单类型

简单类型映射如下所示:
MRM 类型 模式类型
BINARY xsd:hexBinary
BOOLEAN xsd:boolean
DECIMAL xsd:decimal
DATETIME xsd:dateTime(参见下表)
FLOAT xsd:float
INTEGER xsd:int
STRING xsd:string
对于 DATETIME 类型,简单类型映射可能由日期模板值约束的存在而发生更改,如下所示:
MRM DATETIME 数据模板 模式类型
CCYY-MM-DDThh:mm:ss.s xsd:dateTime
CCYY-MM-DD xsd:date
CCYY-MM xsd:gYearMonth
CCYY xsd:gYear
--MM-DD xsd:gMonthDay
--MM xsd:gMonth
---DD xsd:gDay
Thh:mm:ss.s xsd:time

如果日期模板不在前述的列表中,DATETIME 将映射到 xsd:timexsd:dateTime,且发出 BIP0175 警告消息,这取决于日期模板是否只有一个时间组件。但是,注意此映射可能引起导入后在任务列表中出现错误。

如果涉及到的元素还有 V2.1 缺省值最小包含最大包含枚举值约束,那么这些元素的值将与 xsd:timexsd:dateTime 的词汇空间不匹配,因此验证失败。必须使用编辑器手工改正这些元素。

对于提供缺省值最小包含最大包含枚举约束(其中未完全指定值)的任何 V2.1 DATETIME 类型,也将出现同样的任务列表错误。 例如,日期模板 CCYY-MM,枚举 2003 在 V2.1 中是允许的,因为它在运行时解释为 2003-01。但是,在新的模型中值必须与简单类型的词汇空间匹配,因此必须包含 -01。

相关概念
消息建模概念
相关任务
迁移消息集
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ad15750_