Optimale Vorgehensweisen für das Bündeln und Bereitstellen von ThingWorx Anwendungen
Verwenden Sie beim Entwickeln und Bereitstellen von Erweiterungen die folgenden optimalen Vorgehensweisen.
Auf einer sauberen Plattforminstanz entwickeln
ThingWorx stellt keine Sicherheitsvorkehrungen oder Sandbox-Funktionen für Ihren Code bereit. Es kann vorkommen, dass Ihre Umgebung teilweise instabil wird. Um wieder für Stabilität der Anwendung zu sorgen, gehen Sie wie folgt vor:
• Wenn Sie Fehler im Entwicklungsprozess beobachten, starten Sie den Apache Tomcat-Server neu.
• Sie werden möglicherweise aufgefordert, das ThingworxStorage-Verzeichnis vollständig zu entfernen. Es wird empfohlen, die Anwendung auf einer sauberen Instanz der Plattform zu entwickeln, um sicherzustellen, dass beim Entfernen des ThingWorxStorage-Verzeichnisses keine Arbeit verloren geht.
Struktur einer Erweiterung
Die Artefakte einer Erweiterung müssen in einer ZIP-Datei in der folgenden Ordnerstruktur gebündelt werden:
• /metadata.xml – Informationen über die Erweiterung und Details der verschiedenen Artefakte in der Erweiterung
• /Entities/ – 0 oder mehr Entitäts-XML-Dateien, die in Unterordnern nach Entitätstyp organisiert sind
• /lib/ – JAR-Datei, die die benutzerdefinierten Java-Klassen für die Erweiterung und JAR-Dateien von Drittanbietern enthält, die für die Erweiterung erforderlich sind
• /ui/ – Dateien, die benutzerdefinierte Widgets definieren, die zum Erstellen und Ausführen von Mashups verwendet werden
Mehrere Erweiterungen in einer ZIP-Datei für eine Anwendung bündeln
IoT-Lösungen, die mehrere Erweiterungen enthalten, können als einzelne ZIP-Datei gebündelt werden. Die einzelne ZIP-Datei enthält individuelle ZIP-Dateien für jede Erweiterung. Dadurch wird sichergestellt, dass jede Erweiterung unabhängig implementiert wird. Individuelle Erweiterungen sind in nachfolgenden Versionen einfacher zu aktualisieren.
Konvention für Erweiterungsname und -version
Es gibt keine Einschränkungen, wie Sie die Erweiterung und die ZIP-Datei einer Erweiterung benennen. Nachdem Sie einen Namen für die Erweiterung angegeben haben, können Sie ihn nicht mehr ändern. Der Name der ZIP-Datei kann jedoch geändert werden.
Obwohl Sie unterschiedliche Namen für die Erweiterung und ihre ZIP-Datei angeben können, wird empfohlen, denselben Namen für die Erweiterung und ihre ZIP-Datei zu verwenden. Der Name der ZIP-Datei kann auch die Versionsnummer enthalten.
Sie können eine IoT-Lösung verwenden, die mehrere Erweiterungen enthält (gebündelt als ZIP mit ZIPs). In diesem Fall wird empfohlen, dieselbe Versionsnummer für alle ZIPs zu verwenden. Ziehen Sie eine IoT-Lösung mit zwei Erweiterungen in Betracht. Jede Erweiterung ist eine einzelne ZIP-Datei mit einer individuellen Versionsnummer. Es empfiehlt sich, dieselbe Versionsnummer im Namen der beiden Erweiterungen anzugeben. Geben Sie außerdem dieselbe Versionsnummer im Namen der ZIP mit ZIPs an. Wenn beispielsweise die Versionsnummer Ihrer IoT-Lösung 7.9 ist, geben Sie 7.9 als Versionsnummer im Namen aller ZIP-Dateien an.
In der Datei
metadata.xml wird das Attribut
packageVersion verwendet, um die Version der Erweiterung anzugeben. Dies ist ein erforderliches Attribut, dessen Wert dem Format
<major>.<minor>.<patch> entspricht, wobei jeder Teil der Version numerisch ist. Erweiterungen müssen den semantischen Versionsregeln folgen. Weitere Informationen finden Sie unter
Semantic Versioning.
Erweiterungsabhängigkeiten
In diesem Abschnitt werden die Abhängigkeiten einer Erweiterung von anderen Erweiterungen beschrieben.
Abhängigkeit der Erweiterung von anderen Erweiterungen
Wenn Ihre Erweiterung von anderen Erweiterungen abhängig ist, wird empfohlen, das Attribut dependsOn in der Datei metadata.xml zu verwenden, um die Abhängigkeiten anzugeben. Der Wert des Attributs ist eine durch Kommas getrennte Liste von Erweiterungsnamen und Versionen im Format <name>:<major>.<minor>.<patch>, wobei Versionen nur in Zahlen angegeben werden. Beispiel: dependsOn= "ExtensionOne:2.5.1,ExtensionTwo:1.2.0".
Es empfiehlt sich, zu viele Abhängigkeiten zu vermeiden. Wenn Upgrades für eine der Erweiterungen vorhanden sind, sind auch abhängige Erweiterungen betroffen.
Enge Kopplung mit anderen Verlängerungen vermeiden
Sie müssen eine enge Kopplung Ihrer Erweiterung mit anderen Erweiterungen vermeiden.
• Wenn Ihre Erweiterung eng mit einer anderen Erweiterung gekoppelt ist, die auf eine neue Hauptversion aktualisiert werden muss, werden Sie aufgefordert, Ihre Erweiterung und die gesamte Kette von Abhängigkeiten zu löschen, bevor Sie das Upgrade durchführen können.
• Die beste Möglichkeit, eine enge Kopplung zu vermeiden, besteht darin, Dinge und Dingvorlagen der erforderlichen Funktionalität zu erstellen. Diese Dinge und Dingvorlagen sind nicht Teil Ihrer Erweiterung und daher nicht in den Erweiterungsupgrades enthalten.
• Gelegentlich kann es schwierig sein, eine enge Kopplung zu vermeiden, wenn Sie Widgets von anderen Erweiterungen in Ihren Erweiterungs-Mashups verwenden.
Größe einer Erweiterung
Große und komplexe Erweiterungen können schwierig zu warten und zu aktualisieren sein. Ein besserer Ansatz ist, Erweiterungen in kleinere Komponenten basierend auf Funktionen aufzuteilen, um Wartung und Upgrade zu vereinfachen. Sie können mehrere Erweiterungen in einer einzigen ZIP-Datei bündeln. Weitere Informationen finden Sie im Abschnitt
Mehrere Erweiterungen in einer ZIP-Datei für eine Anwendung bündeln.
Verwendung externer JAR-Dateien in einer Erweiterung
ThingWorx ermöglicht es Benutzern, Bibliotheken von Drittanbietern in ihren Code einzuschließen. Es wird jedoch empfohlen, die Verwendung der allgemeinen JAR-Dateien zu vermeiden. Verwenden Sie stattdessen die JAR-Dateien, die mit dem SDK in Ihrer Anwendung gebündelt sind. Beachten Sie Folgendes:
• Sie können vorhandene JAR-Dateien aus dem Ordner /Thingworx/Web-INF/lib in Ihrer Erweiterung verwenden. Wenn Sie jedoch eine externe JAR-Datei in Ihrer Erweiterung verwenden möchten, stellen Sie sicher, dass die JAR-Datei nicht denselben Stammnamen wie die anderen JAR-Dateien im Ordner /Thingworx/Web-INF/lib hat.
Der Stammname einer JAR-Datei ist der Name des ersten Zeichens bis zum ersten numerischen Zeichen im Dateinamen. Die Tabelle enthält die Stammnamen der folgenden JAR-Dateien, die im Ordner /Thingworx/Web-INF/lib vorhanden sind:
JAR-Dateiname
|
Stammname
|
postgresql-42.2.5.jar
|
postgresql-
|
log4j-1.2.17.jar
|
log
|
metrics-core-3.1.2.jar
|
metrics-core-
|
• ThingWorx Platform ermöglicht es mehreren Quellen, dieselben JAR-Dateien zu verwenden.
• Wenn mehrere Quellen dieselben JAR-Dateien verwenden, kann ein Konflikt auftreten, wenn eine Erweiterung auf die Plattform hochgeladen oder wenn beim Erstellen der Erweiterung eine falsche JAR-Version verwendet wird.
• Zukünftige Versionen der Plattform erfordern möglicherweise Aktualisierungen an Erweiterungen, um weiterzuarbeiten.
• Ein Kunde kann nicht zwei Erweiterungen verwenden, die gleichzeitig dieselben JAR-Dateien benötigen.
Entitäten nicht bearbeitbar machen
Wenn Sie Entitäten wie Mashups, Stildefinitionen usw. erstellen, stellen Sie sicher, dass die Entitäten der Erweiterung nicht bearbeitbar sind. Nur für nicht bearbeitbare Entitäten kann ein In-Place Upgrade durchgeführt werden. Bearbeitbare Entitäten können nicht aktualisiert werden. Standardmäßig sind neue Entitäten nicht bearbeitbar.
• Wenn einige Entitäten bearbeitbar sein sollen, bündeln Sie diese Entitäten in einer separaten Erweiterung, sodass Sie die anderen Komponenten der Erweiterung problemlos aktualisieren können.
• Für bearbeitbare Entitäten wird empfohlen, die bearbeitbaren Stellen in einem Mashup zu minimieren. Verwenden Sie eingebettete Mashups, um bearbeitbare Stellen zu minimieren.
Wenn Sie die Möglichkeit bieten möchten, die Erweiterung anzupassen, z.B. durch Hinzufügen eines benutzerdefinierten Logos, sollten Sie prüfen, ob ein alternativer Ansatz möglich ist:
• Kann stattdessen die Konfiguration eines Dings verwendet werden? Ein nicht bearbeitbares Ding kann weiterhin Konfigurationstabellen-Änderungen aufweisen.
• Kann ein Dienst zum Suchen einer Konfiguration verwendet werden, um eine Medieneinheit oder ein eingebettetes Mashup bereitzustellen?
Erweiterung mit bearbeitbaren Entitäten aktualisieren
Führen Sie beim Aktualisieren einer Erweiterung mit bearbeitbaren Entitäten einen Migrationstest aus, um zu prüfen, ob Informationen wie Tags während des Upgrade-Prozesses verloren gehen.
Entitäten organisieren
Es wird empfohlen, Entitäten mithilfe von Projekten und Modell-Tags zu gruppieren. Sie müssen ein Projekt für alle Entitäten der Erweiterung verwenden. Erstellen Sie mindestens ein Modell-Tag, das verwendet werden kann, um alle Entitäten der Erweiterung mit einem Tag zu versehen.
Speicher vor dem Löschen sichern
Es wird empfohlen, den aktuellen ThingworxStorage-Ordner zu sichern, bevor Sie ihn löschen.
Eclipse Plugin
Das Eclipse Plugin erleichtert das Entwickeln und Erstellen von Erweiterungen. Es stellt Aktionen bereit, die automatisch Quelldateien, Anmerkungen und Methoden generieren. Die Aktionen aktualisieren auch die Metadatendatei, um eine ordnungsgemäße Konfiguration der Erweiterung sicherzustellen. Das Plugin stellt außerdem sicher, dass Syntax und Format von Anmerkungen und Metadatendatei korrekt sind.