-
Ich verstehe das aber ...
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
-
@KM
oh,
na das werd ich wohl mal lesen müssen...
Danke
Robi
-
da würde ich doch ein RCLSFWSUP vorschlagen.
D*B
 Zitat von Robi
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
-
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
Ja, das ist so.
und wenn du 1000 mal recht hast, das das Murks Mist und ich weiß nicht was ist ...
kann ich die JVM nicht 'ordentlich' beenden ?
Robi
-
Auch wenn man mir das hier nicht glauben mag, aber eine JVM kann man auf der iSeries nicht mehr manuell beenden. Früher ging das mit der Prozedur destroyJVM (siehe Ausschnitt aus ILE Programmers Guide V5R1). Aber in neueren Handbüchern ist das nicht mehr zu finden, weil es auch nicht mehr funktioniert.
Welches Release hast Du denn?
Gruß,
KM
Code:
/*------------------------------------------------------*/
/* destroyJVM */
/*------------------------------------------------------*/
P destroyJVM B EXPORT
D destroyJVM PI N
D rc S LIKE(jint)
D rpgRc S N
D jvm S * DIM(1)
D env S *
D bufLen S LIKE(jsize) INZ(%elem(jvm))
D nVMs S LIKE(jsize)
/free
//----------------------------------------------------------------
// See if there's a JVM started
//----------------------------------------------------------------
rc = JNI_GetCreatedJavaVMs (jvm : bufLen : nVMs);
//----------------------------------------------------------------
// If JVM is started, destroy it
//----------------------------------------------------------------
if (rc = 0
and nVMs > 0);
JavaVM_P = jvm(1);
rc = DestroyJavaVM (jvm(1));
endif;
if (rc = 0);
return *ON;
else;
return *OFF;
endif;
/end-free
P destroyJVM E
Figure 83. Source Code for destroyJVM
-
Wenn es denn ein Batchjob ist, mach einfach einen TFRJOB.
Damit beendest du den Job und auch die JVM und startest halt einen neuen.
-
@KM
Danke für die Info, dort läuft V5R4
@Fuerchau
Ist teilweise versucht worden, macht andere Probleme
Dank dieses Thred wird nun ein serverjob der via dataq bedient wird die Aufgabe übernehmen. Der wird nur zur Nacht beendet.
dann sollte es gehen
Danke an Alle
Robi
-
@Dieter
Sollte keine Schelte sein, nur ein verzweifelter Hilferuf.
Das kleine Free-Programm aus dem o.a. Link hatte ich schon probiert.
Es meldet erst das die JVM beendet ist und dann einen Haufen Fehler.
Auf jeden Fall ging es nicht.
Das destroy hab ich noch nicht probiert
auch dir großen Dank
Robi
-
Weitere schlechte Nachrichten
das mit dem destroy geht, wie von KM beschrieben, auch nicht.
Und die Umstellung auf einen Server Job ist nicht möglich, das es in dem Pgm einen kleinen Dialog Teil gibt, der natürlich so nicht mehr funktioniert. Da der Dialog mit Dateien die vom Java erzeugt werden arbeitet, (Qtemp ) ist das auch nicht ohne weiteres zu trennen.
Bleibt das Prob. die JVM 'ordentlich' zu beenden.
Robi
-
nochmal ein paar Grundlegende Zusammenhänge zum Verständnis:
- RPG verwendet für seine Java Einbindung das Java native Interface (JNI), das ist eine Java Standardschnittstelle für C Programme, die auch auf einer AS/400 wie auf jeder anderen Plattform funktioniert, wird das nicht so implementiert, gibt es keine Kaffeetasse.
- JNI Anwendungen laufen (skizziert) wie folgt:
-- erzeugen der Java VM mit JNI_CreateJavaVM, hier wird die JVM geladen und man bekommt ein array of pointer, mit dem man auf Funktionen der JVM zugreifen kann
-- Aufruf von Java Funktionen über die erhaltenen Pointer
-- beenden der JVM mit DestroyJavaVM (macht man das nicht, stirbt die VM spätestens bei Ende des Prozesses = Job)
Bei der Verwendung von Java in RPG Programmen über die Unterstützung des Compilers macht man selber keinen JNI_CreateJavaVM (das versucht der Compiler implizit), mit einer Palette an Nebenwirkungen, man kann nicht steuern wie man die JVM gestartet haben will und man kann das beenden aus RPG nicht steuern (da man an die Pointerstruktur nicht drankommt!!!).
Im vorliegenden Fall wird ein RPG Programm mit RCLACTGRP rausgefenstert, mit der Folge, dass die Werte der Pointer, die die Verbindung zur JVM darstellen futsch sind.
Wird jetzt das RPG Programm aufgerufen, hat das Pointerfehler zur Folge, da die RPG Runtime den Connect zur noch existierenden JVM nicht mehr bekommt (zeitweilig wurde da einfach eine weitere gestartet, was mit neueren Releases nicht mehr geht).
Problem ist hier in keinem Fall das "ordentliche" beenden der JVM, das geht in jedem C Programm ohne jedes Problem. Problem ist hier, dass man (so wie es aussieht) ein RPG Programm mit RCLACTGRP rausfeuern kann und dasselbe Programm anschließende keinen connect zur JVM mehr findet.
Wenn das aus dem Kaffeesatz raus soll, dann muss hier mehr Information auf den Tisch.
D*B
 Zitat von Robi
Weitere schlechte Nachrichten
das mit dem destroy geht, wie von KM beschrieben, auch nicht.
Und die Umstellung auf einen Server Job ist nicht möglich, das es in dem Pgm einen kleinen Dialog Teil gibt, der natürlich so nicht mehr funktioniert. Da der Dialog mit Dateien die vom Java erzeugt werden arbeitet, (Qtemp ) ist das auch nicht ohne weiteres zu trennen.
Bleibt das Prob. die JVM 'ordentlich' zu beenden.
Robi
-
Danke Dieter,
ich versuch 's mal ...
da ich weis, wann das Pgm verlassen wird, könnte ich unmittelbar vorher ein 'beende' aufrufen.
leider gehen die Beispiele nicht
(oder ich mach was falsch)
Das Destroy war ja ein srvpgm.
Da mein rufendes pgm ein RPG ist habe ich es in ein separates LE pgm gepackt, das ich rufe mit actgrp(*caller)
Robi
-
"funktioniert nicht", "geht nicht", sind etwas generische Angaben, es ist auch schön, wenn ihr wisst was das Programm macht und warum der RCLACTGRP erforderlich ist, oder ein RRTJOB nicht geht, aber davon weiß es der geneigte Leser hier nicht; ein wenig konkreter müsste das schon sein (wenn das denn per Ferndiagnose im Forum überhaupt lösbar ist.
D*B
 Zitat von Robi
Danke Dieter,
ich versuch 's mal ...
da ich weis, wann das Pgm verlassen wird, könnte ich unmittelbar vorher ein 'beende' aufrufen.
leider gehen die Beispiele nicht
(oder ich mach was falsch)
Das Destroy war ja ein srvpgm.
Da mein rufendes pgm ein RPG ist habe ich es in ein separates LE pgm gepackt, das ich rufe mit actgrp(*caller)
Robi
Similar Threads
-
By Marimari1009 in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 10-01-07, 11:41
-
By Klabautermann in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 29-09-06, 15:39
-
By KM in forum NEWSboard Java
Antworten: 1
Letzter Beitrag: 21-07-06, 11:13
-
By gaby68 in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 14-06-06, 16:27
-
By hs in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 12-12-01, 09:43
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