-
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
-
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
-
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
-
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
-
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
-
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???
-
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.]
-
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
-
Hoppla,
es muß natürlich heißen
echo $?
Gruß
Torsten
-
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
-
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
-
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
-
By TARASIK in forum IBM i Hauptforum
Antworten: 21
Letzter Beitrag: 30-03-11, 13:48
-
By Muchi in forum NEWSboard Java
Antworten: 2
Letzter Beitrag: 07-11-06, 11:00
-
By Badener in forum NEWSboard Java
Antworten: 5
Letzter Beitrag: 13-07-06, 17:09
-
By woki in forum NEWSboard Java
Antworten: 3
Letzter Beitrag: 06-06-06, 15:57
-
By usafft in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 25-04-06, 07:23
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks