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

Thema: JAVA

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    13

    Post JAVA

    Hallo,
    Ich möchte die Returncodes eines Java-Pgm's in einem Cobol-Programm/CL-Pgm auswerten z.Zt. wird das Java-Pgm per RUNJAVA in einem CL aufgerufen. Die große frage wie komme ich an den Returncode des Javaprogramms bzw. wie kann ich zwischen Cl u.o. Cobol Parameter mit Java Programmen austauschen.

    kay

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.286

    Post

    Hallo,

    das sind eigentlich zwei Fragen.
    Java, RUNJAVA und QSH CMD(java ...) bzw. STRQSH CMD(java ...) starten eine JVM und rufen darin eine main Methode einer Java class auf. Die JVM gibt eigentlich nix zurück, ausser einem return Code, der beim System.exit() durch einen Parameter gesetzt wird. An diesen Return Code sollte man im CL per RCVMSG drankommen, bzw bei was anderem als 0 (normal exit) sollte eine CPF MSG durchbraten, die man auch mit MONMSG fangen könnte. Eine echte Rückgabe erfolgt hier nicht, da main vom Typ void ist.
    Zur Parameter Rückgabe sind normalerweise Aufrufe über JNI (Java native Interface) vorgesehen, die allerdings aus COBOL und RPG problematisch und aus CL nicht möglich sind, da hierfür ein Multithreaded Kontext erforderlich ist. Aus Java Sicht rate ich von sowas üblicherweise ab, da man sich hiermit meist mehr Probleme einfängt als löst.
    Was hast Du denn konkret damit vor???

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

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    13

    Smile

    Erstmal danke für diese verständliche Antwort. Es soll aus einem Cobol-Pgm ein Java-Pgm aufgerufen werden, dieses Java-Pgm führt einige Datenbankupdates aus und gibt im Fehlerfall einen negativen Returncode zurück (das ist die Vorgabe, das Javaprogramm existiert bereits). Das Cobolprogramm (Dialog) soll diesen Ret-Code nun auswerten und eine entsprechende Fehlermeldung ausgeben. das ist eigentlich alles.

    kay

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.286

    Post

    Hallo Kay,

    ein paar Fragen habe ich noch
    1. welches Release habt ihr?
    2. ist Performance wichtig (sprich wird das häufig aufgerufen)
    3. Wie sieht das Java Programm aus, macht der das alles im main() oder in einer static Routine oder halt so richtig OO ?
    Vielleicht wären auch die entsprechenden Code Snippets hilfreich.

    Dieter
    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
    Aug 2001
    Beiträge
    13

    Smile

    Hallo Dieter,

    Release V5R1
    Performace ist nicht ganz so wichtig.

    Tja das Java-Pgm ist/wird von einer externen Firma erstellt als Teil einer Internetanwendung und wir wollen die vorhandenen Routinen nutzen um in die entsprechen DB-Files zu schreiben. leider komm ich an das coding z.Zt nicht ran deswegen kann ich über das Java-Pgm auch nichts sagen....

    kay

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.286

    Post

    Hallo,

    ohne erweiterte Kooperation des Java Programmes ist da wenig zu holen; ich habe das gerade nochmal ausprobiert, aber die Rückgabe eines return codes mit System.exit() ist in den Wind geschossen. Zudem läuft der Java Aufruf nicht im interaktiven Programm und über die DTAQ wird eh nix zurück gegeben.

    Dieter

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

  7. #7
    Registriert seit
    Jun 2001
    Beiträge
    727

    Post

    Ab V5R1 gibt es in RPGIV einen neuen Datentyp 'O' = Object.
    Hier kannst du eine Java Object definieren.

    Bsp.

    Code:
    D Obj          S   O CLASS(*JAVA
    D                         :'java.lang.Object')
    D Str          S   O CLASS(*JAVA
    D                         :'java.lang.String')
    D Num          S   O CLASS(*JAVA
    D                         :'java.math.BigDecimal')
    Wenn du eine Methode (Procedure) eines Java-Objects definieren willlst sieht das folgendermaßen aus.

    Code:
    D objectEquals PR   N EXTPROC(*JAVA
    D                            : 'java.lang.Object'
    D                            : 'equals')
    C              IF objectEquals (obj1 : obj2)
    C ...
    C              ENDIF
    ..und noch etwas Code
    Code:
      D  BigDecimal              C                   'java.math.BigDecimal'
      D  add                     PR          O        EXTPROC(*Java: BigDecimal: 'add')
      D  otherNum                            O        CLASS(*Java: BigDecimal)
      D                                                CONST
      D ConstNum                 PR          O        EXTPROC(*Java: BigDecimal: *CONSTRUCTOR)
      D GetValue                 PR          O         EXTPROC(*Java: BigDecimal: 'toString')
      D                                                CLASS(*Java: 'java.lang.Stringv)
      D getLongValue             PR         20I 0      EXTPROC(*Java:'java.lang.Long':
                                                               'valueOf')
      D                                                STATIC
      D string                               O         CLASS(*Java:'java.lang.String')
      D                                                CONST
      D Num1                     S           O         CLASS(*Java:BigDecimal)
      D Num2                     S           O         CLASS(*Java:BigDecimal)
      D Total                    S           O         CLASS(*Java:BigDecimal)
      D longInteger              S         20I 0
      D*
      C                   EVAL                    Num1 = ConstNum(225)
      C                   EVAL                    Num2 = ConstNum(175)
      C                   EVAL                    total = add(Num1: Num2)
      C                   EVAL                    longInteger = 
                                                  getLongValue (GetValue (total))
    Sehr gut beschrieben ist das alles auch hier : http://publib.boulder.ibm.com/html/a...s/c0925073.pdf
    (Ab Seite 157)

    Sven



    [Dieser Beitrag wurde von Sven Schneider am 24. April 2002 editiert.]

  8. #8
    Registriert seit
    Dec 2000
    Beiträge
    99

    Post

    Hallo,
    so gehts:

    QSHELL aufrufen und das Programm ausführen;
    nach Beendigung $? auslesen:
    echo &?
    jetzt müßte der returnCode angezeigt werden.

    Wenn das funktioniert (und das sollte es eigentlich), einfach die STDOUT - Ausgabe umleiten, den ReturnCode rausparsen und
    im CL entsprechend reagieren ...

    Gruß

    Torsten

  9. #9
    Registriert seit
    Dec 2000
    Beiträge
    99

    Post

    Hoppla,

    es muß natürlich heißen

    echo $?

    Gruß

    Torsten

  10. #10
    Registriert seit
    Dec 2000
    Beiträge
    79

    Smile

    Hallo,
    hier ein Link auf einen Beitrag in der iSeries Knowledgebase.
    http://www-912.ibm.com/supporthome.n...ument/10000051

    Über das API QUSRJOBI kann der Exit-Code des letzten Programm-Aufrufs ermittelt werden.

    Thomas

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.286

    Post

    Hallo,

    das mit dem exit Code krankt allerdings daran, dass
    a) die JVM in einem anderen Job läuft und
    b) der Exit Code zumindest bei mir auch in der Qshell nicht zurück kommt.
    Das API scheidet aus demselben Grund aus.

    Bei dem RPG sind wir dann wieder bei den Threading issues, der Job Kontext muss Multithreaded sein, darf also nicht interaktiv sein.

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

  12. #12
    Registriert seit
    Dec 2000
    Beiträge
    99

    Post

    Hm,

    echo $? zeigt bei mir genau den Integerwert,
    der bei System.exit() als Argument übergeben
    wird.
    Auch wenn die JVM als BCHI Job läuft werden ja alle Ausgaben wieder an die Shell zurückgegeben.

    Getestet und für gut befunden unter V5R1M0, JDK1.3.1 ...

    Gruß

    Torsten

Similar Threads

  1. Java und Fehlermeldung jva0122 bei simplen "Hello World"
    By TARASIK in forum IBM i Hauptforum
    Antworten: 21
    Letzter Beitrag: 30-03-11, 14:48
  2. Java Version
    By Muchi in forum NEWSboard Java
    Antworten: 2
    Letzter Beitrag: 07-11-06, 12:00
  3. Rpg to java
    By Badener in forum NEWSboard Java
    Antworten: 5
    Letzter Beitrag: 13-07-06, 18:09
  4. Antworten: 3
    Letzter Beitrag: 06-06-06, 16:57
  5. Java Developer Kit 1.4
    By usafft in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 25-04-06, 08:23

Berechtigungen

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