IBM stellt seit einigen Jahren immer mehr sog. IBM i Services (früher IBM SQL Services) zur Verfügung, mit denen man via Aufruf einer SQL Prozedur oder Function verschiedene API’s des Betriebssystems einfacher und schneller aufrufen kann, als das bisher der Fall war.
In dieser Rubrik werde ich Ihnen von Zeit zu Zeit den ein oder anderen IBM i Service näher bringen, der uns bei der täglichen Arbeit mit unseren Kunden schon geholfen hat.
Los geht es mit dem Service, der uns Informationen über aktive Jobs zurück gibt.
ACTIVE_JOB_INFO
Mit einem simplen
select * from table(qsys2.active_job_info(DETAILED_INFO => ‘ALL’));
erhalten Sie alle derzeit aktiven Jobs auf dem System zurück mit allen möglichen Informationen bis hin zum gerade ausgeführten SQL Statement Text.
Wir nutzen diesen Service bei verschiedenen Projekte, um z.B. abzufragen, ob ein bestimmter Job bereits x mal läuft und wenn ja, soll er nicht noch einmal gestartet werden.
Damit kann man aber auch den CPU oder Speicherverbrauch aller Jobs im System überwachen, um sich einen kleinen Monitor dazu zu bauen.
Genauso gut kann man damit alle x Sekunden abfragen, ob es Jobs auf Status MSGW im System gibt und dann entsprechend reagieren.
Die Möglichkeiten sind zahlreich.
Der Service verfügt über allerhand Filter, mit denen man direkt das zurückgegebene Resultset einschränken kann ohne, dass man gleich mit Where Bedingungen anfangen muss.
So gibt der
select * from table(qsys2.active_job_info(JOB_NAME_FILTER => ‘*CURRENT’));
alle Jobs zurück, die den gleichen Job Namen haben, wie mein aktueller Job.
Diese Anweisung lässt sich überall aufrufen, wo man auch andere SQL Anweisungen aufrufen kann.
Z.B. direkt aus einem embedded SQL RPG Programm oder einem IceBreak RPG Microservice, welcher mittels json_sqlResultSet die o.g. Daten dann direkt als Json Daten zurück gibt.
Eine detaillierte Beschreibung aller Parameter und Filter erhalten Sie hier:
https://www.ibm.com/docs/en/i/7.4?topic=services-active-job-info-table-function
Ein weiterer, hilfreicher Service ist
QCMDEXC
Wie der Name vermuten lässt, kann man damit jeden beliebigen CL Befehl aufrufen, ganz ohne eigen kreierte API Aufrufe.
Ein
CALL QSYS2.QCMDEXC(‘ADDLIBLE QIWS);
fügt die Bibliothek der Bibliotheksliste hinzu.
Mit einem weiteren Service
LIBRARY_LIST_INFO
lässt sich dies direkt überprüfen:
SELECT * FROM QSYS2.LIBRARY_LIST_INFO;
Kombiniert man diese Services mit den Webservice oder Microservice Funktionen von IceBreak, erhält man von außen einen sehr schnell erstellten Zugriff auf alle wichtigen Systemfunktionen und kann somit z.B. Überwachungsprogramme und moderne Frontends erstellen, die keinen direkten Zugriff zur Datenbank benötigen.
Sie haben konkrete Anforderungen, bei denen Ihnen IBM i Services ggf. helfen können?
Schreiben Sie mir oder rufen Sie mich an, damit wir unverbindlich darüber reden können.