Irgendwann in der Zukunft werden Sie in der Lage sein, dieselbe virtuelle Appliance, die Ihre Anwendung enthält, ohne Anpassungen in all Ihren Zielumgebungen einzusetzen. Bis dahin bedeutet die Bereitstellung in traditionellen
Wichtige Überlegungen: Wonach suchen wir also...?
Wenn Sie verschiedene Ansätze zur Anpassung vergleichen, müssen Sie einige Dinge beachten:
- Bequemlichkeit: Das Anpassungsverfahren sollte einfach einzurichten und schnell auszuführen sein. Dies ist vor allem für Entwickler wichtig, die eine Anpassung durchführen müssen, sobald die Anwendung in der Entwicklungsumgebung bereitgestellt wird.
- Sichtbarkeit: Es sollte für entsprechend autorisierte Benutzer einfach sein, sowohl die Anpassungspunkte (d.h. welche Teile der Anwendung angepasst werden können) als auch die ihnen zugewiesenen Werte in einer bestimmten Umgebung zu sehen.
- Ausfallsicherheit: Wenn eine Anwendung mit fehlenden oder ungültigen Werten für Anpassungspunkte bereitgestellt wird (z.B. wenn Sie vergessen haben, einen Timeout zu setzen oder den Test-Endpunkt für die Produktionsumgebung zu verwenden), sollte dies schnell erkannt werden. Vorzugsweise sollten fehlende oder falsche Werte bereits bei der Bereitstellung erkannt werden, damit sie nicht erst durch fehlerhaftes Verhalten zur Laufzeit auffallen.
- Überarbeitung und Zugriffskontrolle: Nur geeignete Benutzer sollten in der Lage sein, die den Anpassungspunkten einer Anwendung zugewiesenen Werte anzuzeigen und zu bearbeiten. Vorzugsweise sollte eine Historie der Änderungen an diesen Werten geführt werden. Dies erleichtert den Vergleich der Werte für eine Anwendung zwischen verschiedenen Versionen und ermöglicht es Benutzern, die Werte für dieselbe Version einer installierten Anwendung in verschiedenen Zielumgebungen zu vergleichen.
Warten Sie es ab... Tun Sie dies zur Laufzeit
Wie immer ist ein guter Weg, ein Problem anzugehen, der, es zu vermeiden. In diesem Fall können Sie die Notwendigkeit, die Anwendung zur Bereitstellungszeit zu optimieren, umgehen, indem Sie die Suche nach Anwendungseigenschaften auf die Laufzeit verschieben und
- Bequemlichkeit: In der Regel mäßig, da die Umgebung des Entwicklers in der Regel nicht einfach einzurichten ist. Dies hängt jedoch stark von der Unterstützung der Zielplattform für JMX oder dem verwendeten Nachschlagemechanismus ab. Dies muss gegen den Vorteil abgewogen werden, dass Sie das Verhalten der laufenden Anwendung ändern können.
- Sichtbarkeit: Im Falle von JMX gut, da alle MBeans und ihre Eigenschaften leicht zu erkennen sind, insbesondere wenn eine vernünftige Namenskonvention verwendet wird.
- Ausfallsicherheit: JMX verlangt normalerweise "sichere" Standardwerte (die nicht umgebungsspezifisch sein sollten).
- Überarbeitung und Zugriffskontrolle: Auch hier hängt es von der Implementierung der Zielplattform ab. Aber im Allgemeinen gut, vor allem die Zugriffskontrolle, da sie normalerweise in die Verwaltungskonsole des Middleware-Stacks integriert ist.
Ersetzen Sie mich: Token-basierte Ersetzung
Token-basierte Ersetzung bedeutet im Grunde Platzhalter - das Bereitstellungspaket enthält (in Artefakten, Ressourcendefinitionen usw.) spezielle Symbole, und zum Zeitpunkt der Bereitstellung werden diese Symbole durch die für sie bereitgestellten Werte ersetzt. Die Token-basierte Anpassung erfordert, dass der Anbieter, in der Regel die Entwickler, die Deployment-Artefakte speziell vorbereitet.
- Bequemlichkeit: Mäßig, da der Build-Prozess so eingerichtet werden muss, dass er Dateien mit Token korrekt verarbeitet. Wenn Sie in einer Entwicklungsumgebung wie Eclipse mit WTP arbeiten, kann es schlimmer sein, vor allem, wenn es die "Hot-Update"-Funktionen beeinträchtigt.
- Sichtbarkeit: Wo immer es ein Token gibt, gibt es auch einen Anpassungspunkt, so dass sie klar und selbstdokumentierend sind. Wenn Sie JNDI verwenden, die wohl "richtige" Art der tokenbasierten Ersetzung in JEE, sind die zugewiesenen Werte in der Regel auch sehr leicht in der Konsole zu sehen. Die Einsicht in die zugewiesenen Werte kann schwieriger sein, wenn Sie mit dateibasiertem Suchen und Ersetzen arbeiten, wie es bei Eigenschaftsdateien üblich ist, da Sie nicht nur das endgültige Artefakt haben müssen, um die Werte zu sehen, sondern sich auch das Original ansehen müssen, um zu sehen, wo die Platzhalter waren.
- Ausfallsicherheit: Hoch, was im Zusammenhang mit einer geschäftskritischen Aktivität wie der Bereitstellung entscheidend ist. Token sind fast nie gültige Werte. Wenn Sie also vergessen, einen Wert zuzuweisen, führt dies in der Regel zu einer fehlgeschlagenen Bereitstellung. Natürlich besteht immer noch die Gefahr, dass die Token durch Werte für die falsche Umgebung ersetzt werden.
- Überarbeitung und Zugriffskontrolle: Hängt davon ab, wie die Werte, die den Anpassungspunkten zugewiesen werden sollen, bereitgestellt werden. Bei JNDI sind eine gute Revisionierung und Zugriffskontrolle in der Regel "kostenlos" in der Konsole enthalten. Was den allgemeinen Fall der Eigenschaftsdateien betrifft, so haben wir schon alles gesehen: von Dateien, die nicht versioniert sind und als Teil eines "Vorlagenprojekts" mit allen geteilt werden, bis hin zu solchen, die in einem speziellen Versionskontrollsystem gepflegt werden.
Ersetzen Sie das: Zeigerbasierte Ersetzung
Zeigerbasierte Ersetzung ist im Wesentlichen eine schicke Umschreibung für "Suchen und Ersetzen" und seinen etwas fortgeschritteneren Cousin, die XPath-basierte Ersetzung, die häufig in Portal- oder ESB-Umgebungen verwendet wird. Diese Methode ist anfällig, weil das Bereitstellungspaket gültige Werte enthält, so dass die Gefahr eines stillen Fehlers groß ist. Außerdem sind die Anpassungspunkte des Pakets im Wesentlichen unsichtbar. Ironischerweise kann dies nützlich sein, um Pakete zu "patchen", die nicht in einer anpassbaren Weise geschrieben wurden.
- Bequemlichkeit: Hoch. Die Quellanwendung enthält gültige Werte, kann also "so wie sie ist" ausgeführt werden.
- Sichtbarkeit: Anpassungspunkte sind in den Quelldateien nicht sichtbar, obwohl sie (mehr oder weniger leicht) aus der Angabe der Zeiger abgeleitet werden können, die definieren, wo Werte ersetzt werden müssen. Die zuzuweisenden Werte werden normalerweise zusammen mit den Zeigerspezifikationen definiert.
- Ausfallsicherheit: Schwach, da die Quellanwendung (syntaktisch) gültige Werte enthält, auch wenn die Ersetzung nicht oder nur teilweise durchgeführt wird. Das bedeutet, dass es eine ganze Weile dauern kann, bis sich das Problem manifestiert, und zwar oft auf unerklärliche Weise - ein Alptraum für die Wartung.
- Überarbeitung und Zugriffskontrolle: Hängt wiederum davon ab, wie die Zeiger und Werte spezifiziert und gespeichert werden. Da die Zeigerspezifikationen in der Regel in derselben Datei enthalten sind wie die zuzuweisenden Werte, ist es in der Regel nicht möglich, den Zugriff auf die Definitionen der Anpassungspunkte (d.h. der Zeiger) - in der Regel eine Aktivität des Entwicklers - vom Zugriff auf die zugewiesenen Werte zu trennen, die oft nur den Operatoren bekannt sein sollten.
Und...?
Wenn die für Ihre Anwendung erforderlichen Anpassungen nach dem Start der Anwendung vorgenommen werden können, ist es sicherlich eine Überlegung wert, Ihre Anwendung so zu gestalten, dass sie zur Laufzeit konfigurierbar ist. Das macht die Verwaltung der Anwendung bequemer und sicherer, erhöht aber natürlich auch die Komplexität bei der Entwicklung. Und in einigen
Jeder, der schon einmal versucht hat, mitten in einer Bereitstellung vage Anweisungen zur Anpassung der Anwendung zu befolgen, hat sich wahrscheinlich gefragt, warum dies nicht auf eine weniger fehleranfällige Weise geschehen kann. Da nur wenige über eine geeignete - Entwicklung, Test, Abnahme, Produktion
- Während einer WebSphere Process Server-Expertensitzung auf der Impact 2010 sprach einer der WPS-Entwickler über Anpassungen und meinte, dass es "wahrscheinlich 20 Möglichkeiten gibt, eine Bereitstellung anzupassen". Und das war nicht einmal ein Witz!
- Sollte sein ;-)
- Kontextwurzel, Benutzername der Datenquelle usw.
- Versioniert, gesichert usw.
Verfasst von
Andrew Phillips
Contact



