静态模型模式装入进程
您可以将新的实体类型、属性类型和控件类型添加到扩展模式 XSD 文件,例如 wimextension.xsd。 这些 XSD 文件会导入虚拟成员管理器内置模型 XSD 文件。 然后可以通过 Eclipse 或 RAD 开发环境或类似工具从扩展模式 XSD 文件生成静态模型代码。 生成的方式代码会压缩到 JAR 文件(例如,wimmodel.jar 和 wimmodelext.jar)并放在类路径下。
当虚拟成员管理器启动时,配置管理器会将 wimconfig.xml 文件装入到配置数据图中。 随后连同配置数据图一起传递模式管理器。
- 如果已经在 XSD 文件中定义实体类型或属性类型,那么虚拟成员管理器会抛出初始化异常,即便它们不是在同一名称空间中定义也是如此。
- 如果实体或属性类型属于非现有名称空间,那么模式管理器会创建新的 ECore 模型 (EPackge),并将这些类型的模式添加到 ECore 模型中。 例如,如果在新名称空间 URI (http://www.yourco.com/yourext) 下定义了实体类型 ContactPerson,那么将创建新的 ECore 模型。
- 如果实体或属性类型属于静态包的现有名称空间,那么将忽略这些模式定义,因为静态包无法在运行时进行修改。
如果本地服务提供程序的实例与虚拟成员管理器实例不在同一 JVM 中,那么会远程创建本地服务提供程序的实例,本地服务提供程序通过将 nsURI 作为空值传递来调用虚拟成员管理器 API getEPackges 以检索所有名称空间的模式。
概要文件管理器接收 API 调用并将其传递到模式管理器。 由于 ECore 模型未序列化而无法传递到远程客户机,因此模式管理器会将 ECore 模型转换成字节数组格式,然后将模式传回本地服务提供程序。
本地服务提供者将模式从字节数组转换为 ECore 模型,并在客户机的 JVM 中注册这些模式。
如果客户机和服务器位于同一 JVM 中,那么客户机可以将静态包中定义的数据对象强制类型转换为其静态类型并使用静态方法。 例如,数据对象PersonAccount可以投射到PersonAccount对象和静态方法getSn可以使用(而不是像静态方法getString("sn" )。 这些不适用于 wimxmlextension.xml中定义的数据对象 (例如, ContactPerson) ,这些对象是动态包。
如果客户机和服务器位于不同 JVM 中,那么无法使用静态类型和方法,即便对于在静态包中定义的数据也是如此,原因是在客户机的 JVM 中无法访问静态包。