[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2007
    Beiträge
    1

    Question Selbst erstellte Java-Exceptions in RPG-Programm verarb. (RPG-Programm, Modul, Java)

    Hallo,

    Ich habe folgendes Problem, und hoffe, das hier jemand Tipps hat.

    Folgende Situation:

    Ich habe ein RPG-Programm, das mit einer Message aufgerufen wird. Dies setzt ein CMDEXC ab, als Parameter RUNJVA auf eine Java-Klasse. Soweit so gut.

    Das Java-Programm wirft je nach Grad der Wichtigkeit selbst erstellte Exceptions. Diese sollen verschieden behandelt werden, z.B. Weitermachen, erneut versuchen, Mail an Admin .. usw.

    Das Problem ist, das der CMDEXC mit 0 oder 1 zurückliefert, also RUNJVA hat geklappt oder hat nicht geklappt (Nicht geklappt wenn ich eine Exception werfe). Auf eventuelle Exceptions des Java-Programms kann ich also nicht direkt reagieren, da ich nur 0 oder 1 bekomme, jedoch nicht die genaue Exception. Wie kann man das am geschicktesten lösen, das ich im Falle eines Fehlers das RPG-Programm dazu bewege, sich irgendwo die Exception herzuholen und zu verarbeiten. Ich denke da so an DB-File, MSGQ, DTAQ oder ähnliches.

    Hat jemand da Tipps?

    PS: Das CMDEXC ist in einem Modul, und darf nicht verändert werden.

    Vielen Dank,

    MMeyer
    Last edited by MMeyer; 14-03-07 at 10:27. Grund: Sinn-Fehler

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    833
    Hallo MMeyer,


    wenn das Javaprogramm auf der i5 läuft und eine
    Exception vorkommt, dann schreibt das System i.d.R. die Meldung in die Datei STDERR in der Bibliothek QTEMP.
    Vielleicht gibt es auch die Datei STDOUT in der QTEMP.

    Mit einem OVRDBF kann man die Dateien auch in eine
    andere Bibliothek umlegen.

    Also bei einem Fehler mal die Bibliothek QTEMP prüfen.

    Evtl. das Javaprogramm so modifizieren das in einem
    Fehlerfall einfach eine DTAARA oder ähnliches gefüllt wird.

    Gruss
    Michael

  3. #3
    Registriert seit
    Oct 2004
    Beiträge
    240
    Da ich Java-Aufrufe aus RPG (oder sonst einer 3GL-Sprache) vermeide, hier ein ungetesteter Ratschlag.

    Normalerweise ist das 0 (bei Fehlerfreiheit) der Exitcode. Man könnte einzelne Exceptions im Javaprogramm abfrage und dann mit z.B. System.exit(10) usw. unterschiedliche Exitcodes je Fehler erzeugen.

    Das setzt allerdings voraus, dass man das Javaprogramm anpassen kann.

    Ob der Exitcode auch im RPG ankommt, habe ich, wie gesagt, auch noch nicht getestet.

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    sicherlich kann man auch das noch heilen (System.exit() kann die errno besetzen und an die kommt man per Einbindung einer C Funktion dran), aber das Design ist von Beginn an krumm und da sollte man ansetzen.
    Der Aufruf eines main per QCMDEXC und das durchrattern einer Exception mit damit verbundenem abschmieren lassen der Java Runtime ist der absolut teuerste Weg eine Java Funktion zu nutzen. Da würde ich keine weitere Zeile Code dransetzen und das von Grund auf anders lösen.
    - ein kleines Java Programm, das in einer Schleife an einer DTAQ wartet und per SBMJOB gestartet wird und dann bis zum PWRDWNSYS aktiv bleibt
    - wenn das RPG Programm was von Java will, erstellt es einmal pro Job eine AntwortQ und stellt einen Eintrag in die Q des Java Programms mit den Anforderungsdaten und sagt dem Java Programm wohin die Antwort gehen soll, dann wartet es auf die Antowrt

    Dieter Bender

    PS: den stderr auszuwerten, oder was in eine DataArea zu schreiben, das würde ich bleiben lassen, das macht das Ganze noch morscher

    Zitat Zitat von MMeyer Beitrag anzeigen
    Hallo,

    Ich habe folgendes Problem, und hoffe, das hier jemand Tipps hat.

    Folgende Situation:

    Ich habe ein RPG-Programm, das mit einer Message aufgerufen wird. Dies setzt ein CMDEXC ab, als Parameter RUNJVA auf eine Java-Klasse. Soweit so gut.

    Das Java-Programm wirft je nach Grad der Wichtigkeit selbst erstellte Exceptions. Diese sollen verschieden behandelt werden, z.B. Weitermachen, erneut versuchen, Mail an Admin .. usw.

    Das Problem ist, das der CMDEXC mit 0 oder 1 zurückliefert, also RUNJVA hat geklappt oder hat nicht geklappt (Nicht geklappt wenn ich eine Exception werfe). Auf eventuelle Exceptions des Java-Programms kann ich also nicht direkt reagieren, da ich nur 0 oder 1 bekomme, jedoch nicht die genaue Exception. Wie kann man das am geschicktesten lösen, das ich im Falle eines Fehlers das RPG-Programm dazu bewege, sich irgendwo die Exception herzuholen und zu verarbeiten. Ich denke da so an DB-File, MSGQ, DTAQ oder ähnliches.

    Hat jemand da Tipps?

    PS: Das CMDEXC ist in einem Modul, und darf nicht verändert werden.

    Vielen Dank,

    MMeyer
    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. Rückgabewert vom RPG Programm
    By mk in forum NEWSboard Java
    Antworten: 8
    Letzter Beitrag: 21-04-11, 21:51
  2. Java Programm aus ILE RPG aufrufen
    By PGMR in forum NEWSboard Java
    Antworten: 10
    Letzter Beitrag: 10-02-05, 10:33
  3. Java Programm aus ILE RPG aufrufen
    By PGMR in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 02-02-05, 13:10
  4. Aufruf von Java Programm direkt aus RPG
    By mk in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 09-09-04, 08:22

Berechtigungen

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