Fixpacks

Mit Rational Team Concert können Sie Fixpacks oder Programmkorrekturen für eine Basisanwendung entwickeln.

Für die Implementierung eines Anwendungsrelease gibt es zwei Schemata. Sie können alle Objekte in der Anwendung ersetzen oder nur die geänderten Objekte ersetzen. Die Implementierung vieler Anwendungen unter IBM® i erfolgt über die Installation von Programmkorrekturen für eine Basisgruppe von Objekten. Diese Gruppe neuer Objekte wird als "Fixpack" bezeichnet. Über die verschiedenen Releases einer Anwendung sammeln sich eine Reihe von Fixpacks an, sodass es im Verlaufe der Zeit mehrere Fixpacks für eine bestimmte Basis gibt. Sie können diese Fixpacks so erstellen, dass sie nacheinander angewendet werden müssen. Die Fixpacks können aber auch kumulativ sein. Sie können Fixpacks auch so erstellen, dass sie vorhandene Objekte ersetzen, oder Sie können den Bibliothekslistensuchpfad so festlegen, dass statt der vorhandenen Objekte die Fixpackobjekte aufgelöst werden.

Schauen Sie sich dazu das folgende Beispiel an. Eine Anwendung umfasst eine Reihe von Programmen, Dateien und anderen Objekten, die sich alle in einer kleinen Gruppe von Bibliotheken befinden. Wenn ein Benutzer die Anwendung ausführt, sind diese Bibliotheken alle in der Bibliotheksliste vorhanden. Ein Fixpack für die Anwendung ersetzt einige der Objekte in diesen Bibliotheken durch neuere Versionen und lässt andere Objekte unberührt. Aufgrund des späten Bindungsverhaltens von Serviceprogrammen in der ILE und von Programmen allgemein im OPM führt die Ersetzung dieser Objekte dazu, dass eine neue Version der Anwendung zur Verfügung gestellt wird.

Alternativ kann sich der Benutzer entschließen, die Bibliotheken des Fixpacks vor der Basisanwendung in die Bibliotheksliste aufzunehmen und das dynamische Binden über die Bibliotheksliste zu ermöglichen. Wenn alle Bindungen mithilfe der Bibliotheksliste hergestellt werden, wird das Fixpack effektiv angewendet, ohne Objekte in der Basisbibliothek zu ersetzen.

Mit Rational Team Concert können Sie beide Arten von Fixpacks konstruieren.

Beispiel

Eine Anwendung kann in Projekte unterteilt werden, deren Quelle jeweils in den Quellendateien einer einzelnen IBM i-Bibliothek gespeichert ist. Die aus dieser Quelle erstellten Objekte werden in einer Objektbibliothek erstellt. Diese Objektbibliothek könnte gleichzeitig die Quellenbibliothek sein. Ein Fixpack umfasst zwei Gruppen von Objekten in dieser Objektbibliothek:
  • Objekte, die aus der Quelle erstellt wurden, die sich im Vergleich zur Quelle der Basisbibliothek geändert hat
  • Objekte, die aus der Quelle in der Basisbibliothek erstellt wurden und von geänderten Quellen-Membern abhängig sind

In diesem Beispiel gehen wir von zwei Quellenbibliotheken aus, von FIX und BASE. Zur Vereinfachung nehmen wir an, dass die Anwendungsobjekte direkt in der Bibliothek FIX erstellt werden. Die Quellendatei BASE/QRPGLESRC enthält die Member A und B. Die Quellendatei BASE/QRPGLEINC enthält den Member I, der gleichzeitig ein in A und B eingeschlossener Member ist und von A und B verwendet wird. In unserem Beispiel werden alle eingschlossenen Quellen in QRPGLEINC gestellt und dem Quellentyp RPGLE zugeordnet. BASE wird als schreibgeschützt betrachtet. Alle Änderungen werden in FIX vorgenommen. BASE soll außerdem alle aus Quellen erstellten Objekte enthalten und FIX die Objekte, aus denen das Fixpack besteht. Anfänglich ist FIX leer.

Anmerkung: Der RPG-Compiler verwendet die Anweisung /INCLUDE im folgenden Format: /INCLUDE Bibliotheksname/Dateiname,Member-Name. Der Bibliotheksname lautet standardmäßig *LIBL. Die Datei hat standardmäßig den Namen QRPGLESRC. Der Member-Name ist erforderlich. In diesem Beispiel wird davon ausgegangen, dass der Bibliotheksname *LIBL lautet, da sich der eingeschlossene Member in FIX oder BASE befinden könnte.

Der Programmierer möchte QRPGLESRC(A) modifizieren. Dazu muss er QRPGLESRC(A) von BASE in FIX kopieren. Anschließend wird der Member modifiziert. Während einer Erstellung soll aus dieser Quelle das Modul FIX/A erstellt werden.

Jetzt möchte der Programmierer QRPGLEINC(I) modifizieren. Er kopiert QRPGLEINC(I) von BASE in FIX und nimmt die Änderung vor. Jetzt müsste während der Erstellung aus dieser Quelle das Modul FIX/A erstellt werden, außerdem jedoch das Modul FIX/B. QRPGLEINC(I) ist kein Modul zugeordnet, obwohl der Member vom Typ RPGLE ist. Dies liegt daran, dass es sich um einen eingeschlossenen Member handelt, der nicht kompiliert werden sollte.

Die Projektorganisation, die Erstellungskonfiguration und der Erstellungsprozess müssen so flexibel sein, dass Folgendes festgestellt werden kann:

Projektorganisation

Dieses Beispiel für die Unterstützung von i-Projekten in Rational Developer für Power-Systems-Software zeichnet sich durch eine sehr einfache Basisprojektorganisation aus. Es gibt nur ein Projekt mit den beiden Quellendateien QRPGLESRC und QRPGLEINC. Jede dieser Quellendateien enthält die oben genannten Member. Vergessen Sie nicht, dass es nur ein Projekt gibt. Da das Repository den gesamten Verlauf dieses Projekts protokolliert, kann sich der Inhalt des Repositorys im Verlauf der Zeit ändern. Für eine Erweiterung oder Korrektur der Anwendung muss kein zweites Projekt angelegt werden.

Dieses Projekt kann über einen Repository-Datenstrom gemeinsam genutzt werden. Innerhalb dieses Datenstroms wird eine Momentaufnahme erstellt, die die Basis dieser Anwendung bildet. In unserem Beispiel wird davon ausgagengen, dass die Bibliothek BASE bereits Objekte enthält.

Wenn wir beginnen, Änderungen an der Anwendung vorzunehmen, enthält der Datenstrom diese Änderungen. Wir ordnen diesem Datenstrom einen Erstellungsarbeitsbereich und dessen Erstellungsdefinition zu. In der Erstellungsdefinition ist die Bibliothek FIX unter IBM i als Lade- und Objektbibliothek angegeben. Die Bibliothek BASE ist in der Erstellungsdefinition als einzige Referenzbibliothek angegeben.

Bibliothek FIX laden

Bevor eine Erstellung übergeben wird, synchronisiert der Ladeprozess für die Momentaufnahme die Bibliothek FIX und den Erstellungsarbeitsbereich. Am Datenstrom vorgenommene Änderungen fließen in den Erstellungsarbeitsbereich ein und von dort aus in die Bibliothek FIX auf dem IBM i-System. Da jedoch eine Basismomentaufnahme erstellt wurde, werden nur Dateien, die sich von der Basis unterscheiden, in die Bibliothek FIX geladen.

In unserem Beispiel nimmt der Programmierer Änderungen an QRPGLESRC(A) vor und übergibt diese dann an den Datenstrom. Damit fließen die Änderungen in den Erstellungsarbeitsbereich ein. Da es sich um eine Änderung an der Basis handelt, wird der Member anschließend in die Bibliothek FIX auf dem IBM i-System geladen. QRPGLEINC(I) wurde ebenso geändert und fließt in die Bibliothek FIX ein. Unsere Bibliothek FIX enthält jetzt zwei Quellen-Member.

Bibliotheksliste während der Erstellung

Eine Bibliotheksliste besteht aus vier Abschnitten, der Liste der Systembibliotheken, der aktuellen Bibliothek, einer oder zwei Produktbibliothek(en) und der Liste der Benutzerbibliotheken. Die System- und Produktbibliotheken wollen wir im Moment ignorieren. Die aktuelle Bibliothek ist eine einzelne Bibliothek. Die Liste der Benutzerbibliotheken umfasst mehrere Bibliotheken. Eine Bibliothek kann die aktuelle Bibliothek sein und gleichzeitig in der Liste der Benutzerbibliotheken enthalten sein. In der Liste der Benutzerbibliotheken kann jedoch jede Bibliothek nur einmal aufgeführt sein.

Wenn wir unser bisheriges Beispiel wieder aufgreifen, ist es klar, dass FIX das Ziel der Kompilierung ist. FIX sollte unsere aktuelle Bibliothek sein. Alle Erstellungsbefehle erstellen Objekte standardmäßig in dieser Bibliothek. Da Objekte in FIX kompiliert werden sollen, geben wir diese Bibliothek in unserer Erstellungsdefinition an.

BASE muss auch in der Bibliotheksliste enthalten sein, damit die Compiler die Member finden können. Sie ist die einzige Bibliothek in unserer Liste der Benutzerbibliotheken. In unserer Erstellungsdefinition geben wir sie als Referenzbibliothek an.

Die Bibliotheksliste kann nach BASE weitere Bibliotheken enthalten. Bei der Suche nach Kompilierungskandidaten sollen jedoch nur FIX und BASE durchsucht werden und keine weiteren Bibliotheken.

Erstellungsspezifikation

Die Erstellungsspezifikation steuert den Erstellungsprozess, indem sie beschreibt, was wie erstellt werden soll. In unserem Beispiel enthält die Erstellungsspezifikation für das Projekt zwei Befehlssätze, einen für ILE RPG und einen für die Erstellung von Programmen aus den Modulen. Die Erstellungsspezifikation enthält außerdem zwei Erstellungsprogramme, von denen eines die zu kompilierenden Objekte für RPG beschreibt und das andere das Programm erstellt. Gewöhnlich können die Befehlssätze in mehreren Erstellungsprogrammen wiederverwendet werden. Da wir hier jedoch ein einfaches Beispiel haben, kommt eine solche Wiederverwendung nicht vor.

Fassen wir zusammen: Die Bibliotheken FIX und BASE enthalten QRPGLESRC(A) vom Quellentyp RPGLE. Außerdem befindet sich QRPGLEINC(I) vom Quellentyp RPGLE in FIX und BASE. Der Member QRPGLESRC(B) ist in BASE enthalten. I ist in A und B eingeschlossen.

Der Erstellungsprozess muss alle Kompilierungskandidaten in QRPGLESRC vom Typ RPGLE untersuchen. Da die Bibliotheksliste neben FIX und BASE noch andere Bibliotheken enthalten könnte, beschreiben wir die Liste der Kandidaten mit der speziellen Variablen &SP. Diese Variable enthält die Bibliotheken des Projekts, die auf der Suche nach zu kompilierenden Quellen durchsucht werden müssen. In unserem Fall wird &SP von der Erstellungs-Engine auf die Liste (FIX BASE) gesetzt.

In unserer Erstellungsdefinition geben wir den Ausdruck für die Kompilierungskandidaten wie folgt an:

Außerdem wird wie folgt eine Liste potenzieller Abhängigkeiten definiert:

Wenn wir den ersten Ausdruck auf unser Beispiel anwenden, erhalten wir nach Erstellung und Modifikation von FIX/QRPGLESRC(A) die folgenden Kompilierungskandidaten:

Wenn wir den zweiten Ausdruck auf unser Beispiel anwenden, erhalten wir für diese Kandidaten die folgende Liste von Abhängkeiten:

Durch die Änderung von QRPGLEINC(I) werden demzufolge FIX/QRPGLESRC(A) und BASE/QRPGLESRC(B) veranlasst, durch Kompilierung die Module FIX/A und FIX/B zu erstellen. Wenn nur QRPGLESRC(A) geändert wird, veranlasst dies nur FIX/QRPGLESRC(A), das Modul FIX/A zu kompilieren und zu erstellen. Die Bibliothek FIX enthält nur die für ein Fixpack erforderlichen Module.

Unter Jazz.net finden Sie weitere Informationen.


Feedback