PDA

View Full Version : ILE Cobol und geöffnete Dateien



ksch091256
24-01-03, 13:30
Wir haben erst in letzter Zeit unsere Anwendung von OPM auf ILE umgestellt und haben damit folgendes Problem. Wir rufen aus CL-Programmen Cobol-Programme auf, nachdem wir die entsprechenden OVRDBF's , OPNQRY's usw. gemacht haben. Unter OPM sind die von den Cobol-Dateien geöffneten Dateien wieder geschlossen worden auch ohne ein entsprechendes Close, unter ILE ist das nicht so. Leider ist das recht lästig, da diese Probleme meist beim Kunden auftreten und nur unter bestimmten Konstellationen kein CLOSE durchgeführt wird.
Gibt es eine Möglichkeit, auch ILE Cobol Programme dazu zu bringen, alle geöffneten Dateien wieder zu schließen? Am besten von "außen", denn nach einem Programmabsturz stehen diese geöffneten Dateien auch noch rum.
Ich habe etwas von einer Cancel-procedure gelesen, nur leider nichts gefunden, wie man die aufruft. Würde dier helfen?

horschma
24-01-03, 13:46
Hallo,
eine mögliche Lösung ist beim erstellen des Programms den Parameter ACTGRP von CRTPGM oder CRTBNDCBL auf *NEW zu setzen.

hth
Thomas

rolf
24-01-03, 14:26
Hi
Ich kenne mich mit Cobol zwar nicht aus, aber mit RPG funktionierts so:
Im aufrufenden Programm (RPG oder CL oder..) RLCRSC oder RCLACTGRP durchführen. Dies sollte alle offenen Files.
Ich denke sollte auch für Cobol funktionieren.

Gruss
Rolf

Fuerchau
24-01-03, 16:28
Der RCLRSC, der ja meistens verwendet wurde, zieht bei ILE nicht mehr, da ILE-Programme in eigenen Aktivierungsgruppen laufen.
Beim Erstellen der Programme kann eine Aktivierungsgruppe explizit vorgegeben werden oder *CALLER verwendet werden.
Bei *CALLER funktioniert RCLRSC beim rufenden Proramm wieder, bei einer eigenen Gruppe nicht.

Wenn man die Gruppe nicht kennt, kann man auch (z.B. in Menüauswahlprogrammen)

RCLACTGRP ACTGRP(*ELIGIBLE)

verwenden, daraufhin werden ALLE inaktiven Aktivierungsgruppen gelöscht.

B.Hauser
25-01-03, 15:56
Activierungs-Gruppen:
1. Bei der Programm-Generierung wird eine Activierungs-Gruppe angegeben.
Bei OPM-Programmen ist dies immer die Default-Activation-Group.
Wird ein ILE-Programm über Auswahl 14=CRTBNDxxx umgewandelt, ist der Unterlassungs-Wert für Default-Activation-Group=*YES
Wird nicht die Default-Aktivierungs-Gruppe benutzt, kann wie bei CRTPGM ein Name, *CALLER oder *NEW angegeben werden.

2. Die Default-Activation-Group wird bei Job-Start aktiviert und kann nur durch das Beenden des Jobs beendet werden.

3. Bei Aktivierungs-Gruppe *NEW wird bei jedem Aufruf eine neue Aktivierungs-Gruppe gebildet. In einer Aktivierungs-Gruppe werden Speicher-Bereiche für das Programm und die verwendeten Variablen reserviert. Bei Programm-Ende wird die Aktivierungs-Gruppe beendet, d.h. alle Ressourcen werden freigegeben.
Dadurch sind bei Aktivierungs-Gruppe *NEW rekursive Programm-Aufrufe möglich.

4. Bei benannten Aktivierungs-Gruppen, werden die Ressourcen bei Programm-Ende nicht freigegeben. Wird das Programm erneut aufgerufen, wird die Aktivierungs-Gruppe reaktiviert. Dadurch sind alle folgenden Aufrufe schneller als der 1. Aufruf.

5. Eine benannte Aktivierungs-Gruppe kann wie folgt beendet werden:
- CL-Befehl RCLACTGRP
*ELIGIBLE sollte nur dann benutzt werden, wenn die Anwendung genaustens bekannt ist.
- Cobol Befehl: STOP RUN
- API CEETREC

Exception Handler:
1. ILE Condition Handler
Bei einem ILE Condition Handler handelt es sich um ein Programm, das Fehler-Situationen bearbeitet.

Der ILE Condition Handler kann universell, d.h. für Programme/Prozeduren in unterschiedlichen Programmier-Sprachen verwendet werden.

Bei Nutzung eines ILE Condition Handlers ist es möglich das Programm, in dem der Fehler auftrat fortzusetzen. Leider ist es nicht möglich, die Aktion, die den Fehler verursachte zu wiederholen.

Soll der ILE Condition Handler in einem Programm verwendet werden, muss er registriert werden.
API CEEHDLR = Registrieren
API CEEHDLU = Registrierung entfernen.

In einem Programm können mehrere ILE Condition Handler registriert werden.

Ein ILE Condition Handler benötigt 3 Parameter:
Condition Token
Communication Area Information
Condition Handler Action Information
(Beispiele sind im Internet zu finden)

2. Beim Senden einer SCOPE Message zu Beginn des Programms (API QMHSNDSM) kann ein Programm angegeben werden, das ausgeführt werden soll, wenn das Programm endet.
Das Programm springt an, unabhängig davon, ob das Programm normal oder abnormal beendet wurde.

Birgitta