PDA

View Full Version : JVM beenden



Seiten : [1] 2 3

Robi
24-03-10, 10:25
Neues Problem
Eine Fremdsoftware macht u.a. etwas mit Java.
(ILE RPG, SQL und Java)

Der Ablauf
Ein RPG Pgm ruft u.a. das fremde RPGLE Pgm, das mit SQL und java arbeitet. Das PRG-pgm ruft auch andere RPGLE Pgmme.
Nach dem Aufruf geschieht im Menü ein RCLACTGRP *eligible.
Wird nun das Pgm erneut gerufen funktioniert Java nicht mehr
Lt Hersteller wird mit dem RCLACTGRP java so komisch abgeschossen, das es nicht mehr aufrufbar ist.
Kann das sein ?
Gibt es nicht ein call 'beende-JVM-ordnugsgemäß' ?
das ich vor dem RCLACTGRP absetzen kann.

Hilfe
Gruß
Robi (der von Java keine Ahnung hat)

BenderD
24-03-10, 10:46
... die Java Unterstützung des RPG Compilers ist Murks (in Worten Murks, buchstabiert "M" "U" "R" "K" "S"!!!).
Der nächstliegende Workaround, der hier empfohlen wird, ist die JVM per JNI Aufruf (C Funktion) zu killen, was natürlich heißt, dass im nächsten Step wieder neu geladen wird, mit immensem Overhead.
Der tatsächliche Fehler liegt hier (wieder einmal) im Design. Die JVM gehört asynchron gestartet und asynchron bedient. (gibt es Open Source AppServer4RPG).

D*B


Neues Problem
Eine Fremdsoftware macht u.a. etwas mit Java.
(ILE RPG, SQL und Java)

Der Ablauf
Ein RPG Pgm ruft u.a. das fremde RPGLE Pgm, das mit SQL und java arbeitet. Das PRG-pgm ruft auch andere RPGLE Pgmme.
Nach dem Aufruf geschieht im Menü ein RCLACTGRP *eligible.
Wird nun das Pgm erneut gerufen funktioniert Java nicht mehr
Lt Hersteller wird mit dem RCLACTGRP java so komisch abgeschossen, das es nicht mehr aufrufbar ist.
Kann das sein ?
Gibt es nicht ein call 'beende-JVM-ordnugsgemäß' ?
das ich vor dem RCLACTGRP absetzen kann.

Hilfe
Gruß
Robi (der von Java keine Ahnung hat)

KM
24-03-10, 11:38
Der nächstliegende Workaround, der hier empfohlen wird, ist die JVM per JNI Aufruf (C Funktion) zu killen

In früheren Releases funktionierte das mal. In neueren (ich glaube seit V5R4) kann man die JVM nicht mehr manuell per JNI beenden. Nur bei Jobende wird auch die JVM beendet.

Gruß,
KM

BenderD
24-03-10, 11:45
... das sieht die JDK Doku der AS/400 anders (würde auch dem Java Standard widersprechen und die Kaffeetasse kosten), ob die RPG Programme damit noch zurechtgebogen werden können, weiß ich nicht sicher, ich sehe aber keinen Grund warumdas nicht mehr gehen sollte.

D*B


In früheren Releases funktionierte das mal. In neueren (ich glaube seit V5R4) kann man die JVM nicht mehr manuell per JNI beenden. Nur bei Jobende wird auch die JVM beendet.

Gruß,
KM

Robi
24-03-10, 11:54
Na toll.

Das das ein Designfehler ist denke ich auch.
solange ich das nicht ändern darf ... (den RPG Job im Bach über eine dataq füttern)

Du hast nicht zufällig ein Beispiel auf deiner Seite für das
ordentliche beenden der Jvm ?:) :D :cool:

Gruß
Robi

BenderD
24-03-10, 12:07
... das macht man dann gleich im Java und wird damit das grauseliche embedded Java im RPG los.
Als Beispiel (mgBdA) ungeprüft:
midrange.com -- JAVA400-L -- Re: Calling java from RPG - how to increase performance (http://archive.midrange.com/java400-l/200505/msg00132.html)

D*B,
der von all diesem Quatsch ("Q" "A" "T" "S" "C" "H") abrät!!!!!


Na toll.

Das das ein Designfehler ist denke ich auch.
solange ich das nicht ändern darf ... (den RPG Job im Bach über eine dataq füttern)

Du hast nicht zufällig ein Beispiel auf deiner Seite für das
ordentliche beenden der Jvm ?:) :D :cool:

Gruß
Robi

KM
24-03-10, 12:18
Dann schau mal hier nach.

RPG-Java Integration: Stopping the JVM - System iNetwork Forums (http://forums.systeminetwork.com/isnetforums/showthread.php?t=44454)

Ein sauberes Beenden der JVM ist also innerhalb eines Jobs nicht möglich. Ich hatte das mal nach einem Releasewechsel gemerkt, als der destroyJVM auf einmal nicht mehr funktionierte.

Gruß,
KM

Robi
24-03-10, 12:22
die software ist nicht von uns. Der Hersteller hat vorgeschlagen zukünftig kein RCLACTGRP zu machen
Ich bräuchte also einen Job der eine nicht von ihm gestartete JVM beendet.
Ich weiß zu wenig von Java um zu verstehen was da intern abgeht. (in meiner denke ist ein Job, der 'gekillt' wurde weg und kann wieder aufgerufen werden)
Gruß
Robi

Robi
24-03-10, 12:26
@KM
oh,
na das werd ich wohl mal lesen müssen...
Danke
Robi

BenderD
24-03-10, 12:32
... in diesem Fred geht es um ein weiter existierendes RPG Programm und das beenden und starten einer JVM.
Ich gehe davon aus, dass wir hier das umgekehrte Problem haben: ein RPG Programm wird entladen mit RCLACTGRP und kriegt die Verbindung zur JVM nicht mehr, oder will sie neu starten, was ihr nicht gelingt ohne sie zu beenden.

D*B,
der nochmal definitiv davon abrät diesen Java in RPG Krampf zu verwenden - selbst mit obigen Workarounds (wenn sie denn funzen), stolpert man nur von einem Loch ins nächste. Man denke nur an mehrere RPG Programme mit Java Aufrufen in unterschiedlichen Activationgroups mit RCLACTGRP...
und das Verhalten des JNI Krimskrams, den der RPG Compiler da generiert ist in ganz wesentlichen Punkten undokumentiert, sprich: die Wackelhaufen können nach Releasewechsel umfallen!


Dann schau mal hier nach.

RPG-Java Integration: Stopping the JVM - System iNetwork Forums (http://forums.systeminetwork.com/isnetforums/showthread.php?t=44454)

Ein sauberes Beenden der JVM ist also innerhalb eines Jobs nicht möglich. Ich hatte das mal nach einem Releasewechsel gemerkt, als der destroyJVM auf einmal nicht mehr funktionierte.

Gruß,
KM