[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2

Hybrid View

  1. #1
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... da geht ja wieder mal alles durcheinander.
    - SQL Ressourcen werden gecached, wo immer möglich und das ist auch (fast immer) gut so.
    - SQL Ressourcen werden mit dem schließen der Connection (zumindest ejtzt noch) freigegeben.
    - automatisch erstellte connections (lokale RPG/COBOL embedded SQL) werden bei OPM/pseudo ILE beim RCLRSC und bei true ILE beim RCLACTGRP geschlossen.
    - CLOSSQLCSR ENDMOD garantiert weder einen Hard close, noch ist das im richtigen Leben Performance relevant
    - offene SQL ODPs können beim ALCOBJ stören, aber dann per CONFLICT(*RQSRLS) beseitigt werden.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    "true ILE" ist mir nun doch neu.
    Wenn ich ein ILE-Programm mit ACTGRP(*CALLER) vom OPM aufrufe ist es dann kein ILE?
    Aber wenn ich es aus einer ACTGRP aufrufe dann auf einmal doch?
    Wird das Programm neu kompiliert?

    Was i.Ü. die Rekursion von Aufrufen angeht so ist das per NOMAIN (oder so) und Funktionen besser und effektiver zu lösen als mit ACTGRP(*NEW).
    Das funktioniert nun sogar in COBOL.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Was ich nicht verstehe, warum lest Ihr eigenlich nie die Dokumentation bzw. selbst wenn man Ausschnitte aus der Dokumentation bringt werden diese noch ignoriert!

    Nochmal für alle zum Mitschreiben:

    1. Alle Programme, die mit Default-Aktivierungsgruppe DFTACTGRP(*YES) umgewandelt wurden sind OPM-Programme und verhalten sie wie solche. Beim RCLRSC werden diese aus dem Speicher entfernt.

    2. Alle Programme, die mit Default-Aktivierungsgruppe DFTACTGRP(*NO) umgewandelt wurden sind ILE-Programme. ILE-Programme können nur durch das Schließen der Aktivierungsgruppe (RCLACTGRP), in der sie aktiviert wurden, aus dem Speicher entfernt werden.
    RCLRSC hat auf die (benannten/*New) Aktivierungsgruppen keinen Einfluss.

    3. Werden Programmemit Default-Aktivierungsgruppe DFTACTGRP(*NO) und Aktivierungsgruppe *CALLER von einem OPM-Programm aufgerufen, laufen diese ILE-Programme in der Default-Aktivierungsgruppe.
    Wie zuvor gesagt kann ein ILE-Programm nur durch Schließen der Aktivierungsgruppe aus dem Speicher entfernt werden. Die Default-Aktivierungsgruppen können nur durch Beenden des Jobs beendet werden.
    RCLRSC wirkt nur auf die Default-Aktivierungsgruppen und bewirkt dabei, dass die mit Return beendeten Programme (unabhängig davon ob ILE oder OPM) beendet werden. Ebenso werden alle für native I/O geöffneten Dateien in OPM und ILE Objekten (also auch Service-Programme, die in der Default-Aktivierungsgruppe laufen) geschlossen.
    Aber da ILE-(Service-)Programme nur durch das Beenden der Aktivierungsgruppe komplett aus dem Speicher entfernt werden können, werden zwar die Dateien geschlossen, die Objekte bleiben weiterhin im Speicher und der statisch reservierte Speicherbereich für Variablen bleibt erhalten. Beim erneuten Aufruf werden die Variablen neu initialisiert.
    Dieses Verhalten mag vielleicht bei echten Programmen keine Probleme darstellen, bringt aber rieseige Probleme, wenn Service-Programme (mit F-Bestimmungen) in der Default-Aktivierungsgrupe ausgeführt werden und dann die Dateien durch RCLRSC geschlossen werden.

    Aus Erfahrung, kann ich sagen, dass viele Firmen (z.T. auch weil sie FALSCH beraten wurden) spätestens dann, wenn sie anfangen wollen Service-Programme richtig einzusetzen massive Probleme bekommen.

    Deshalb gilt eigentlich die Regel (und damit stehe ich nicht allein, da kann ich jede Menge bekannter Größen z.B. Barbara Morris, Jon Paris, Susan Gantner, Scott Klement, Charlie Guarino, Bob Cozzi etc. ins Rennen schicken):
    ILE-(Service-)Programme sollten in einer benannten Aktivierungsgruppe ausgeführt werden.

    Solange man noch nicht alles 100% im Griff hat, genügt es sich für eine Aktivierungsgruppe z.B. QILE oder irgende einen anderen Namen (z.B. Firma-Namen), durch den Probleme mit Programmen, von anderen Firmen, die Ihre ILE-Programme ebenfalls in der QILE ausführen, vermieden werden.
    Wenn man dann (zumindest am Anfang) den Override Scope und den Commitment Scope auf *JOB setzt, ziehen auch die Overrides, die z.B. in OPM-Programmen gesetzt wurden korrekt. Nach- und nach sollte man dann die Overrides auf *CALLLVL umsetzen, d.h. der Override gilt nur für den aktuellen Callstack.

    Seit Release 6.1 ist es auch so, dass Programme mit sogenannten Linearen Main-Prozeduren erstellt werden können. Schlüssel-Wort MAIN in den H-Bestimmungen, die im Zusammenhang mit dieser Prozedur genannte Prozedur wird direkt aufgerufen. Bei "normalen" Main-Prozeduren wird immer der RPG Zyklus integriert, der einen rekursiven Aufruf (innerhalb der gleichen Aktivierungsgruppe) verhindert.

    Bei linearen Main-Prozeduren wird der RPG-Zyklus nicht integriert, deshalb kann z.B. auch keine *INZSR integriert werden. Da der Zyklus nicht integriert wurde, können auch Programme innerhalb der gleichen Aktivierungsgruppe rekursiv aufgerufen werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Deshalb gilt eigentlich die Regel (und damit stehe ich nicht allein, da kann ich jede Menge bekannter Größen z.B. Barbara Morris, Jon Paris, Susan Gantner, Scott Klement, Charlie Guarino, Bob Cozzi etc. ins Rennen schicken):
    ILE-(Service-)Programme sollten in einer benannten Aktivierungsgruppe ausgeführt werden.

    Birgitta
    ... da fallen mir spontan die Millionen Fliegen ein...
    Es stimmt ja alles, was Du über den Mix sagst und das der problematisch ist, deshalb muss man auch davon weg, aber das Rezept, das Du da anbietest, das würde ich keineswegs empfehlen (vielleicht hast Du Dich auch unklar ausgedrückt?).
    Serviceprogramme sollten in ACTGRP *CALLER laufen, ansonsten lassen sie sich nicht Commit fähig machen und auch nicht deaktivieren (RCLACTGRP). Für die DFTACTGRP (in reality eine OPM compatible ILE Ablaufumgebung) kann das bedeuten, dass man sie über einen PGM wrapper aufruft (der dann eine benamte ACTGRP hat), oder dass man keine F Karten ablocht, oder dass man Dateien user controlled öffnet. Oder versucht Programmierung im wilden Mix zu entgehen, was für Nicht-Freelancer schwierig sein kann.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Ich weiß ja gar nicht, warum Birgitta sich so aufregt.
    Ich habe ja nichts falsches gesagt da ich mit DFTACTGRP(*NO) umwandle.
    Allerdings ist bei DFTACTGRP(*YES) das Programm in der QILE-ACTGRP die ich sehr wohl per RCLACTGRP löschen kann. Warum soll das, auch wenn es in der Doku steht, nun kein ILE sein?
    Ich kann auch in QILE beliebige Serviceprogramme und sonstige ILE-Programme und Funktionen laufen lassen. Man benötigt halt nur keinen eigenen Namen.

    Und Birgitta bestätigt mich ja nur, dass RCLRSC auf die *DFTACTGRP wirkt und somit auch ILE-Programme, die ja per *CALLER genau auch hier laufen, ebenso aus dem Speicher gekillt werden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ich glaube dass alle Standpunkte klar erklärt wurden und jeder Leser sich schlussendlich selbst entscheiden kann welche Richtung er einschlagen will.
    Bzw. gibt es zu diesem Thema ja auch noch genug andere Beiträge in diesem Forum die ähnlich verlaufen sind.

Similar Threads

  1. Dynamisches embedded SQL
    By Tschabo in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 11-03-21, 09:14
  2. MSG aus embedded SQL
    By malzusrex in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 02-06-15, 11:26
  3. embedded sql substring
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 29-06-14, 15:12
  4. EMBEDDED SQL in RPG
    By Ludger Muhmann in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 30-07-02, 09:49
  5. Embedded SQL
    By Stefan_R in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 12-10-01, 09:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •