动态模型模式装入过程

如果虚拟成员管理器配置为使用动态模型,那么动态的装入模式过程将在虚拟成员管理器启动时进行。

当虚拟成员管理器启动时,配置管理器会将 wimconfig.xml 文件装入到配置数据图中。 随后连同配置数据图一起传递模式管理器。

模式管理器从数据对象 dynamicModel 获取 XSD 文件的名称 (wimextension.xsd),并从该文件装入模式。 由于此 XSD 文件将导入所有其他虚拟成员管理器内置模式 XSD 文件,因此定制扩展模式 ( http://www.ibm.com/websphere/wim/ext) 和虚拟成员管理器内置模式 ( http://www.ibm.com/websphere/wim) 均会以 EPackage 格式作为 ECore 模型装入到内存中。 同时,模式管理器还会注册这些模型。

模式管理器随后读取 wimxmlextension.xml 文件以检索其他模型信息并进行以下更改:
  • 如果已经在 XSD 文件中定义实体类型或属性类型,那么虚拟成员管理器会抛出初始化异常,即便它们不是在同一名称空间中定义也是如此。
  • 如果实体或属性类型属于不同于现有名称空间的其他名称空间,那么模式管理器将创建一个新的 ECore 模型 (EPackage) 并将这些类型的模式添加到 Ecore 模型中。 例如,如果在新名称空间 URI (http://www.yourco.com/yourext) 下定义了实体类型 ContactPerson,那么将创建新的 ECore 模型。
  • 如果实体或属性类型属于现有名称空间,那么会将这些类型的模式添加到此名称空间的 ECore 模型,并对此模型的现有模式进行任何允许的更改。 例如,如果在 名称空间 URI (http://www.ibm.com/websphere/wim) 中定义了属性类型 cellPhone,那么会将此属性类型的模式添加到具有此名称空间 URI 的现有 ECore 模型(虚拟成员管理器内置模型)。 由于此属性同时适用于实体类型 ContactPerson 和 PersonAccount,因此模式管理器将修改 ContactPerson 和 PersonAccount 的模式以包含此属性类型。
如果本地服务提供程序的实例与虚拟成员管理器实例位于同一 Java 虚拟机 (JVM) 中,那么进程会完成,因为 ECore 模型已经由模式管理器进行注册。

如果本地服务提供程序的实例与虚拟成员管理器实例位于不同一个 JVM 中,那么将以远程方式创建一个本地服务提供程序的实例,并且本地服务提供程序调用虚拟成员管理器 API getEPackages 来检索所有名称空间的模式(通过作为 NULL 来传递 nsURI 参数)。

模式管理器检索 API 调用。 由于 ECore 模型未序列化而无法传递到远程客户机,因此模式管理器会将 ECore 模型转换成字节数组格式,然后将模式传回本地服务提供程序。 本地服务提供者将模式从字节数组转换为 ECore 模型,并在客户机的 JVM 中注册这些模式。