封裝及部署 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 外掛程式可讓您更輕鬆地開發及建構延伸功能。此外掛程式提供一些動作,可自動產生來源檔案、註釋及方法。動作也會更新中繼資料檔案,以確保正確配置延伸功能。此外掛程式也可確保註釋與中繼資料檔案的語法及格式正確。