COBOL und Java

homer65

Top Contributor
Hallo Gemeinde,
ich experimentiere gerade damit ein Java Programm von einem COBOL Programm unter z/OS aus aufzurufen.
Das funktioniert grundsätzlich auch. Allerdings tue ich mich bei der Übergabe von Variablen schwer.
Ein einzelnes Byte läßt sich ohne Probleme von COBOL nach Java und umgekehrt von Java nach COBOL übertragen.
Und bei einfachen Datentypen sieht es auch ok aus.
Aber für praktische Zwecke sollten schon größere Datenblöcke übertragen werden.
Zum Beispiel wäre PIC X(1000) nach byte[1000] und umgekehrt schön.
Habe nur keine Idee wie das zu realisieren ist.
Habt ihr eine Idee?
Aber sagt bitte nicht ich sollte 1000 mal ein einzelnes Byte übertragen.
Gruß Christian
 
Wie machst du es denn im Moment, ehrlich gesagt hab ich keine Ahnung aber ich fände interessant zu sehen wie das funktioniert.

Nach meiner Vorstellung sollte man das evtl über eine SD mappen können, also eine seq. Datei rüberschieben und dann entsprechend mit der Satzstruktur auslesen?
 
Nach meiner Vorstellung sollte man das evtl über eine SD mappen können, also eine seq. Datei rüberschieben und dann entsprechend mit der Satzstruktur auslesen?

Per SD ist nicht so doll.
Erstens ist es erheblich langsamer als per Memory.
Zweitens ist es auch nicht so flexibel. Per Memory kann ich einen kleinen Teil Daten rüberschieben und in abhängigkeit vom Ergebniss den nächsten Teil und so weiter und so fort. Bei einer Datei muß ich alle Daten auf einmal rüberschieben und habe keine Zwischenergebnisse.
 
Interessant wie du die Brücke zwischen Java und COBOL gemacht hast.

Hast du über shared memory gedacht? Vieleicht Java unterstützt das nicht direct, das könnte aber mit JNI gemacht werden und umgekehrt von COBOL könntest du dasselbe oder ein anderes C programm benutzen um auf dem selben shared memory zuzugreifen.
 
Interessant wie du die Brücke zwischen Java und COBOL gemacht hast.
Hast du über shared memory gedacht? Vieleicht Java unterstützt das nicht direct, das könnte aber mit JNI gemacht werden und umgekehrt von COBOL könntest du dasselbe oder ein anderes C programm benutzen um auf dem selben shared memory zuzugreifen.

C haben wir leider auch nicht zur Verfügung.
 
Hallo homer65,

aber der aktuelle "IBM Enterprise COBOL for z/OS"-Compiler (Version 4.2) ist vorhanden ?
 
Das macht nichts.

Also:

1) Lesen im "Programming Guide" (z.B. SC27-1412-03) das Kapitel 31 "Communicating with Java methods" (vor und
zurück und fluchen).

2) Sich mit "Java JNI" befassen.

3) "Nachschulung" für "Cobol ADDRESS".

4) Nochmals lesen das Kapitel 31 und dann großes Aha-Erlebnis (Beispiel "processing a Java int array")

5) Und Lösung schreiben (hier Beispiel für "Cobol ===> Java"):

Ziel "Java byte array" ===> "Java data type: byte[]" nach "Corresponding COBOL data type: object reference jbyteArray"

a) Im "Cobo"l-Programm sich ein "jbyteArray" besorgen mit "CALL NewByteArray"

b) Das "jbyteArray" mit Inhalt füllen mit "CALL SetByteArrayRegion"

c) Und dann "INVOKE" "Java"-Methode.

6) Glückliches Ende
 
zu 1: Joh, habe ich schon, insbesondere das "fluchen" klappt ganz gut. 🙂
Das erste Problem ist direkt auf der ersten Seite.
Wo finde ich denn das JNI Copy Buch?
Habe schon gesucht und gesucht, ist aber nicht zu finden.
 
Hallo homer65,

vermutlich unter "/usr/lpp/cobol/include/JNI.cpy".

Die LKED-Karte für die Cobol-UP-DLL dann unter "/usr/lpp/cobol/lib/igzcjava.x".
 
Hallo zusammen,

ein ganz anderer Ansatz wäre einen anderen COBOL (Cross-) Compiler unter z/OS zu verwenden, der COBOL nach Java umsetzt. Wie COBOL nach Java umgesetzt wird ist für den COBOL Entwickler nicht relevant, da er wie gewohnt das COBOL Verhalten beibehält.

Da dann COBOL schon auf Java Ebene vorhanden ist, können Parameter ganz einfach zwischen beiden Welten ausgetauscht werden.

Eine viel ausdehnendere Frage wäre: muss z/OS bestehen bleiben, oder kann auch zLinux in Betracht gezogen werden?!?

viele grüße
uwe
 
Hallo Uwe,
es geht darum einen Rechenkern, der bisher in COBOL programmiert war, durch Java zu ersetzen.
Dieser Rechenkern wird von verschiedensten COBOL Programmen in unterschiedlichen Systemen aufgerufen.
Es soll aber nur der Rechenkern neu gemacht werden und nicht unsere komplette Softwarelandschaft umgekrempelt werden.
 
Hallo Christian,

schade. Denn das ist ein Super Alternative zu dem Mainframe COBOL Compiler. So wie ich das verstehe ist es bei dir andersherum, dass COBOL Bleibt und Module nach Java ausgelagert werden.

Bei den Meisten Anwendungslandschaften ist es anders herum. Da wurde die grafische Oberfläche zum Beispiel mit Java Servlet erstellt, der vorhandene Rechenkern, der noch in COBOL vorhanden ist, soll dann darin eingebunden werden.

Für genauere Informationen, wenn Interesse besteht, bitte per eMail schicken.

viele grüße
uwe
 
Hallo zusammen,

Schaut euch doch mal den Foliensatz "Integrating COBOL with Java" von Tom Ross von der IBM an:

www-304.ibm.com/support/docview.wss?uid=swg27015223&aid=1&wv=1

Dort findet sich eine Menge interessanter Fakten dazu!

Viele Grüße,
Kalli
 

Zurück
Oben