PDA

View Full Version : Aufruf von Java aus SQL



Ralf_2011
10-10-11, 09:01
Hallo,
cih muß eine Java-programm eingebettet in eine CL-Routine aus einer SQL-procedure aufrufen (Call ...). Das funktioniert soweit auch ganz gut. Jedoch komme ich an die protokollnachrichten des Javaprogramms nich mehr ran . Die entsprechende SPOLL-File ist einfach verschwunden.

Kann mir da jemand einen Tip geben ?
Idealerweise würde ich natürlich die relevanten Meldungen des Java-Programms an den Messagebereich der SQL-Anweisung übergeben. Wenn mir dazu jemand ein Beispiel schicken kann wäre das für mich sehr hilfreich.

Mit freundlichen Grüßen

Ralf

Fuerchau
10-10-11, 10:19
Diese Methode ist etwas kompliziert. Besser wäre es, die SQL-Prozedur direkt als Java-Prozedur zu deklarieren.

Um die Ausgaben von Java zu erhalten musst du eine Ausgabeumleitung ins IFS machen:

java .... >OUT.TXT 2>ERR.TXT

Diese Ausgaben kannst du dir dann in eine PF kopieren (CPYFRMSTMF), auslesen und die benötigten Informationen in den SQL-Nachrichtenbereich stellen.

BenderD
10-10-11, 10:38
... wofür soll denn dieser Wackelhaufen gut sein???

D*B


Hallo,
cih muß eine Java-programm eingebettet in eine CL-Routine aus einer SQL-procedure aufrufen (Call ...). Das funktioniert soweit auch ganz gut. Jedoch komme ich an die protokollnachrichten des Javaprogramms nich mehr ran . Die entsprechende SPOLL-File ist einfach verschwunden.

Kann mir da jemand einen Tip geben ?
Idealerweise würde ich natürlich die relevanten Meldungen des Java-Programms an den Messagebereich der SQL-Anweisung übergeben. Wenn mir dazu jemand ein Beispiel schicken kann wäre das für mich sehr hilfreich.

Mit freundlichen Grüßen

Ralf

Fuerchau
10-10-11, 10:53
Lass ihn doch einfach.
Manchmal ist es einfach nur gut zu wissen dass und wie es geht :).

Ralf_2011
10-10-11, 12:41
Hallo Fuerchau,
vielen dank für die Info. Das Umlenken der Ausgabe könnte ich vermeiden indem ich das Protokoll gleich in eine PF ausgebe - Aber wie kann ich die PF in den SQL-Nachrichtendatei übergeben ?
Ich will erreichen, daß der SQL-Nutzer evtl. Probleme bei der Ausführung des java-Programms sieht und nicht nur die meldung "Fehler im externen programm ...." bekommt.

Fuerchau
10-10-11, 14:15
Dazu muss die Prozedur mit der Aufrufkonvention SQL definiert werden.
Dann bekommst du einen Parmeter "DiagnoseMessage" in den du max. 70 Stellen packen kannst.

Alternativ kannst du auch im CLP einen SNDPGMMSG absetzen, z.B.:

SNDPGMMSG MSGID(CPF9898)
MSGF(QCPFMSG)
MSGDTA('My Msg data')
TOPGMQ(*PRV (* *NONE *NONE))
MSGTYPE(*ESCAPE)


Natürlich musst du die Ausgabedatei/en auch einlesen :).

Beachte aber, dass dir bei Parallelaufruf dieser Prozedur die Ausgabedateien ggf. von verschiedenen Jobs überschrieben werden.
Da Java allerdings in einem eigenen Job ausgeführt wird kannst du QTEMP leider nicht verwenden.

Ich mache die Umleitung daher immer ins IFS mit einem Namen "OutNNNNNN.txt" wobei NNNNNN = Job-Nr. ist.

Ralf_2011
10-10-11, 14:36
... vielen Dank - genau das ist es .

Die java-Prozedur funktioniert jetzt problemlos und gibt ihre fehler ordnungsgemäß in den SQL-Nachrichtenbereich zurück.

:)

Mit freundlichen Grüßen

Ralf