-
Die Informationen sind hilfreich, erklären mir aber nicht ob es möglich ist, dass wenn das System das alte Objekt aus QRPLOBJ verwendet sich dadurch die Variableninhalte zerschießt. Also Pgm A ruft PGM B auf. PGM B setzt Variableninhalte und beendet mit RETURN. Dann ruft PGM A wieder PGMB auf. Variableninhalte sind noch vorhanden. PGMB wird wieder mit RETURN beendet. Jetzt wandle ich PGMB um. PGM A ruft jetzt "PGMB" aus QRPLOBJ auf. Hat der jetzt noch die Variableninhalte oder könnten die da verlorgen gegangen sein ?
-
Für die aktiven Programme ändert sich da überhaupt nichts. Das neue Programm ist denen ja vollkommen unbekannt und es ist dann so, als wenn das neue Programm noch gar nicht existiert.
Deinen Fehler musst du u.U. anders erzeugt haben.
Was auch vorstellbar wäre ist der Ansatz, dass dein neues Programm nicht bei ersten (2., 3., ) Mal funktionierte und das laufende Programm sich da dann irgendwann eine nicht funktionierende Version genommen hat.
Prüfen kannst du das (falls noch kein IPL gelaufen ist) in der QRPLOBJ, da in der Beschreibung zu Qxxxx der Ursprungsname enthalten ist. Ggf. gibt es also mehrere Qxxx-Versionen zu dem Original.
Denn das Verschieben passiert bei jedem Compile, unabhängig ob das Programm verwendet wird oder nicht.
-
Vor allem ist eines wichtig:
Beim Umwandeln wird die alte Version NICHT wirklich in die QRPLOBJ verschoben, sondern bleibt im Speicher exakt dort stehen, wo sie vorher schon war.
Es wird lediglich die logische Bibliothekszuordnung geändert!
Die Variablen etc.. bleiben daher zu 100% erhalten!
(EDIT: Sehe gerade, dass das (nur mit anderen Worten) ohnehin bereits so beschrieben wurde - war etwas zu schnell :-) )
-
Hatte ich das nicht eindeutig genug beschrieben?
"Das Verschieben eines Objektes in eine andere Lib ändert nicht die Adresse des Objekts, sondern nur die Adresse seines Kontexts, also den Standort. Ebenso gilt dies für das Umbenennen eines Objekts, die Adresse bleibt gleich."
Bei dem 1-Adress-System der AS/400 ist es unerheblich ob sich ein Objekt auf der Platte oder bereits im Speicher befindet.
Viel wichtiger zu wissen ist:
Die Adresse eines Programmes mit konstantem Namen wird bereits beim Start des Programmes ermittelt selbst wenn es nicht aufgerufen wird.
Da kann dann selbst Stunden später bei einem Dauerläufer plötzlich eine alte Version aufgerufen werden.
-
Ich glaube das alles was hier steht und verstehe es auch nur meine Fakten sind einfach eindeutig, was dagegen spricht das die Variableninhalte erhalten bleiben
Alle Daten wurden (schon Jahre) richtig geändert
Programm ist umgewandelt
Daten sind teilweise falsch und bei denen die falsch sind steht als Programm das Qxxxx im Journal als Update-Programm drin
Alle vorherigen Updates vor der Umwandlung sind korrekt und alle die nach der Umwandlung das Programm gestartet haben und somit sowieso die neue Version hatten, sind auch korrekt.
Daraus ergibt sich für mich, dass es Probleme mit der "Kopie" aus QRPLOBJ gab.
-
Was immer da passiert ist:
Es gibt keine Kopie!
Sonst würde das Verschieben aktiver Programme nicht funktionieren (siehe Adresserklärung).
Der Compiler greift auch nicht in laufende Jobs ein.
Im Nachhinein ist eine Analyse halt nicht mehr möglich und ein Fall wie deiner ist mir noch nie untergekommen.
Du kannst es gerne auch selber mit RNMOBJ und MOVOBJ eines aufgerufenen Programmes ausprobieren. Dieses kannst du sogar im Debugger anhalten.
-
Vielen Dank für die Hilfe und für die genauen Erläuterungen. Die Daten welche falsch waren habe ich korrigiert und seitdem ist auch kein weiterer Fehler aufgetreten. Die Fehler waren tatsächlich nur in der Übergangsphase als welche noch die alte Version im Stack hatten. Wie gesagt, auch die alte Version hat keine Fehler verursacht nur die "Kopie" während der Übergangsphase. Ich hab das übrigens auch verstanden, dass dies keine Kopie ist, allerdings verstehe ich nicht warum beim Objekt Qxxxx in Bibliothek QRPLOBJ der Typ *PGM steht. Für mich ist das eine Kopie des alten Programms und genau dieses Programm ist als Programm welches die Änderung in der Datei gemacht hat im Journal zu sehen
-
Ganz einfach:
Du erstellst ein Programm mit dem Namen XXX und erhältst ein Objekt vom Typ *PGM.
Das Objekt wird in einen eindeutigen Namen Qxxx umbenannt und die Elterneigenschaft in QRPLOBJ geändert. Da es, wiederholt, keine Kopie sondern das laufende Programm ist, behält es ja außer seinem Namen die vollkommene Identität als Programmobjekt.
-
Sieh dir mal mit DSPOBJD die Objektbeschreibung des Objekts Q6E43694A5 der Art *PGM in Bibliothek QRPLOBJ an. Wann wurde es erstellt?
-
Hab ich bereits gemacht. Das Erstellungsdatum des Objekts was nach der Umwandlung nicht mehr existiert. Bestätigt nur dass das alte Programm in QRPLOBJ verschoben wurde. Ihr hängt Euch aktuell am Begriff Kopie auf. Was aber nicht mein Problem ist. Mir ist das egal ob er das in die QRPLOBJ kopiert oder verschiebt es sollte auf jeden Fall keine Probleme machen, was es aber gemacht hat. Dann stelle ich jetzt vielleicht die Frage nochmal. Kann es sein, dass das verschobene Programm nachdem es verschoben wurde Probleme mit Variableninhalten bekommt ? Denn anscheinend ist das so, sonst wären keine Probleme aufgetreten. Vor der Umwandlung gab es keine Probleme, alle die das Programm nach der Umwandlung neu aufgerufen haben, haben auch keine Probleme gemacht nur das verschobene Objekt in QRPLOBJ hat die Daten falsch upgedated.
-
Ein Programm macht genau das, was da programmiert ist. Variablen sind festgelegt und Adressen können nicht geändert werden.
Was im Nachhinein genau passiert ist, lässt sich da eben kaum nachvollziehen.
Vielleicht ist das verschobene Programm eine Zwischenversion und nicht die tatsächliche vorherige korrekte Version gewesen.
Dazu hättet du dir die tatsächliche Quellinformation des Objekts vorher sichern sollen.
Ggf. hast du das Original ja noch auf einer Sicherung um es mit dem Objekt der QRPLOBJ vergleichen zu können. Dann kannst du ggf. feststellen, dass das Original u.U. älter als die verschobene Version ist.
Ich denke wir können hier noch endlos diskutieren bevor herauskommt, dass du vielleicht doch einen Fehler gemacht hast.
Similar Threads
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 30-01-17, 13:36
-
By oulbrich in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 23-03-15, 17:21
-
By stefan400 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 06-09-02, 07:59
-
By delphix in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 06-03-02, 15:07
-
By Stefan_R in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 03-07-01, 07:59
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks