动态模型模式装入过程
如果虚拟成员管理器配置为使用动态模型,那么动态的装入模式过程将在虚拟成员管理器启动时进行。
当虚拟成员管理器启动时,配置管理器会将 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 的模式以包含此属性类型。
如果本地服务提供程序的实例与虚拟成员管理器实例位于不同一个 JVM 中,那么将以远程方式创建一个本地服务提供程序的实例,并且本地服务提供程序调用虚拟成员管理器 API getEPackages 来检索所有名称空间的模式(通过作为 NULL 来传递 nsURI 参数)。
模式管理器检索 API 调用。 由于 ECore 模型未序列化而无法传递到远程客户机,因此模式管理器会将 ECore 模型转换成字节数组格式,然后将模式传回本地服务提供程序。 本地服务提供者将模式从字节数组转换为 ECore 模型,并在客户机的 JVM 中注册这些模式。