Windchill 中输入/输出功能的虚拟文件系统
|
|
虚拟文件系统功能目前处于测试预览阶段,可在本地的 Windchill 13.0.2.4 及更高版本中使用。此功能不久就会在即将发布的 Windchill+ 版本中提供,可用于执行新的部署。
|
Windchill+ 支持通过云支持的虚拟文件系统 (VFS) 自定义输入/输出功能。VFS 是由 PTC 托管的虚拟存储,允许外部应用程序读取、写入和删除文件。当 VFS 中存在文件时,自定义代码会利用支持的 API 来读取、写入和删除文件,并管理 Windchill 中的相应对象。
如需了解所支持的 API 的用法,请参阅有关类
com.ptc.windchill.vfs.FileSystemUtils 的 Windchill JavaDoc (位于
参考文档 | PTC)。
用例
假设一个外部系统在文件存储上生成多个文件 (XML、JSON 等) 并进行存储。使用 PTC 托管的 VFS 和 Windchill+ 自定义代码,可以实现以下目标:
• 将文件从文件存储上传到 VFS。PTC 在部署 Windchill+ 后提供此 VFS 的 SAS URL。
• 调用自定义代码以标识和读取 VFS 中的可用文件,并在 Windchill 中创建相应的对象。此自定义代码利用 Windchill 支持的 API,并通过 CCD 提交。
|
|
支持所有文件格式,例如文本、zip、存档和二进制。PTC 强烈建议不要使用可执行文件。
|
示例自定义
此示例自定义演示了 VFS API 如何实现输入/输出功能。可以在本地 Windchill 开发环境中运行此示例自定义,以确保通过 CCD 提交的自定义可以在 Windchill+ 环境中正常工作。
在本地 Windchill 开发环境中,运行以下命令:
xconfmanager -s "vfs.container.level.sas.url=<SAS URL>" -t codebase/wt.properties -p
PTC 将提供一个临时 SAS URL 以执行和验证自定义。
| Windchill+ 部署中预设 (OOTB) 提供此配置。 |
运行示例自定义的先决条件:
• 运行以下命令 (适用于 Linux) 将 IntegrationsExample 示例复制到 /opt/ptc。
cp -rp $WT_HOME/prog_examples/IntegrationsExample/customization /opt/ptc
• 将工作目录更改为 $WT_HOME/bin/customizationTools。
cd $WT_HOME/bin/customizationTools
• 使用 ant 编译、部署和加载数据。
ant compile deploy load.data
| 有关先决条件的详情,请参阅位于 $WT_HOME/prog_examples/IntegrationsExample 文件夹中的 readme.md。 |
请按照以下步骤运行示例自定义:
1. 以站点管理员身份登录。
2. 导航至 > > 。
3. 启动工作流 ACME FileSystemUtils Sample。
工作流成功完成后,
• 将在 VFS 中创建一个名为 Parent-Folder-<timestamp> 的文件夹,并将示例文件添加到此文件夹中。
• 在 ACME 产品中,为 VFS 中的每个示例文件创建一个文档。以 acmeorgadmin 身份登录即可查看这些文档。
• 对于 VFS 中的 .txt 文件,将使用示例文本更新文件,并且在文件名中附加 _updated.txt。
• 将使用 Windchill 文档的主要内容在同一文件夹中创建名为 WTDocs.zip 的 zip 文件。
• 使用 VFS 的容器级 SAS URL,验证是否已从 VFS 中删除了除 _updated.txt 和 WTDocs.zip 外的所有文件。
在 Windchill+ 开发环境中,可以根据本地环境中的成功实施,创作自定义代码,并使用 CCD 包来提交该自定义代码。
| 可以将 java.util.zip.ZipOutputStream 和 ZipInputStream 与 VFS 配合使用来管理 Blob 中的 zip 内容。但是,在当前的实施中,每个 ZipOutputStream 最多可以包含 50,000 个 zip 条目。 |
关于 VFS
• 临时存储:VFS 用作临时存储,类似于自定义代码的临时文件夹。建议在使用后,从 VFS 中删除内容或文件。
• 自动删除:VFS 内容或文件将在 7 天后自动删除。一旦删除,便无法恢复。自定义代码应在此 7 天窗口内,利用 VFS 内容并主动进行删除。
• 备份和恢复:由于 VFS 是临时存储,因此不会备份其内容或文件。这表示:
◦ 如果在第 1 天进行系统备份,并将新文件 (计数 N) 添加到 VFS 中,供自定义代码使用,随后将其删除。
◦ 然后,如果整个系统从第一天恢复到快照状态,那么已添加、使用和删除的 N 个文件必须根据需要再次上传、使用和删除。
• 隔离环境:每个 Windchill+ 环境都有专属的隔离 VFS。因此,对于多个 Windchill+ 部署,当在环境 E1 中部署 CCD 包,然后升级到环境 E2 时,应将该 CCD 包中的自定义代码设计为独立于特定 VFS 内容进行操作,因为对于不同的 Windchill 环境,VFS 中的内容可能不同。
• 对于重新托管和升级,默认情况下,源环境或暂存环境中的 VFS 内容将不可用。在调用相关自定义代码之前,请确保内容或文件在 VFS 中可用。
• 在从 Windchill 本地迁移到 Windchill+ 时,或在 Windchill+ 环境内迁移 (Dev 到 QA 或 QA 到 Prod),默认情况下 VFS 内容不可用。因此,任何使用 VFS 内容的自定义都将失败。成功迁移后,将内容或文件上传到 VFS,然后通过自定义使用 VFS 功能。
VFS 测试功能已针对下列用例进行了验证:
• 与 Windchill 和 Azure Blob 存储帐户位于同一区域时相比,两者位于不同区域时的 IO 操作会显著降低吞吐量。
• 对于由 Windchill 自定义创建并写入 VFS 的内容,经验证,其大小最高可达 1 GB。
• 当 Windchill 和 Azure Blob 存储帐户位于同一区域时,利用 VFS API,可以在 59 分钟内成功创建大小为 3.84 GB 且包含 142103 个条目的 zip 文件。
• 并发:
◦ 可以从 VFS 使用多线程来并发读取数据。
◦ 写入 zip 文件应为单线程。
• 弹性:
◦ 如果在向 zip 文件中添加条目时出错,那么无法保证该文件的完整性。此外,zip 文件格式不支持编辑写入的条目。因此,应建立一种机制,以便在 VFS 中写入文件时,若出现异常,能够进行多次重试,而两次尝试之间应有几秒钟或几分钟的短暂中断。
| 如果将大型内容写入 VFS 时出现故障,则应尝试重试,以解决云原生基础设施的固有延迟和瞬态错误。 |