要将消息集从 V2.1 迁移至 V6.0,使用 mqsimigratemsgsets 命令。从 V5.0 迁移至 V6.0 时不必使用该命令。
不要在从 V2.1 导出和导入 WebSphere Message Broker V6.0 期间手工修改消息集文件,因为这会导致出现错误,以下报告:BIP0141、BIP0142 至 BIP0157 和 BIP0163 中的警告和错误消息表明了这些错误。
会废弃未引用的值约束,并发出 BIP0158、BIP0159 或 BIP0160 警告消息。
对于遇到的每个 .mrp 文件,将创建一个新的消息集项目,项目的名称是从 V2.1 中的消息集名称和级别派生而来的。实用程序通过对除 1 之外的所有级别值的消息集名称添加后缀来完成此操作。此处理恢复了一对一映射,并使代理只能定位一个给定名称的消息集。
例如,名称为 SWIFT 且级别为 1 的 V2.1 消息集迁移到 V6.0 后,消息集名称变为 SWIFT,而名称为 SWIFT 且级别为 2 的 V2.1 消息集迁移到 V6.0 后,名称变为 SWIFT_2。
在消息集中创建名称与消息集相同的单个消息定义 .mxsd 文件且在缺省(notarget)名称空间中,除非出现了 -part 参数。
在 V2.1 中,所有元素和复合类型都是全局的。在 V6.0 中,xsd:elements 和 xsd:complex types 可以是全局或本地。迁移 V2.1 消息集时,可能会发现许多在 V2.1 中是全局的元素和复合类型已经根据上面所述的规则转换成了 V6.0 中的局部 xsd:elements 和 xsd:complex types。
这意味着复合类型的有效内容可以是消息集中的任何对象,但要符合类型构成属性规则。尤其是在本案例中,没有用任何明确的内容对复合类型建模。
这可能导致 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 开始)。
这种情况产生 BIP0161 警告消息,且需要特殊的对待,因为模式模型无法处理此复合构造。复合元素是不推荐的, 因此使用引用全局 xsd:complexType(在下面的1中描述)的常规元素来替代使用复合元素,并利用混合属性的优点。
引入这样的复合类型主要用于建模包含数据值和子元素的复杂 XML 元素。因此,这样的复杂类型的元素有类似正常复杂元素的复杂内容,还有来势简单元素的值(MRM 基本类型信息)。
在 XML 模式中,没有完全的等价。最接近它的是使用 xsd:complexType 的混合属性。但是,这只说明文本可以出现在子元素之前和之间(或仅子元素之间)。它不暗示任何有关文本的位置或数据类型的信息。
为引用复合类型的每个元素创建复合元素。注意,仅当元素自身是另一个复合类型的成员时,才能这样做。
这两项的组合表明正确使用消息中这样的复合类型是受保护的,因为仅当不再在消息中积极地使用它时,MRM 基本类型信息会丢失。
特殊数据类型是根据前面章节中描述的情形创建的,从 ComIbmMrm 开始特殊数据类型在称为 .wmq21.mxsd 的 XML 模式中定义,该模式包括在由 mqsimigratemsgsets 命令创建的每个消息定义文件中。
MRM 类型 | 模式类型 |
---|---|
BINARY | xsd:hexBinary |
BOOLEAN | xsd:boolean |
DECIMAL | xsd:decimal |
DATETIME | xsd:dateTime(参见下表) |
FLOAT | xsd:float |
INTEGER | xsd:int |
STRING | xsd:string |
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:time 或 xsd:dateTime,且发出 BIP0175 警告消息,这取决于日期模板是否只有一个时间组件。但是,注意此映射可能引起导入后在任务列表中出现错误。
如果涉及到的元素还有 V2.1 缺省值、最小包含、最大包含或枚举值约束,那么这些元素的值将与 xsd:time 或 xsd:dateTime 的词汇空间不匹配,因此验证失败。必须使用编辑器手工改正这些元素。
对于提供缺省值、最小包含、最大包含或枚举约束(其中未完全指定值)的任何 V2.1 DATETIME 类型,也将出现同样的任务列表错误。 例如,日期模板 CCYY-MM,枚举 2003 在 V2.1 中是允许的,因为它在运行时解释为 2003-01。但是,在新的模型中值必须与简单类型的词汇空间匹配,因此必须包含 -01。