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