打包和部署 ThingWorx 应用程序的最佳做法
开发和部署扩展时,可以使用以下最佳做法。
基于清空的平台实例开发
ThingWorx 不会为您的代码提供安全措施或沙盒。有时,您的环境可能会变得不稳定。要使应用程序从不稳定状态恢复,请执行以下操作:
如果在开发过程中发现错误,请重新启动 Apache Tomcat 服务器。
系统可能会提示您完全移除 ThingworxStorage 目录。建议您基于清空的平台实例开发应用程序,以确保在移除 ThingWorxStorage 目录时不会丢失任何工作。
扩展的结构
必须将扩展的构件打包为以下文件夹结构的 ZIP 文件:
/metadata.xml - 有关扩展中各种构件的扩展和细节的信息。
/Entities/ - 在子文件夹中按实体类型组织的零个或多个实体 XML 文件。
/lib/ - 包括扩展的自定义 Java 类以及扩展所需的第三方 JAR 文件的 JAR 文件。
/ui/ - 定义用于构建和运行混搭的自定义小组件的文件。
在应用程序的一个 ZIP 文件中捆绑多个扩展
包含多个扩展的 IoT 解决方案可捆绑为单个 ZIP 文件。单一 ZIP 文件包含每个扩展的各个 ZIP 文件。这样可确保单独实现每个扩展。在后续版本中,可以更轻松地更新各个扩展。
扩展名称和版本约定
对扩展及其 ZIP 文件的命名方式没有任何限制。请注意,在为扩展指定名称后,即无法对其进行更改。但是,可以更改 ZIP 文件的名称。
虽然可以为扩展及其 ZIP 文件指定不同的名称,但建议您尽可能为扩展及其 ZIP 文件指定相同的名称。ZIP 文件名也可以包含版本号。
您可以拥有一个 IoT 解决方案,其中包含多个扩展,这些扩展捆绑为一个由多个 ZIP 文件合并而成的 ZIP 文件。在这种情况下,建议对所有 ZIP 文件使用相同的版本号。请考虑包含两个扩展的 IoT 解决方案。每个扩展都是一个具有独立版本号的 ZIP 文件。最好在两个扩展的名称中指定相同的版本号。此外,在由多个 ZIP 文件合并而成的 ZIP 文件的名称中指定相同的版本号。例如,如果 IoT 解决方案的版本号为 7.9,则在所有 ZIP 文件的名称中将 7.9 指定为版本号。
metadata.xml 文件中,属性 packageVersion 用于指定扩展的版本。这是一个必需属性,其值采用 <major>.<minor>.<patch> 格式,其中版本的每个部分皆为数字。扩展必须遵循语义化版本控制规则。有关详细信息,请参阅 语义化版本控制
扩展相关性
本部分介绍了某个扩展与其他扩展的相关性。
某个扩展与其他扩展的相关性
如果您的扩展与其他扩展具有相关性,建议使用 metadata.xml 文件中的 dependsOn 属性来指定相关性。属性的值为采用 <name>:<major>.<minor>.<patch> 格式且以逗号分隔的扩展名称和版本列表,其中版本仅以数字形式指定。例如,dependsOn= "ExtensionOne:2.5.1,ExtensionTwo:1.2.0"
这是一种很好的做法,可避免存在过多的相关性。如果存在对任何扩展的升级,则从属扩展也会受到影响。
避免与其他扩展紧密耦合
必须避免将您的扩展与其他扩展紧密耦合。
如果您的扩展与另一个必须升级到全新主版本的扩展紧密耦合,则系统会提示您删除您的扩展及其整个相关性链,然后才能执行升级。
为了避免紧密耦合,最好的方法是创建所需功能的事物和事物模板。这些事物和事物模板不是您的扩展的一部分,因此不会纳入扩展升级中。
有时,在扩展混搭中使用来自其他扩展的小组件时,可能难以避免紧密耦合。
扩展的大小
大型且复杂的扩展可能难以维护和升级。更好的方法是,根据功能将扩展拆分为更小的组件,以便于维护和升级。您可以在一个 ZIP 文件中捆绑多个扩展。有关详细信息,请参阅 在应用程序的一个 ZIP 文件中捆绑多个扩展部分。
在扩展中使用外部 JAR 文件
ThingWorx 可供用户在其代码中包括第三方库。但是,建议您避免使用公用 JAR 文件。而应使用与您应用程序中的 SDK 一起打包的 JAR 文件。请考虑以下方面:
您可以在扩展中使用 /Thingworx/WEB-INF/lib 文件夹内的现有 JAR 文件。但是,如果要在扩展中使用外部 JAR 文件,则请确保 JAR 文件的根名称不得与 /Thingworx/WEB-INF/lib 文件夹中的任何其他 JAR 文件重名。
JAR 文件的根名称始于文件名中第一个字符,止于第一个数字字符。表格中提供了 /Thingworx/WEB-INF/lib 文件夹中存在的以下 JAR 文件的根名称:
JAR 文件名称
根名称
postgresql-42.2.5.jar
postgresql-
log4j-1.2.17.jar
log
metrics-core-3.1.2.jar
metrics-core-
ThingWorx Platform 可供多个源使用相同的 JAR 文件。
如果多个源使用相同的 JAR 文件,则在将扩展上载到平台时或在构建扩展期间使用了不正确的 JAR 版本时,可能会发生冲突。
平台后续版本可能需要更新扩展才能继续运行。
客户无法同时使用两个需要相同 JAR 文件的扩展。
将实体设置为不可编辑
创建诸如混搭、样式定义等实体时,请确保扩展的实体不可编辑。只能就地升级不可编辑的实体。可编辑的实体无法升级。默认情况下,新实体不可编辑。
如果要使某些实体可编辑,可将这些实体捆绑为一个单独的扩展,以便能够轻松升级扩展的其他组件。
对于可编辑实体,建议尽可能减少混搭上的可编辑位置。使用嵌入式混搭尽可能减少可编辑位置。
如果要提供自定义扩展的功能,例如,添加自定义徽标,请考虑替代方法是否可行:
是否可以改用事物的配置?不可编辑的事物仍可进行配置表更改。
是否可使用服务来查找某一配置以提供媒体实体或嵌入式混搭?
以可编辑实体升级扩展
在以可编辑实体升级扩展时,可执行迁移测试,以检查升级过程中是否有信息 (例如标记等) 丢失。
组织实体
建议使用项目和模型标记对实体进行分组。对于扩展的所有实体,必须使用一个项目。至少创建一个可用于标记扩展的所有实体的模型标记。
在删除前备份存储
建议在删除当前 ThingworxStorage 文件夹之前先对其进行备份。
Eclipse 插件
利用 Eclipse 插件,我们可以更轻松地开发和构建扩展。它提供了可用于自动生成源文件、注释和方法的操作。这些操作还会更新元数据文件,以确保扩展的配置正确。该插件还可确保注释和元数据文件的语法和格式正确。