[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Mar 2002
    Beiträge
    5.389
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ein Service-Programm kann auch ACTGRP(*CALLER) haben. Dann wird das Programm eben zusammen mit der ACTGRP des Aufrufers rausgeschmissen.
    Das hat auch den Effekt, dass das Programm mehrfach, eben je ACTGRP, im Speicher liegen kann.
    Zu bedenken ist, dass Serviceprogramme ja von verschiedenen Hauptprogrammen aufgerufen werden und somit SQL-Cursor vom Einen durch Andere zerstört werden können.

    Ein RCLACTGRP ACTGRP(*ELIGIBLE) hat ggf. bei Triggerprogrammen in eigenen ACTGRP's die Auswirkung, dass der Job beendet werden muss.
    Die weitere Ausführung der Trigger ist nicht mehr möglich. Dies könnte jedoch releaseabhängig und durch PTFs behoben sein.
    Datenbankmodule, wie vom OP angeführt, müssen ACTGRP(*CALLER), was üblicherweise default ist, haben, sonst wären sie nicht Transaktionsfähig (commit) und der Transaktionsmaster muss eine eigenen benannte ACTGRP oder *NEW haben - dann funzt das auch mit Cursor etc. wie gewollt.

    Bei den Trigger Programmen ist das ähnlich: ein Triggerprogramm in einer eigenen ACTGRP ist ein Kunstfehler, die müssen immer *CALLER haben - trotzdestonichts ist das beschrieben Verhalten für den abstrusen Fall (es gibt immer wieder Leute, die es gerne kompliziert haben) als Bug anzusehen.

    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
    Mar 2014
    Beiträge
    35
    Unsere Serviceprogramme laufen alle unter der Aktivierungsgruppe *CALLER.
    Wir haben auch keine explizite Beendigung einer Aktivierungsgruppe.

    Klassischer Fall:
    Programme werden aus Menüs aufgerufen, benutzen die Serviceprogramme und werden beendet.
    Es sollte doch dann alles unter der Aktivierungsgruppe QILE und entsprechend unter Job Scope laufen oder?

    Zugriffe von anderen Hauptprogrammen und der verschiedenen Benutzer sollten sich doch somit nicht in die Quere kommen - oder habe ich da was missverstanden. Oder verhält sich das Serviceprogramm (inklusive Daten) wie ein Singleton in Java ?!?

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.389
    Zitat Zitat von Tonazzo Beitrag anzeigen
    Unsere Serviceprogramme laufen alle unter der Aktivierungsgruppe *CALLER.
    Wir haben auch keine explizite Beendigung einer Aktivierungsgruppe.

    Klassischer Fall:
    Programme werden aus Menüs aufgerufen, benutzen die Serviceprogramme und werden beendet.
    Es sollte doch dann alles unter der Aktivierungsgruppe QILE und entsprechend unter Job Scope laufen oder?

    Zugriffe von anderen Hauptprogrammen und der verschiedenen Benutzer sollten sich doch somit nicht in die Quere kommen - oder habe ich da was missverstanden. Oder verhält sich das Serviceprogramm wie ein Singleton in Java ?!?
    ... alles in QILE laufen zu lassen ist nicht sinnvoll, damit ist nicht sichergestellt, dass zwei Programme im Callstack sich gegenseitig den einen Cursor, den sie haben kaputt machen. Besser ist m.E. Name der ACTGRP = Programmname, dann ist jedes Programm für seine abhängigen Cursor selber verantwortlich. Falls über Verzweigungen rekursiv aufgerufen werden könnte, ist *NEW erforderlich.

    Ein wesentlicher Unterschied zwischen der ILE runtime und Java ist, dass sich in Java mehrere Benutzer eine JVM teilen, also gemeinsame Ressourcen (shared Memory) haben, Bei ILE hat jeder Job seine eigene abgeschottete Umgebung, mehrere Jobs haben (aus Benutzersicht) kein shared memory.
    Ein weiterer wesentlicher Unterschied ist, dass ich in Java die Lebensdauer aller Objekte selber kontrolliere, in ILE ist das nur sehr eingeschränkt möglich (erkennt man daran, dass es kein new gibt und die Erzeugung von (runtime) Objekten automatisch passiert (also immer nur eines pro ACTGRP, oder nur kurzlebige := ACTGRP(*NEW)) zudem muss das alles schon zur compiletime festgelegt 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/

Similar Threads

  1. User Defined Function in SQL, Datumsübergabe an Serviceprogramm
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 27
    Letzter Beitrag: 02-12-14, 10:33
  2. CLLE als Prozedur ins Serviceprogramm
    By Etherion in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 30-09-14, 14:36
  3. Antworten: 2
    Letzter Beitrag: 12-08-14, 13:09
  4. hinzufügen Prozedur in bestehendes Serviceprogramm
    By Tonazzo in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 11-03-14, 10:26
  5. SQL Funktion ruft Serviceprogramm auf - Parameter übergabe
    By loisl in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 08-11-13, 17:37

Tags for this Thread

Berechtigungen

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