Windchill 多对象操作
通过 Windchill 的多对象 API 基础结构支持,可以对对象集合执行操作,而无需在进程中循环以保留更改、调用其他 API 或发送事件。这可减少访问数据库的次数和方法调用的次数:持久保存 100 个对象的操作可以一次 (使用批处理操作) 调用数据库,然后再次发送与该操作相关的事件。类似地,事件监听程序可以针对整个集合进行操作,用多对象操作代替重复的持续性 (CRUD2) 操作,该操作只需对数据库执行一次操作 (而不是 n 次)。即使集合仅包含一个元素,多对象 API 仍应明显优于循环等效项,原因在于复制关联等的事件监听程序可以从多对象 API 中受益。Windchill 对多对象 API 的支持包括:
• Windchill 特定集合
• 多对象事件发送和通知
• 多对象委派
• 多对象异常
• 多对象 "CRUD" 持久化管理器 API
• 批处理 ("UPDATE WHERE" 和 "DELETE FROM") 语句功能
• 事务处理上下文和监听程序
• 对象删除期间的参考完整性关联验证
Windchill 特定的集合利用 Java 集合框架提供针对 Windchill 持续对象优化的集合、列表和映射。这些集合无缝处理被表示为 QueryKeys、WTReferences 以及完全扩展的 Persistables 的可持续对象。这些集合还可提供许多 API,用于执行诸如刷新和扩展、基于类获取子集合以及测试成员资格之类的操作。有关详细信息,请参阅 Javadoc 中的 wt.fc.collections 包。
多对象事件发送和通知允许将任何事件 (例如 PRE_STORE) 作为单对象或多对象进行发送和通知。事件机制会自动处理分配器和通知器 (即监听程序) 不一致的情况,这种不一致由以下两种情况导致:将多对象事件转换为单对象事件并遍历监听程序;反之,将单对象事件转换为多对象事件并通知多对象监听程序。多对象事件将具有基于集合的事件目标。
多对象委派可实现请求对象集合的委派。多对象委派 API 将适当的委派映射到将对其进行使用的集合的子集合。然后,可以针对委派执行多对象 API,同时将这些子集合传递给委派的多对象 API。例如,在为部件和文档集合请求 "x.y.Z" 委派时,结果可能是 delegate1 与部件匹配,而 delegate2 与文档匹配;然后可调用 delegate1 的多对象 API,以传递部件子集合。有关详细信息,请参阅 wt.services.ac.DefaultServices 的 Javadoc 条目。
多对象异常由多对象 API 和监听程序抛出。这些异常可提供有关问题 (与传入集合中的某些对象关联) 的性质的扩展信息。例如,如果由于对三个对象分配非唯一身份,针对十个对象的更改身份失败,则所产生的异常将指示这三个单独的失败。将 "additionalMessages" 添加到 wt.util.WTException 中会导致这种情况的发生。
多对象 CRUD 持久化管理器 API 使用批处理操作与数据库进行交互,将 CRUD 操作的数据库交互总数减少到只有一个 (实际上,每个表只有一个)。传递 100 个部件的集合的“存储”操作可以对数据库使用单个批量插入,而不是 100 个单独的插入操作。有关详细信息,请参阅 wt.fc Javadoc 条目。
批处理 ("UPDATE WHERE" 和 "DELETE FROM") 语句功能生成 Windchill 语句,这些语句在数据库中转换为 UPDATE WHERE 和 DELETE FROM 语句。例如,这样可以删除一个数据库中某个对象集合的所有关联,而无需预先查询链接 (实际上,这些操作仍受事件约束,因此可能会返回 OID,并且如果监听程序需要完整的可持续对象,则会扩展)。有关详细信息,请参阅 wt.fc.batch。
事务处理上下文和监听程序提供了细粒度机制,用于将信息添加到嵌套事务处理和全局事务处理中 (类似于 MethodContext 的方式),并在事务处理即将提交、已提交或回滚时得到通知。有关 wt.pom 包中的 Transaction、TransactionListener 和 TransactionCommitListener,请参阅 Javadoc 条目。
对象删除期间的参考完整性关联验证使用声明性机制来指定关联在删除期间应如何执行操作。每个角色都可以指示:当删除角色对象时,应删除关联或否决删除。